From dfc421824ce6c146ff9d9062ad25748c0f8c9990 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Sun, 10 Oct 2021 11:54:19 +1100 Subject: [PATCH] Use a flat slice for pending request counts Under heavy load, seems to be 2-3x faster. --- pending-requests.go | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/pending-requests.go b/pending-requests.go index dcb1faf1..3d0e4ca6 100644 --- a/pending-requests.go +++ b/pending-requests.go @@ -1,50 +1,33 @@ package torrent -import ( - rbm "github.com/RoaringBitmap/roaring" - roaring "github.com/RoaringBitmap/roaring/BitSliceIndexing" -) - type pendingRequests struct { - m *roaring.BSI + m []int } func (p *pendingRequests) Dec(r RequestIndex) { - _r := uint64(r) - prev, _ := p.m.GetValue(_r) + prev := p.m[r] if prev <= 0 { panic(prev) } - p.m.SetValue(_r, prev-1) + p.m[r]-- } func (p *pendingRequests) Inc(r RequestIndex) { - _r := uint64(r) - prev, _ := p.m.GetValue(_r) - p.m.SetValue(_r, prev+1) + p.m[r]++ } func (p *pendingRequests) Init(maxIndex RequestIndex) { - p.m = roaring.NewDefaultBSI() -} - -var allBits rbm.Bitmap - -func init() { - allBits.AddRange(0, rbm.MaxRange) + p.m = make([]int, maxIndex) } func (p *pendingRequests) AssertEmpty() { - if p.m == nil { - panic(p.m) - } - sum, _ := p.m.Sum(&allBits) - if sum != 0 { - panic(sum) + for _, count := range p.m { + if count != 0 { + panic(count) + } } } func (p *pendingRequests) Get(r RequestIndex) int { - count, _ := p.m.GetValue(uint64(r)) - return int(count) + return p.m[r] } -- 2.44.0