From 92e340701434b7d63e32f081b69f139237caa10e Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Mon, 19 Dec 2016 09:46:08 +1100 Subject: [PATCH] Add benchmarks for OutMessage.Reset. --- internal/buffer/out_message_test.go | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 internal/buffer/out_message_test.go diff --git a/internal/buffer/out_message_test.go b/internal/buffer/out_message_test.go new file mode 100644 index 0000000..bf08110 --- /dev/null +++ b/internal/buffer/out_message_test.go @@ -0,0 +1,36 @@ +package buffer + +import ( + "fmt" + "testing" + "unsafe" +) + +func BenchmarkOutMessageReset(b *testing.B) { + // A single buffer, which should fit in some level of CPU cache. + b.Run("Single buffer", func(b *testing.B) { + b.SetBytes(int64(unsafe.Sizeof(OutMessage{}))) + + var om OutMessage + for i := 0; i < b.N; i++ { + om.Reset() + } + }) + + // Many megabytes worth of buffers, which should defeat the CPU cache. + b.Run("Many buffers", func(b *testing.B) { + b.SetBytes(int64(unsafe.Sizeof(OutMessage{}))) + + // 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].Reset() + } + }) +}