Skip to content

Commit 50b9021

Browse files
ci: add virtual mem usage to benchmarker (runfinch#1628)
* benchmark: add virtual mem usage Signed-off-by: Swapnanil-Gupta <swpnlg@amazon.com> * add alert when threshold is crossed Signed-off-by: Swapnanil-Gupta <swpnlg@amazon.com> --------- Signed-off-by: Swapnanil-Gupta <swpnlg@amazon.com>
1 parent 0fb53f6 commit 50b9021

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

.github/workflows/benchmark.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,9 @@ jobs:
6969
tool: 'go'
7070
benchmark-data-dir-path: "dev/bench/macOS/${{ env.OS_VERSION }}/${{ env.ARCH }}"
7171
output-file-path: benchmark.txt
72+
alert-threshold: "200%"
73+
fail-on-alert: true
74+
comment-on-alert: true
75+
alert-comment-cc-users: '@runfinch/maintainers'
7276
- name: Push benchmark result
7377
run: git push 'https://github.com/runfinch/finch.git' gh-pages:gh-pages

benchmark/benchmark.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

8289
func 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

Comments
 (0)