diff --git a/src/kvsrv/test_test.go b/src/kvsrv/test_test.go index 56168a2..0f1a88b 100644 --- a/src/kvsrv/test_test.go +++ b/src/kvsrv/test_test.go @@ -6,7 +6,6 @@ import ( "fmt" "io/ioutil" - "log" "math/rand" "runtime" "strconv" @@ -373,7 +372,7 @@ const ( ) func TestMemGet2(t *testing.T) { - const MEM = 100 // in MiB + const MEM = 10 // in MiB cfg := make_config(t, true) defer cfg.cleanup() @@ -408,7 +407,7 @@ func TestMemGet2(t *testing.T) { } func TestMemPut2(t *testing.T) { - const MEM = 100 // in MiB + const MEM = 10 // in MiB cfg := make_config(t, false) defer cfg.cleanup() @@ -423,6 +422,7 @@ func TestMemPut2(t *testing.T) { ck1.Put("k", "") runtime.GC() + var st runtime.MemStats runtime.ReadMemStats(&st) m := st.HeapAlloc / MiB @@ -433,7 +433,7 @@ func TestMemPut2(t *testing.T) { } func TestMemAppend2(t *testing.T) { - const MEM = 100 // in MiB + const MEM = 10 // in MiB cfg := make_config(t, false) defer cfg.cleanup() @@ -458,51 +458,57 @@ func TestMemAppend2(t *testing.T) { cfg.end() } -func TestMemPutMany2(t *testing.T) { +func TestMemPutMany(t *testing.T) { const ( - NPUT = 1_000_000 - MEM = 1000 + NCLIENT = 100_000 + MEM = 1000 ) cfg := make_config(t, false) defer cfg.cleanup() - cfg.begin("Test: memory use many puts") - ck := cfg.makeClient() - v := randValue(MEM) - ck.Put("k", v) + cks := make([]*Clerk, NCLIENT) + for i, _ := range cks { + cks[i] = cfg.makeClient() + } - // allow threads started by labrpc to exit + // allow threads started by labrpc to start time.Sleep(1 * time.Second) + cfg.begin("Test: memory use many puts") + + runtime.GC() runtime.GC() var st runtime.MemStats runtime.ReadMemStats(&st) m0 := st.HeapAlloc - for i := 0; i < NPUT; i++ { - ck.Put("k", v) + for i := 0; i < NCLIENT; i++ { + cks[i].Put("k", v) } - // allow threads started by labrpc to exit - time.Sleep(1 * time.Second) - runtime.GC() + time.Sleep(1 * time.Second) + runtime.GC() + runtime.ReadMemStats(&st) m1 := st.HeapAlloc - - //log.Printf("mem m0 %d m1 %d\n", m0, m1) - - if m1 > m0+NPUT/10 { - t.Fatalf("error: server using too much memory %d %d\n", m0, m1) + f := (float64(m1) - float64(m0)) / NCLIENT + if m1 > m0+(NCLIENT*200) { + t.Fatalf("error: server using too much memory %d %d (%.2f per client)\n", m0, m1, f) } + + for _, ck := range cks { + cfg.deleteClient(ck) + } + cfg.end() } -func TestMemGetMany2(t *testing.T) { +func TestMemGetMany(t *testing.T) { const ( NCLIENT = 100_000 ) @@ -516,6 +522,14 @@ func TestMemGetMany2(t *testing.T) { ck.Put("0", "") cfg.deleteClient(ck) + cks := make([]*Clerk, NCLIENT) + for i, _ := range cks { + cks[i] = cfg.makeClient() + } + + // allow threads started by labrpc to start + time.Sleep(1 * time.Second) + runtime.GC() runtime.GC() @@ -524,24 +538,24 @@ func TestMemGetMany2(t *testing.T) { m0 := st.HeapAlloc for i := 0; i < NCLIENT; i++ { - ck := cfg.makeClient() - ck.Get("0") - cfg.deleteClient(ck) + cks[i].Get("0") } + runtime.GC() + time.Sleep(1 * time.Second) runtime.GC() - runtime.GC() - //runtime.GC() runtime.ReadMemStats(&st) m1 := st.HeapAlloc + f := (float64(m1) - float64(m0)) / NCLIENT + if m1 >= m0+NCLIENT*10 { + t.Fatalf("error: server using too much memory m0 %d m1 %d (%.2f per client)\n", m0, m1, f) + } - log.Printf("mem m0 %d m1 %d\n", m0, m1) - - if m1 >= m0+NCLIENT { - t.Fatalf("error: server using too much memory m0 %d m1 %d\n", m0, m1) + for _, ck := range cks { + cfg.deleteClient(ck) } cfg.end() diff --git a/src/main/mrsequential.go b/src/main/mrsequential.go index 38de498..a28bbfc 100644 --- a/src/main/mrsequential.go +++ b/src/main/mrsequential.go @@ -10,8 +10,8 @@ import "fmt" import "6.5840/mr" import "plugin" import "os" +import "io" import "log" -import "io/ioutil" import "sort" // for sorting by key. @@ -41,7 +41,7 @@ func main() { if err != nil { log.Fatalf("cannot open %v", filename) } - content, err := ioutil.ReadAll(file) + content, err := io.ReadAll(file) if err != nil { log.Fatalf("cannot read %v", filename) }