|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 21/59] Report utilization statistics
From: George Dunlap <george.dunlap@xxxxxxxxxx>
Refactor the min/max into a separate type.
Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxx>
---
benchmark.go | 119 +++++++++++++++++++++++++++++++++++++----------------------
run.go | 4 +-
2 files changed, 78 insertions(+), 45 deletions(-)
diff --git a/benchmark.go b/benchmark.go
index 4b2d805..b0b55c7 100644
--- a/benchmark.go
+++ b/benchmark.go
@@ -87,21 +87,45 @@ func Throughput(lt int, lm int, t int, m int) (tput
float64) {
return
}
+func Utilization(lt int, lct time.Duration, t int, ct time.Duration) (util
float64) {
+ util = float64(ct - lct) / float64(t - lt)
+ return
+}
+
+type MinMax struct {
+ Min float64
+ Max float64
+}
+
+func (mm *MinMax) Update(x float64) {
+ if x > mm.Max {
+ mm.Max = x
+ }
+ if x < mm.Min || mm.Min == 0 {
+ mm.Min = x
+ }
+}
+
type WorkerSummary struct {
- MaxTput float64
+ MinMaxTput MinMax
+ MinMaxUtil MinMax
AvgTput float64
- MinTput float64
+ AvgUtil float64
}
type WorkerSetSummary struct {
Workers []WorkerSummary
TotalTput float64
- MaxTput float64
AvgAvgTput float64
+ MinMaxTput MinMax
+ MinMaxAvgTput MinMax
AvgStdDevTput float64
- AvgMaxTput float64
- AvgMinTput float64
- MinTput float64
+
+ TotalUtil float64
+ MinMaxUtil MinMax
+ MinMaxAvgUtil MinMax
+ AvgAvgUtil float64
+ AvgStdDevUtil float64
}
type BenchmarkRunData struct {
@@ -146,8 +170,10 @@ func (run *BenchmarkRun) Process() (err error) {
type Data struct{
startTime int
+ startCputime time.Duration
lastTime int
lastMops int
+ lastCputime time.Duration
}
data := make(map[WorkerId]*Data)
@@ -183,24 +209,19 @@ func (run *BenchmarkRun) Process() (err error) {
if d.startTime == 0 {
d.startTime = e.Now
+ d.startCputime = e.Cputime
} else {
tput := Throughput(d.lastTime, d.lastMops, e.Now,
e.Mops)
-
- if tput > s.MaxTput {
- s.MaxTput = tput
- }
- if tput < s.MinTput || s.MinTput == 0 {
- s.MinTput = tput
- }
- if tput > ws.MaxTput {
- ws.MaxTput = tput
- }
- if tput < ws.MinTput || ws.MinTput == 0 {
- ws.MinTput = tput
- }
+ util := Utilization(d.lastTime, d.lastCputime, e.Now,
e.Cputime)
+
+ s.MinMaxTput.Update(tput)
+ s.MinMaxUtil.Update(util)
+ ws.MinMaxTput.Update(tput)
+ ws.MinMaxUtil.Update(util)
}
d.lastTime = e.Now
d.lastMops = e.Mops
+ d.lastCputime = e.Cputime
}
for Id, d := range data {
@@ -208,45 +229,51 @@ func (run *BenchmarkRun) Process() (err error) {
s := &ws.Workers[Id.Id]
s.AvgTput = Throughput(d.startTime, 0, d.lastTime, d.lastMops)
- if s.AvgTput > ws.AvgMaxTput {
- ws.AvgMaxTput = s.AvgTput
- }
- if s.AvgTput < ws.AvgMinTput || ws.AvgMinTput == 0 {
- ws.AvgMinTput = s.AvgTput
- }
-
+ s.AvgUtil = Utilization(d.startTime, d.startCputime,
d.lastTime, d.lastCputime)
+
+ ws.MinMaxAvgTput.Update(s.AvgTput)
+ ws.MinMaxAvgUtil.Update(s.AvgUtil)
}
// Calculate the average-of-averages for each set
for set := range run.Results.Summary {
ws := &run.Results.Summary[set]
- var total float64
+ var totalTput float64
+ var totalUtil float64
var count int
for id := range ws.Workers {
- total += ws.Workers[id].AvgTput
+ totalTput += ws.Workers[id].AvgTput
+ totalUtil += ws.Workers[id].AvgUtil
count++
}
// FIXME -- Is this legit?
- ws.TotalTput = total
- ws.AvgAvgTput = total / float64(count)
+ ws.TotalTput = totalTput
+ ws.TotalUtil = totalUtil
+ ws.AvgAvgTput = totalTput / float64(count)
+ ws.AvgAvgUtil = totalUtil / float64(count)
}
// Then calculate the standard deviation
for set := range run.Results.Summary {
ws := &run.Results.Summary[set]
- var total float64
+ var totalAvgTput float64
+ var totalAvgUtil float64
var count int
for id := range ws.Workers {
- d := ws.Workers[id].AvgTput - ws.AvgAvgTput
- total += d * d
+ d1 := ws.Workers[id].AvgTput - ws.AvgAvgTput
+ d2 := ws.Workers[id].AvgUtil - ws.AvgAvgUtil
+ totalAvgTput += d1 * d1
+ totalAvgUtil += d2 * d2
count++
}
- v := total / float64(count)
- ws.AvgStdDevTput = math.Sqrt(v)
+ v1 := totalAvgTput / float64(count)
+ v2 := totalAvgUtil / float64(count)
+ ws.AvgStdDevTput = math.Sqrt(v1)
+ ws.AvgStdDevUtil = math.Sqrt(v2)
}
return
@@ -274,22 +301,26 @@ func (run *BenchmarkRun) TextReport() (err error) {
fmt.Printf("Set %d: %s\n", set, params)
}
- fmt.Printf("\n%8s %8s %8s %8s %8s %8s %8s %8s\n", "set", "total",
"avgavg", "stdev", "avgmax", "avgmin", "totmax", "totmin")
+ fmt.Printf("\n%8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s %8s
%8s\n", "set", "ttotal", "tavgavg", "tstdev", "tavgmax", "tavgmin", "ttotmax",
"ttotmin", "utotal", "uavgavg", "ustdev", "uavgmax", "uavgmin", "utotmax",
"utotmin")
for set := range run.WorkerSets {
ws := &run.Results.Summary[set]
- fmt.Printf("%8d %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f\n",
- set, ws.TotalTput, ws.AvgAvgTput, ws.AvgStdDevTput,
ws.AvgMaxTput, ws.AvgMinTput,
- ws.MaxTput, ws.MinTput)
-
+ fmt.Printf("%8d %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f
%8.2f %8.2f %8.2f %8.2f %8.2f %8.2f\n",
+ set,
+ ws.TotalTput, ws.AvgAvgTput, ws.AvgStdDevTput,
ws.MinMaxAvgTput.Max,
+ ws.MinMaxAvgTput.Min, ws.MinMaxTput.Max,
ws.MinMaxTput.Min,
+ ws.TotalUtil, ws.AvgAvgUtil, ws.AvgStdDevUtil,
ws.MinMaxAvgUtil.Max,
+ ws.MinMaxAvgUtil.Min, ws.MinMaxUtil.Max,
ws.MinMaxUtil.Min)
}
- if false {
- fmt.Printf("\n%8s %8s %8s %8s\n", "workerid", "avg", "min",
"max")
+ if true {
+ fmt.Printf("\n%8s %8s %8s %8s %8s %8s %8s\n", "workerid",
"tavg", "tmin", "tmax", "uavg", "umin", "umax")
for set := range run.Results.Summary {
for id := range run.Results.Summary[set].Workers {
s := run.Results.Summary[set].Workers[id]
- fmt.Printf("%2d:%2d %8.2f %8.2f %8.2f\n",
- set, id, s.AvgTput, s.MinTput,
s.MaxTput)
+ fmt.Printf("%2d:%2d %8.2f %8.2f %8.2f %8.2f
%8.2f %8.2f\n",
+ set, id,
+ s.AvgTput, s.MinMaxTput.Min,
s.MinMaxTput.Max,
+ s.AvgUtil, s.MinMaxUtil.Min,
s.MinMaxUtil.Max)
}
}
}
diff --git a/run.go b/run.go
index 788c541..2a93405 100644
--- a/run.go
+++ b/run.go
@@ -40,8 +40,10 @@ func Report(ws *WorkerState, r WorkerReport) {
mops := r.Mops - lr.Mops
tput := Throughput(lr.Now, lr.Mops, r.Now, r.Mops)
+
+ util := Utilization(lr.Now, lr.Cputime, r.Now, r.Cputime)
- fmt.Printf("%v Time: %2.3f Mops: %d Tput: %4.2f Cputime: %v\n",
r.Id, time, mops, tput, r.Cputime);
+ fmt.Printf("%v Time: %2.3f Mops: %d Tput: %4.2f Cputime: %v
Util: %4.2f\n", r.Id, time, mops, tput, r.Cputime, util);
}
ws.LastReport = r
--
2.7.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |