5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-22 15:20:30 +00:00

when dropping a queue, select one at random based on queue size in bytes

This commit is contained in:
Arceliar 2018-07-06 00:11:36 -05:00
parent 1a65c065d0
commit e6a47f705d

View File

@ -12,6 +12,7 @@ package yggdrasil
// A little annoying to do with constant changes from backpressure
import (
"math/rand"
"sync"
"sync/atomic"
"time"
@ -624,7 +625,13 @@ func (b *switch_buffers) cleanup(t *switchTable) {
const maxSize = 4 * 1048576 // Maximum 4 MB
for b.size > maxSize {
// Drop a random queue
for streamID := range b.bufs {
target := rand.Uint64() % b.size
var size uint64 // running total
for streamID, buf := range b.bufs {
size += buf.size
if size < target {
continue
}
remove(streamID)
break
}