mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-26 15:21:37 +00:00
when dropping a queue, select one at random based on queue size in bytes
This commit is contained in:
parent
1a65c065d0
commit
e6a47f705d
@ -12,6 +12,7 @@ package yggdrasil
|
|||||||
// A little annoying to do with constant changes from backpressure
|
// A little annoying to do with constant changes from backpressure
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"math/rand"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
@ -624,7 +625,13 @@ func (b *switch_buffers) cleanup(t *switchTable) {
|
|||||||
const maxSize = 4 * 1048576 // Maximum 4 MB
|
const maxSize = 4 * 1048576 // Maximum 4 MB
|
||||||
for b.size > maxSize {
|
for b.size > maxSize {
|
||||||
// Drop a random queue
|
// 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)
|
remove(streamID)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user