mirror of
https://github.com/slackhq/nebula.git
synced 2026-11-15 10:46:52 +01:00
tun: Size staged slots from the workers and listen.batch
The TX and RX slot counts were fixed at eight and six. TX now uses one slot per worker plus the one being read and the one being sent, at least eight. RX keeps up to 384 recvmmsg entries in flight in four to six slots, so a larger listen.batch takes fewer slots and RX memory never exceeds today's. tun.staged.tx_slots and rx_slots override either, down to two. The defaults at listen.batch 64 with up to six workers are unchanged: eight TX slots of about 1.1 MiB and six RX slots of 4 MiB with GRO.
This commit is contained in:
1 parent
ffb2835f70
commit
130ef730b4
6 files changed
+76
-17
No files matched your search
+4
-5
@@ -16,7 +16,6 @@ type handoffConn interface {
|
||||
ListenOutHandoff(udp.EncReader, func([][]byte) [][]byte) error
|
||||
}
|
||||
|
||||
const stagedRxSlots = 6
|
||||
const rxChunkMin = 16
|
||||
|
||||
// rxItem is one received packet. A data packet for an established tunnel has ci set; out and err are written by
|
||||
@@ -108,8 +107,8 @@ func newStagedRx(f *Interface, q int, wrxc *rxContext) *stagedRx {
|
||||
h: &header.H{},
|
||||
hostmapCache: map[uint32]*HostInfo{},
|
||||
wrxc: wrxc,
|
||||
ordered: make(chan *rxBatch, stagedRxSlots),
|
||||
returned: make(chan *rxBatch, stagedRxSlots),
|
||||
ordered: make(chan *rxBatch, f.staged.rxSlots),
|
||||
returned: make(chan *rxBatch, f.staged.rxSlots),
|
||||
writerDone: make(chan struct{}),
|
||||
readBusy: stageBusy("rx_read", q),
|
||||
decryptBusy: stageBusy("rx_decrypt", q),
|
||||
@@ -118,8 +117,8 @@ func newStagedRx(f *Interface, q int, wrxc *rxContext) *stagedRx {
|
||||
metricInline: metrics.GetOrRegisterCounter("flow.rx.inline", nil),
|
||||
}
|
||||
workers := f.staged.workers
|
||||
p.pool = newFlowPool(workers, stagedRxSlots*2*workers, p.decryptBusy)
|
||||
for range stagedRxSlots {
|
||||
p.pool = newFlowPool(workers, f.staged.rxSlots*2*workers, p.decryptBusy)
|
||||
for range f.staged.rxSlots {
|
||||
// Two chunks per worker, so the writer can start committing while the workers are still on the rest
|
||||
b := &rxBatch{items: make([]rxItem, 0, 256), chunks: make([]rxChunk, 2*workers)}
|
||||
for i := range b.chunks {
|
||||
|
||||
Reference in new issue
Block a user