size arena to match batch size

This commit is contained in:
JackDoan
2026-05-13 15:07:21 -05:00
parent afcdf2163b
commit 3a329ec217
3 changed files with 8 additions and 4 deletions

View File

@@ -39,6 +39,7 @@ type InterfaceConfig struct {
DropLocalBroadcast bool DropLocalBroadcast bool
DropMulticast bool DropMulticast bool
routines int routines int
batchSize int
MessageMetrics *MessageMetrics MessageMetrics *MessageMetrics
version string version string
relayManager *relayManager relayManager *relayManager
@@ -71,6 +72,7 @@ type Interface struct {
dropLocalBroadcast bool dropLocalBroadcast bool
dropMulticast bool dropMulticast bool
routines int routines int
batchSize int
disconnectInvalid atomic.Bool disconnectInvalid atomic.Bool
closed atomic.Bool closed atomic.Bool
relayManager *relayManager relayManager *relayManager
@@ -191,6 +193,7 @@ func NewInterface(ctx context.Context, c *InterfaceConfig) (*Interface, error) {
dropLocalBroadcast: c.DropLocalBroadcast, dropLocalBroadcast: c.DropLocalBroadcast,
dropMulticast: c.DropMulticast, dropMulticast: c.DropMulticast,
routines: c.routines, routines: c.routines,
batchSize: c.batchSize,
version: c.version, version: c.version,
writers: make([]udp.Conn, c.routines), writers: make([]udp.Conn, c.routines),
readers: make([]tio.Queue, c.routines), readers: make([]tio.Queue, c.routines),
@@ -261,8 +264,8 @@ func (f *Interface) activate() error {
} }
f.readers = f.inside.Readers() f.readers = f.inside.Readers()
for i := range f.readers { for i := range f.readers {
arena := batch.NewArena(batch.DefaultPassthroughArenaCap) arena := batch.NewArena(max(f.batchSize, 1) * udp.MTU)
f.batchers[i] = batch.NewPassthrough(f.readers[i], arena) f.batchers[i] = batch.NewPassthrough(f.readers[i], f.batchSize, arena)
} }
f.wg.Add(1) // for us to wait on Close() to return f.wg.Add(1) // for us to wait on Close() to return

View File

@@ -215,6 +215,7 @@ func Main(c *config.C, configTest bool, buildVersion string, l *slog.Logger, dev
DropLocalBroadcast: c.GetBool("tun.drop_local_broadcast", false), DropLocalBroadcast: c.GetBool("tun.drop_local_broadcast", false),
DropMulticast: c.GetBool("tun.drop_multicast", false), DropMulticast: c.GetBool("tun.drop_multicast", false),
routines: routines, routines: routines,
batchSize: c.GetInt("listen.batch", 64),
MessageMetrics: messageMetrics, MessageMetrics: messageMetrics,
version: buildVersion, version: buildVersion,
relayManager: NewRelayManager(ctx, l, hostMap, c), relayManager: NewRelayManager(ctx, l, hostMap, c),

View File

@@ -20,10 +20,10 @@ const passthroughBaseNumSlots = 128
// standalone Passthrough batcher: 128 slots × udp.MTU ≈ 1.1 MiB. // standalone Passthrough batcher: 128 slots × udp.MTU ≈ 1.1 MiB.
const DefaultPassthroughArenaCap = passthroughBaseNumSlots * udp.MTU const DefaultPassthroughArenaCap = passthroughBaseNumSlots * udp.MTU
func NewPassthrough(w io.Writer, arena *Arena) *Passthrough { func NewPassthrough(w io.Writer, slots int, arena *Arena) *Passthrough {
return &Passthrough{ return &Passthrough{
out: w, out: w,
slots: make([][]byte, 0, passthroughBaseNumSlots), slots: make([][]byte, 0, slots),
arena: arena, arena: arena,
} }
} }