From 8b053f1f7dc90d8296ee9d45ba7934cc9fb7aa6d Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Sat, 4 Feb 2017 06:06:30 -0800 Subject: [PATCH] analyze, control: fix plotting, aggregation --- analyze/analyze_data_4_aggregate_all.go | 22 +++-- .../analyze_data_4_aggregate_timeseries.go | 6 +- ...nalyze_data_4_aggregate_timeseries_test.go | 60 ++++++------ analyze/analyze_data_5_plot.go | 98 +++++++++++++++++-- analyze/analyze_data_7_finalize_everything.go | 35 ++++++- .../analyze.yaml | 8 ++ .../analyze.yaml | 16 ++- .../03-write-1M-keys-1000-client/analyze.yaml | 16 ++- .../04-write-too-many-keys/analyze.yaml | 16 ++- control/step2_stress_util_report_aggregate.go | 2 + 10 files changed, 216 insertions(+), 63 deletions(-) diff --git a/analyze/analyze_data_4_aggregate_all.go b/analyze/analyze_data_4_aggregate_all.go index 456aa56c..55ad7601 100644 --- a/analyze/analyze_data_4_aggregate_all.go +++ b/analyze/analyze_data_4_aggregate_all.go @@ -386,7 +386,7 @@ func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int) } // aggregate memory usage by number of keys - colSecond, err := data.aggregated.Column("SECOND") + colUnixSecond, err := data.aggregated.Column("UNIX-SECOND") if err != nil { return err } @@ -398,18 +398,24 @@ func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int) if err != nil { return err } - if colSecond.Count() != colMemoryMB.Count() { - return fmt.Errorf("SECOND column count %d, AVG-VMRSS-MB column count %d", colSecond.Count(), colMemoryMB.Count()) + if colUnixSecond.Count() != colMemoryMB.Count() { + return fmt.Errorf("SECOND column count %d, AVG-VMRSS-MB column count %d", colUnixSecond.Count(), colMemoryMB.Count()) } if colAvgThroughput.Count() != colMemoryMB.Count() { return fmt.Errorf("AVG-THROUGHPUT column count %d, AVG-VMRSS-MB column count %d", colAvgThroughput.Count(), colMemoryMB.Count()) } - if colSecond.Count() != colAvgThroughput.Count() { - return fmt.Errorf("SECOND column count %d, AVG-THROUGHPUT column count %d", colSecond.Count(), colAvgThroughput.Count()) + if colUnixSecond.Count() != colAvgThroughput.Count() { + return fmt.Errorf("SECOND column count %d, AVG-THROUGHPUT column count %d", colUnixSecond.Count(), colAvgThroughput.Count()) } var tslice []keyNumAndMemory - for i := 0; i < colSecond.Count(); i++ { + for i := 0; i < colUnixSecond.Count(); i++ { + vv0, err := colUnixSecond.Value(i) + if err != nil { + return err + } + v0, _ := vv0.Int64() + vv1, err := colMemoryMB.Value(i) if err != nil { return err @@ -424,9 +430,9 @@ func (data *analyzeData) aggregateAll(memoryByKeyPath string, totalRequests int) point := keyNumAndMemory{ keyNum: int64(vf2), - maxMemoryMB: sec2maxVMRSSMB[int64(vf2)], + maxMemoryMB: sec2maxVMRSSMB[v0], avgMemoryMB: vf1, - minMemoryMB: sec2minVMRSSMB[int64(vf2)], + minMemoryMB: sec2minVMRSSMB[v0], } tslice = append(tslice, point) } diff --git a/analyze/analyze_data_4_aggregate_timeseries.go b/analyze/analyze_data_4_aggregate_timeseries.go index 8ded2bbd..79edb76d 100644 --- a/analyze/analyze_data_4_aggregate_timeseries.go +++ b/analyze/analyze_data_4_aggregate_timeseries.go @@ -55,8 +55,10 @@ func processTimeSeries(tslice []keyNumAndMemory, unit int64, totalRequests int) } kss := []keyNumAndMemory{} - for _, v := range rm { - kss = append(kss, v) + delete(rm, 0) + for k, v := range rm { + kn := keyNumAndMemory{keyNum: k, maxMemoryMB: v.maxMemoryMB, avgMemoryMB: v.avgMemoryMB, minMemoryMB: v.minMemoryMB} + kss = append(kss, kn) } sort.Sort(keyNumAndMemorys(kss)) diff --git a/analyze/analyze_data_4_aggregate_timeseries_test.go b/analyze/analyze_data_4_aggregate_timeseries_test.go index eb239cc9..845fbde6 100644 --- a/analyze/analyze_data_4_aggregate_timeseries_test.go +++ b/analyze/analyze_data_4_aggregate_timeseries_test.go @@ -23,42 +23,42 @@ func Test_processTimeSeries(t *testing.T) { var tslice []keyNumAndMemory for i := int64(0); i < 10; i++ { dp := keyNumAndMemory{ - keyNum: 50, - memoryMB: float64(i + 1), + keyNum: 50, + avgMemoryMB: float64(i + 1), } tslice = append(tslice, dp) } pss := processTimeSeries(tslice, 20, 555) expexcted := []keyNumAndMemory{ - {keyNum: 20, memoryMB: 1}, - {keyNum: 40, memoryMB: 1}, - {keyNum: 60, memoryMB: 1}, - {keyNum: 80, memoryMB: 2}, - {keyNum: 100, memoryMB: 2}, - {keyNum: 120, memoryMB: 3}, - {keyNum: 140, memoryMB: 3}, - {keyNum: 160, memoryMB: 3}, - {keyNum: 180, memoryMB: 4}, - {keyNum: 200, memoryMB: 4}, - {keyNum: 220, memoryMB: 5}, - {keyNum: 240, memoryMB: 5}, - {keyNum: 260, memoryMB: 5}, - {keyNum: 280, memoryMB: 6}, - {keyNum: 300, memoryMB: 6}, - {keyNum: 320, memoryMB: 7}, - {keyNum: 340, memoryMB: 7}, - {keyNum: 360, memoryMB: 7}, - {keyNum: 380, memoryMB: 8}, - {keyNum: 400, memoryMB: 8}, - {keyNum: 420, memoryMB: 9}, - {keyNum: 440, memoryMB: 9}, - {keyNum: 460, memoryMB: 9}, - {keyNum: 480, memoryMB: 10}, - {keyNum: 500, memoryMB: 10}, - {keyNum: 520, memoryMB: 0}, - {keyNum: 540, memoryMB: 0}, - {keyNum: 555, memoryMB: 0}, + {keyNum: 20, avgMemoryMB: 1}, + {keyNum: 40, avgMemoryMB: 1}, + {keyNum: 60, avgMemoryMB: 1}, + {keyNum: 80, avgMemoryMB: 2}, + {keyNum: 100, avgMemoryMB: 2}, + {keyNum: 120, avgMemoryMB: 3}, + {keyNum: 140, avgMemoryMB: 3}, + {keyNum: 160, avgMemoryMB: 3}, + {keyNum: 180, avgMemoryMB: 4}, + {keyNum: 200, avgMemoryMB: 4}, + {keyNum: 220, avgMemoryMB: 5}, + {keyNum: 240, avgMemoryMB: 5}, + {keyNum: 260, avgMemoryMB: 5}, + {keyNum: 280, avgMemoryMB: 6}, + {keyNum: 300, avgMemoryMB: 6}, + {keyNum: 320, avgMemoryMB: 7}, + {keyNum: 340, avgMemoryMB: 7}, + {keyNum: 360, avgMemoryMB: 7}, + {keyNum: 380, avgMemoryMB: 8}, + {keyNum: 400, avgMemoryMB: 8}, + {keyNum: 420, avgMemoryMB: 9}, + {keyNum: 440, avgMemoryMB: 9}, + {keyNum: 460, avgMemoryMB: 9}, + {keyNum: 480, avgMemoryMB: 10}, + {keyNum: 500, avgMemoryMB: 10}, + {keyNum: 520, avgMemoryMB: 0}, + {keyNum: 540, avgMemoryMB: 0}, + {keyNum: 555, avgMemoryMB: 0}, } if len(pss) != len(expexcted) { t.Fatalf("expected %+v, got %+v", expexcted, pss) diff --git a/analyze/analyze_data_5_plot.go b/analyze/analyze_data_5_plot.go index bc52285c..b2b767e6 100644 --- a/analyze/analyze_data_5_plot.go +++ b/analyze/analyze_data_5_plot.go @@ -45,7 +45,32 @@ type PlotConfig struct { OutputPathList []string `yaml:"output_path_list"` } -func (all *allAggregatedData) draw(cfg PlotConfig, cols ...dataframe.Column) error { +func points(col dataframe.Column) (plotter.XYs, error) { + bv, ok := col.BackNonNil() + if !ok { + return nil, fmt.Errorf("BackNonNil not found") + } + rowN, ok := col.FindLast(bv) + if !ok { + return nil, fmt.Errorf("not found %v", bv) + } + pts := make(plotter.XYs, rowN) + for i := range pts { + v, err := col.Value(i) + if err != nil { + return nil, err + } + n, _ := v.Float64() + pts[i].X = float64(i) + pts[i].Y = n + } + return pts, nil +} + +func (all *allAggregatedData) draw( + cfg PlotConfig, + cols ...dataframe.Column, +) error { // frame now contains // AVG-LATENCY-MS-etcd-v3.1-go1.7.4, AVG-LATENCY-MS-zookeeper-r3.4.9-java8, AVG-LATENCY-MS-consul-v0.7.2-go1.7.4 pl, err := plot.New() @@ -84,28 +109,85 @@ func (all *allAggregatedData) draw(cfg PlotConfig, cols ...dataframe.Column) err return nil } -func points(col dataframe.Column) (plotter.XYs, error) { - bv, ok := col.BackNonNil() +func pointsXY(colX, colY dataframe.Column) (plotter.XYs, error) { + bv, ok := colX.BackNonNil() if !ok { return nil, fmt.Errorf("BackNonNil not found") } - rowN, ok := col.FindLast(bv) + rowN, ok := colX.FindLast(bv) if !ok { return nil, fmt.Errorf("not found %v", bv) } pts := make(plotter.XYs, rowN) for i := range pts { - v, err := col.Value(i) + vx, err := colX.Value(i) if err != nil { return nil, err } - n, _ := v.Float64() - pts[i].X = float64(i) - pts[i].Y = n + x, _ := vx.Float64() + + vy, err := colY.Value(i) + if err != nil { + return nil, err + } + y, _ := vy.Float64() + + pts[i].X = x + pts[i].Y = y } return pts, nil } +func (all *allAggregatedData) drawXY( + cfg PlotConfig, + cols ...dataframe.Column, +) error { + if len(cols)%2 != 0 { + return fmt.Errorf("expected even number of columns (got %d columns)", len(cols)) + } + + // frame now contains + // AVG-LATENCY-MS-etcd-v3.1-go1.7.4, AVG-LATENCY-MS-zookeeper-r3.4.9-java8, AVG-LATENCY-MS-consul-v0.7.2-go1.7.4 + pl, err := plot.New() + if err != nil { + return err + } + pl.Title.Text = fmt.Sprintf("%s, %s", all.title, cfg.YAxis) + pl.X.Label.Text = cfg.XAxis + pl.Y.Label.Text = cfg.YAxis + pl.Legend.Top = true + + var ps []plot.Plotter + + for i := 0; i < len(cols)-1; i += 2 { + colX := cols[i] + colY := cols[i+1] + + pt, err := pointsXY(colX, colY) + if err != nil { + return err + } + + l, err := plotter.NewLine(pt) + if err != nil { + return err + } + l.Color = getRGB(all.headerToLegend[colY.Header()], i) + l.Dashes = plotutil.Dashes(i) + ps = append(ps, l) + + pl.Legend.Add(all.headerToLegend[colY.Header()], l) + } + pl.Add(ps...) + + for _, outputPath := range cfg.OutputPathList { + if err = pl.Save(plotWidth, plotHeight, outputPath); err != nil { + return err + } + } + return nil +} + func getRGB(legend string, i int) color.Color { tag := makeTag(legend) if strings.HasPrefix(tag, "etcd") { diff --git a/analyze/analyze_data_7_finalize_everything.go b/analyze/analyze_data_7_finalize_everything.go index f7031722..93907ba3 100644 --- a/analyze/analyze_data_7_finalize_everything.go +++ b/analyze/analyze_data_7_finalize_everything.go @@ -465,7 +465,7 @@ func do(configPath string) error { allLatencyFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.svg") allLatencyFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-LATENCY-MS-BY-KEY.png") plog.Printf("plotting %v", allLatencyFrameCfg.OutputPathList) - if err = all.draw(allLatencyFrameCfg, allLatencyFrame.Columns()...); err != nil { + if err = all.drawXY(allLatencyFrameCfg, allLatencyFrame.Columns()...); err != nil { return err } @@ -486,14 +486,32 @@ func do(configPath string) error { return err } + colMemMax, err := fr.Column("MAX-VMRSS-MB") + if err != nil { + return err + } + colMemMax.UpdateHeader(makeHeader("MAX-VMRSS-MB", makeTag(elem.Legend))) + if err = allMemoryFrame.AddColumn(colMemMax); err != nil { + return err + } + colMem, err := fr.Column("AVG-VMRSS-MB") if err != nil { return err } - colMem.UpdateHeader(makeHeader("AVG-LATENCY-MS", makeTag(elem.Legend))) + colMem.UpdateHeader(makeHeader("AVG-VMRSS-MB", makeTag(elem.Legend))) if err = allMemoryFrame.AddColumn(colMem); err != nil { return err } + + colMemMin, err := fr.Column("MIN-VMRSS-MB") + if err != nil { + return err + } + colMemMin.UpdateHeader(makeHeader("MIN-VMRSS-MB", makeTag(elem.Legend))) + if err = allMemoryFrame.AddColumn(colMemMin); err != nil { + return err + } } if err := allMemoryFrame.CSV(cfg.AllMemoryByKey); err != nil { return err @@ -508,7 +526,18 @@ func do(configPath string) error { allMemoryFrameCfg.OutputPathList[0] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.svg") allMemoryFrameCfg.OutputPathList[1] = filepath.Join(filepath.Dir(cfg.PlotList[0].OutputPathList[0]), "AVG-VMRSS-MB-BY-KEY.png") plog.Printf("plotting %v", allMemoryFrameCfg.OutputPathList) - if err = all.draw(allMemoryFrameCfg, allMemoryFrame.Columns()...); err != nil { + + // TODO: draw with error bar + var cols []dataframe.Column + for _, col := range allMemoryFrame.Columns() { + switch { + case strings.HasPrefix(col.Header(), "KEYS-"): + cols = append(cols, col) // x-axis + case strings.HasPrefix(col.Header(), "AVG-VMRSS-MB-"): + cols = append(cols, col) // y-axis + } + } + if err = all.drawXY(allMemoryFrameCfg, cols...); err != nil { return err } diff --git a/bench-configuration/01-write-1M-keys-client-variable/analyze.yaml b/bench-configuration/01-write-1M-keys-client-variable/analyze.yaml index 689c3490..ba894a13 100644 --- a/bench-configuration/01-write-1M-keys-client-variable/analyze.yaml +++ b/bench-configuration/01-write-1M-keys-client-variable/analyze.yaml @@ -152,6 +152,10 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-LATENCY-MS-BY-KEY.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-THROUGHPUT.svg image_type: remote @@ -172,6 +176,10 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-VMRSS-MB-BY-KEY.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/01-write-1M-keys-client-variable/AVG-READS-COMPLETED-DELTA.svg image_type: remote diff --git a/bench-configuration/02-write-1M-keys-best-throughput/analyze.yaml b/bench-configuration/02-write-1M-keys-best-throughput/analyze.yaml index a301027f..ae0c52b3 100644 --- a/bench-configuration/02-write-1M-keys-best-throughput/analyze.yaml +++ b/bench-configuration/02-write-1M-keys-best-throughput/analyze.yaml @@ -152,12 +152,12 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS.svg image_type: remote - - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT - image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg + - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-LATENCY-MS-BY-KEY.svg image_type: remote - - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU - image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg + - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-THROUGHPUT.svg image_type: remote - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VOLUNTARY-CTXT-SWITCHES @@ -168,10 +168,18 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-CPU.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-VMRSS-MB-BY-KEY.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/02-write-1M-keys-best-throughput/AVG-READS-COMPLETED-DELTA.svg image_type: remote diff --git a/bench-configuration/03-write-1M-keys-1000-client/analyze.yaml b/bench-configuration/03-write-1M-keys-1000-client/analyze.yaml index c05fa5e6..6b77ccb8 100644 --- a/bench-configuration/03-write-1M-keys-1000-client/analyze.yaml +++ b/bench-configuration/03-write-1M-keys-1000-client/analyze.yaml @@ -152,12 +152,12 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS.svg image_type: remote - - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT - image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg + - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-LATENCY-MS-BY-KEY.svg image_type: remote - - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU - image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg + - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-THROUGHPUT.svg image_type: remote - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VOLUNTARY-CTXT-SWITCHES @@ -168,10 +168,18 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-CPU.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-VMRSS-MB-BY-KEY.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/03-write-1M-keys-1000-client/AVG-READS-COMPLETED-DELTA.svg image_type: remote diff --git a/bench-configuration/04-write-too-many-keys/analyze.yaml b/bench-configuration/04-write-too-many-keys/analyze.yaml index f433fb2b..30f0e07f 100644 --- a/bench-configuration/04-write-too-many-keys/analyze.yaml +++ b/bench-configuration/04-write-too-many-keys/analyze.yaml @@ -151,12 +151,12 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS.svg image_type: remote - - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT - image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg + - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-LATENCY-MS-BY-KEY.svg image_type: remote - - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU - image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg + - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-THROUGHPUT.svg image_type: remote - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VOLUNTARY-CTXT-SWITCHES @@ -167,10 +167,18 @@ readme: image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-NON-VOLUNTARY-CTXT-SWITCHES.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-CPU.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB.svg image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY + image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-VMRSS-MB-BY-KEY.svg + image_type: remote + - image_title: 2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA image_path: https://storage.googleapis.com/dbtester-results/2017Q1-02-etcd-zookeeper-consul/04-write-too-many-keys/AVG-READS-COMPLETED-DELTA.svg image_type: remote diff --git a/control/step2_stress_util_report_aggregate.go b/control/step2_stress_util_report_aggregate.go index 978fe4fa..481f3a2e 100644 --- a/control/step2_stress_util_report_aggregate.go +++ b/control/step2_stress_util_report_aggregate.go @@ -40,6 +40,7 @@ func processTimeSeries(tss report.TimeSeries, unit int64, totalRequests int) key cumulKeyN := int64(0) maxKey := int64(0) + // TODO: support min,max latencies rm := make(map[int64]time.Duration) // this data is aggregated by second @@ -73,6 +74,7 @@ func processTimeSeries(tss report.TimeSeries, unit int64, totalRequests int) key } kss := []keyNumToAvgLatency{} + delete(rm, 0) for k, v := range rm { kss = append(kss, keyNumToAvgLatency{keyNum: k, avgLat: v}) }