1
Fork 0
mirror of https://github.com/jech/galene.git synced 2024-11-09 02:05:59 +01:00

Make packet cache cache-friendly.

This commit is contained in:
Juliusz Chroboczek 2020-05-20 19:36:33 +02:00
parent 464bad0781
commit a6ff98a313
2 changed files with 16 additions and 4 deletions

View file

@ -8,8 +8,9 @@ const BufSize = 1500
type entry struct {
seqno uint16
length int
length uint16
buf [BufSize]byte
pad [32 - (BufSize+4)%32]byte // avoid false sharing
}
type Cache struct {
@ -40,7 +41,7 @@ func seqnoInvalid(seqno, reference uint16) bool {
return false
}
if reference - seqno > 0x100 {
if reference-seqno > 0x100 {
return true
}
@ -99,7 +100,7 @@ func (cache *Cache) Store(seqno uint16, buf []byte) uint16 {
cache.entries[cache.tail].seqno = seqno
copy(cache.entries[cache.tail].buf[:], buf)
cache.entries[cache.tail].length = len(buf)
cache.entries[cache.tail].length = uint16(len(buf))
cache.tail = (cache.tail + 1) % len(cache.entries)
return cache.first
@ -146,7 +147,7 @@ func (cache *Cache) BitmapGet() (bool, uint16, uint16) {
return false, first, 0
}
for bitmap & 1 == 0 {
for bitmap&1 == 0 {
bitmap >>= 1
first++
}

View file

@ -4,6 +4,7 @@ import (
"bytes"
"math/rand"
"testing"
"unsafe"
"github.com/pion/rtcp"
)
@ -54,6 +55,16 @@ func TestCacheOverflow(t *testing.T) {
}
}
func TestCacheAlignment(t *testing.T) {
cache := New(16)
for i := range cache.entries {
p := unsafe.Pointer(&cache.entries[i])
if uintptr(p) % 32 != 0 {
t.Errorf("%v: alignment %v", i, uintptr(p) % 32)
}
}
}
func TestBitmap(t *testing.T) {
value := uint64(0xcdd58f1e035379c0)
packet := make([]byte, 1)