minio/internal/ringbuffer/ring_buffer_benchmark_test.go

112 lines
1.7 KiB
Go

package ringbuffer
import (
"io"
"strings"
"testing"
)
func BenchmarkRingBuffer_Sync(b *testing.B) {
rb := New(1024)
data := []byte(strings.Repeat("a", 512))
buf := make([]byte, 512)
b.ResetTimer()
for i := 0; i < b.N; i++ {
rb.Write(data)
rb.Read(buf)
}
}
func BenchmarkRingBuffer_AsyncRead(b *testing.B) {
// Pretty useless benchmark, but it's here for completeness.
rb := New(1024)
data := []byte(strings.Repeat("a", 512))
buf := make([]byte, 512)
go func() {
for {
rb.Read(buf)
}
}()
b.ResetTimer()
for i := 0; i < b.N; i++ {
rb.Write(data)
}
}
func BenchmarkRingBuffer_AsyncReadBlocking(b *testing.B) {
const sz = 512
const buffers = 10
rb := New(sz * buffers)
rb.SetBlocking(true)
data := []byte(strings.Repeat("a", sz))
buf := make([]byte, sz)
go func() {
for {
rb.Read(buf)
}
}()
b.ResetTimer()
for i := 0; i < b.N; i++ {
rb.Write(data)
}
}
func BenchmarkRingBuffer_AsyncWrite(b *testing.B) {
rb := New(1024)
data := []byte(strings.Repeat("a", 512))
buf := make([]byte, 512)
go func() {
for {
rb.Write(data)
}
}()
b.ResetTimer()
for i := 0; i < b.N; i++ {
rb.Read(buf)
}
}
func BenchmarkRingBuffer_AsyncWriteBlocking(b *testing.B) {
const sz = 512
const buffers = 10
rb := New(sz * buffers)
rb.SetBlocking(true)
data := []byte(strings.Repeat("a", sz))
buf := make([]byte, sz)
go func() {
for {
rb.Write(data)
}
}()
b.ResetTimer()
for i := 0; i < b.N; i++ {
rb.Read(buf)
}
}
func BenchmarkIoPipeReader(b *testing.B) {
pr, pw := io.Pipe()
data := []byte(strings.Repeat("a", 512))
buf := make([]byte, 512)
go func() {
for {
pw.Write(data)
}
}()
b.ResetTimer()
for i := 0; i < b.N; i++ {
pr.Read(buf)
}
}