package torrent

type pendingRequests struct {
	m []int
}

func (p *pendingRequests) Dec(r RequestIndex) {
	prev := p.m[r]
	if prev <= 0 {
		panic(prev)
	}
	p.m[r]--
}

func (p *pendingRequests) Inc(r RequestIndex) {
	p.m[r]++
}

func (p *pendingRequests) Init(maxIndex RequestIndex) {
	p.m = make([]int, maxIndex)
}

func (p *pendingRequests) AssertEmpty() {
	for _, count := range p.m {
		if count != 0 {
			panic(count)
		}
	}
}

func (p *pendingRequests) Get(r RequestIndex) int {
	return p.m[r]
}

package torrent

import (
	rbm "github.com/RoaringBitmap/roaring"
	roaring "github.com/RoaringBitmap/roaring/BitSliceIndexing"
)

type pendingRequests struct {
	m *roaring.BSI
}

func (p *pendingRequests) Dec(r RequestIndex) {
	_r := uint64(r)
	prev, _ := p.m.GetValue(_r)
	if prev <= 0 {
		panic(prev)
	}
	p.m.SetValue(_r, prev-1)
}

func (p *pendingRequests) Inc(r RequestIndex) {
	_r := uint64(r)
	prev, _ := p.m.GetValue(_r)
	p.m.SetValue(_r, prev+1)
}

func (p *pendingRequests) Init(maxIndex RequestIndex) {
	p.m = roaring.NewDefaultBSI()
}

var allBits rbm.Bitmap

func init() {
	allBits.AddRange(0, rbm.MaxRange)
}

func (p *pendingRequests) AssertEmpty() {
	if p.m == nil {
		panic(p.m)
	}
	sum, _ := p.m.Sum(&allBits)
	if sum != 0 {
		panic(sum)
	}
}

func (p *pendingRequests) Get(r RequestIndex) int {
	count, _ := p.m.GetValue(uint64(r))
	return int(count)
}

--- 
+++ 
@@ -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]
 }
Use a flat slice for pending request counts

Under heavy load, seems to be 2-3x faster.
