mirror of
https://github.com/jech/galene.git
synced 2024-11-09 18:25:58 +01:00
Add packetcache benchmarks.
This commit is contained in:
parent
4d2bd6e473
commit
d723d20ee6
1 changed files with 106 additions and 7 deletions
|
@ -3,6 +3,7 @@ package packetcache
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
|
@ -85,8 +86,8 @@ func TestCacheAlignment(t *testing.T) {
|
||||||
cache := New(16)
|
cache := New(16)
|
||||||
for i := range cache.entries {
|
for i := range cache.entries {
|
||||||
p := unsafe.Pointer(&cache.entries[i])
|
p := unsafe.Pointer(&cache.entries[i])
|
||||||
if uintptr(p) % 32 != 0 {
|
if uintptr(p)%32 != 0 {
|
||||||
t.Errorf("%v: alignment %v", i, uintptr(p) % 32)
|
t.Errorf("%v: alignment %v", i, uintptr(p)%32)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,7 +101,7 @@ func TestBitmap(t *testing.T) {
|
||||||
var first uint16
|
var first uint16
|
||||||
for i := 0; i < 64; i++ {
|
for i := 0; i < 64; i++ {
|
||||||
if (value & (1 << i)) != 0 {
|
if (value & (1 << i)) != 0 {
|
||||||
first, _ = cache.Store(uint16(42 + i), packet)
|
first, _ = cache.Store(uint16(42+i), packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,7 +123,7 @@ func TestBitmapWrap(t *testing.T) {
|
||||||
var first uint16
|
var first uint16
|
||||||
for i := 0; i < 64; i++ {
|
for i := 0; i < 64; i++ {
|
||||||
if (value & (1 << i)) != 0 {
|
if (value & (1 << i)) != 0 {
|
||||||
first, _ = cache.Store(uint16(42 + i), packet)
|
first, _ = cache.Store(uint16(42+i), packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +141,7 @@ func TestBitmapGet(t *testing.T) {
|
||||||
|
|
||||||
for i := 0; i < 64; i++ {
|
for i := 0; i < 64; i++ {
|
||||||
if (value & (1 << i)) != 0 {
|
if (value & (1 << i)) != 0 {
|
||||||
cache.Store(uint16(42 + i), packet)
|
cache.Store(uint16(42+i), packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,7 +162,7 @@ func TestBitmapGet(t *testing.T) {
|
||||||
value >>= 1
|
value >>= 1
|
||||||
pos += 1
|
pos += 1
|
||||||
for bitmap != 0 {
|
for bitmap != 0 {
|
||||||
if uint8(bitmap & 1) == uint8(value & 1) {
|
if uint8(bitmap&1) == uint8(value&1) {
|
||||||
t.Errorf("Bitmap mismatch")
|
t.Errorf("Bitmap mismatch")
|
||||||
}
|
}
|
||||||
bitmap >>= 1
|
bitmap >>= 1
|
||||||
|
@ -182,7 +183,7 @@ func TestBitmapPacket(t *testing.T) {
|
||||||
|
|
||||||
for i := 0; i < 64; i++ {
|
for i := 0; i < 64; i++ {
|
||||||
if (value & (1 << i)) != 0 {
|
if (value & (1 << i)) != 0 {
|
||||||
cache.Store(uint16(42 + i), packet)
|
cache.Store(uint16(42+i), packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,3 +204,101 @@ func TestBitmapPacket(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkCachePutGet(b *testing.B) {
|
||||||
|
n := 10
|
||||||
|
chans := make([]chan uint16, n)
|
||||||
|
for i := range chans {
|
||||||
|
chans[i] = make(chan uint16, 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
cache := New(96)
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(len(chans))
|
||||||
|
|
||||||
|
for i := range chans {
|
||||||
|
go func(ch <-chan uint16) {
|
||||||
|
defer wg.Done()
|
||||||
|
buf := make([]byte, BufSize)
|
||||||
|
for {
|
||||||
|
seqno, ok := <-ch
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
l := cache.Get(seqno, buf)
|
||||||
|
if l == 0 {
|
||||||
|
b.Errorf("Couldn't get %v", seqno)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}(chans[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := make([]byte, 1200)
|
||||||
|
|
||||||
|
b.SetBytes(1200)
|
||||||
|
b.ResetTimer()
|
||||||
|
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
seqno := uint16(i)
|
||||||
|
cache.Store(seqno, buf)
|
||||||
|
for _, ch := range chans {
|
||||||
|
ch <- seqno
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, ch := range chans {
|
||||||
|
close(ch)
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
|
type is struct {
|
||||||
|
index, seqno uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
func BenchmarkCachePutGetAt(b *testing.B) {
|
||||||
|
n := 10
|
||||||
|
chans := make([]chan is, n)
|
||||||
|
for i := range chans {
|
||||||
|
chans[i] = make(chan is, 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
cache := New(96)
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(len(chans))
|
||||||
|
|
||||||
|
for i := range chans {
|
||||||
|
go func(ch <-chan is) {
|
||||||
|
defer wg.Done()
|
||||||
|
buf := make([]byte, BufSize)
|
||||||
|
for {
|
||||||
|
is, ok := <-ch
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
l := cache.GetAt(is.seqno, is.index, buf)
|
||||||
|
if l == 0 {
|
||||||
|
b.Errorf("Couldn't get %v", is)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}(chans[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := make([]byte, 1200)
|
||||||
|
|
||||||
|
b.SetBytes(1200)
|
||||||
|
b.ResetTimer()
|
||||||
|
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
seqno := uint16(i)
|
||||||
|
_, index := cache.Store(seqno, buf)
|
||||||
|
for _, ch := range chans {
|
||||||
|
ch <- is{index, seqno}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, ch := range chans {
|
||||||
|
close(ch)
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue