mirror of https://github.com/etcd-io/dbtester.git
analyze, control: fix plotting, aggregation
This commit is contained in:
parent
8c78f923e5
commit
8b053f1f7d
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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") {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue