@@ -16,6 +16,7 @@ import (
1616
1717 "github.com/shirou/gopsutil/v3/cpu"
1818 "github.com/shirou/gopsutil/v3/disk"
19+ "github.com/shirou/gopsutil/v3/mem"
1920 "github.com/sirupsen/logrus"
2021)
2122
@@ -31,6 +32,8 @@ type Metrics struct {
3132 PeakCPUUsage float64
3233 AverageCPUUsage float64
3334 TotalCPUTime time.Duration
35+ PeakMemUsage float64
36+ AverageMemUsage float64
3437 DiskUsageDelta int64
3538}
3639
@@ -41,6 +44,8 @@ func (m *Metrics) Add(other Metrics) {
4144 m .PeakCPUUsage += other .PeakCPUUsage
4245 m .AverageCPUUsage += other .AverageCPUUsage
4346 m .TotalCPUTime += other .TotalCPUTime
47+ m .PeakMemUsage += other .PeakMemUsage
48+ m .AverageMemUsage += other .AverageMemUsage
4449 m .DiskUsageDelta += other .DiskUsageDelta
4550}
4651
@@ -76,12 +81,15 @@ func Wrapper(b *testing.B, targetFunc func(), cleanupFunc func()) {
7681 b .ReportMetric (metricsSum .PeakCPUUsage / float64 (b .N ), "%cpu_peak/op" )
7782 b .ReportMetric (metricsSum .AverageCPUUsage / float64 (b .N ), "%cpu_avg/op" )
7883 b .ReportMetric (metricsSum .TotalCPUTime .Seconds ()/ float64 (b .N ), "cpu_seconds/op" )
84+ b .ReportMetric (metricsSum .PeakMemUsage / float64 (b .N ), "%mem_peak/op" )
85+ b .ReportMetric (metricsSum .AverageMemUsage / float64 (b .N ), "%mem_avg/op" )
7986 b .ReportMetric (float64 (metricsSum .DiskUsageDelta / int64 (b .N )), "disk_bytes/op" )
8087}
8188
8289func measureMetrics (targetFunc func ()) (Metrics , error ) { //nolint:unparam // make it extensible for future error handling
8390 done := make (chan struct {})
8491 var cpuUsage []float64
92+ var memUsage []float64
8593 var startTime time.Time
8694 var diskUsageBefore , diskUsageAfter uint64
8795
@@ -119,6 +127,14 @@ func measureMetrics(targetFunc func()) (Metrics, error) { //nolint:unparam // ma
119127 return
120128 }
121129 cpuUsage = append (cpuUsage , percent [0 ])
130+
131+ memStat , err := mem .VirtualMemory ()
132+ if err != nil {
133+ ticker .Stop ()
134+ wg .Done ()
135+ return
136+ }
137+ memUsage = append (memUsage , memStat .UsedPercent )
122138 case <- done :
123139
124140 after , err := disk .Usage ("/" )
@@ -150,12 +166,24 @@ func measureMetrics(targetFunc func()) (Metrics, error) { //nolint:unparam // ma
150166 avgCPU := sumCPU / float64 (len (cpuUsage ))
151167 totalCPUTime := time .Since (startTime )
152168
169+ peakMem := 0.0
170+ sumMem := 0.0
171+ for _ , usage := range memUsage {
172+ if usage > peakMem {
173+ peakMem = usage
174+ }
175+ sumMem += usage
176+ }
177+ avgMem := sumMem / float64 (len (memUsage ))
178+
153179 diskUsageDelta := new (big.Int ).SetUint64 (diskUsageBefore - diskUsageAfter )
154180
155181 return Metrics {
156182 PeakCPUUsage : peakCPU ,
157183 AverageCPUUsage : avgCPU ,
158184 TotalCPUTime : totalCPUTime ,
185+ PeakMemUsage : peakMem ,
186+ AverageMemUsage : avgMem ,
159187 DiskUsageDelta : diskUsageDelta .Int64 (),
160188 }, nil
161189}
0 commit comments