Add a benchmark for growing and shrinking.
This should better stress memclr.geesefs-0-30-9
parent
b87ffb528b
commit
72fc9c96ca
|
@ -85,3 +85,34 @@ func BenchmarkOutMessageReset(b *testing.B) {
|
|||
b.SetBytes(int64(oms[0].offset))
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkOutMessageGrowShrink(b *testing.B) {
|
||||
// A single buffer, which should fit in some level of CPU cache.
|
||||
b.Run("Single buffer", func(b *testing.B) {
|
||||
var om OutMessage
|
||||
for i := 0; i < b.N; i++ {
|
||||
om.Grow(MaxReadSize)
|
||||
om.ShrinkTo(OutMessageInitialSize)
|
||||
}
|
||||
|
||||
b.SetBytes(int64(MaxReadSize))
|
||||
})
|
||||
|
||||
// Many megabytes worth of buffers, which should defeat the CPU cache.
|
||||
b.Run("Many buffers", func(b *testing.B) {
|
||||
// The number of messages; intentionally a power of two.
|
||||
const numMessages = 128
|
||||
|
||||
var oms [numMessages]OutMessage
|
||||
if s := unsafe.Sizeof(oms); s < 128<<20 {
|
||||
panic(fmt.Sprintf("Array is too small; total size: %d", s))
|
||||
}
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
oms[i%numMessages].Grow(MaxReadSize)
|
||||
oms[i%numMessages].ShrinkTo(OutMessageInitialSize)
|
||||
}
|
||||
|
||||
b.SetBytes(int64(MaxReadSize))
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue