From b2ef8bc1bf5e12426395edeefcc805ee042d0f51 Mon Sep 17 00:00:00 2001 From: Git Sagar Date: Sat, 6 Jun 2026 17:20:24 +0530 Subject: [PATCH] tunnel: reduce per-frame allocations in hot path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TAP→server: write buf[:n] directly instead of copy to new slice - Keepalive: reuse fixed buffer instead of allocating every 3s Co-Authored-By: Claude Opus 4.6 (1M context) --- pkg/client/tunnel.go | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/client/tunnel.go b/pkg/client/tunnel.go index 0a15832..b8db98e 100644 --- a/pkg/client/tunnel.go +++ b/pkg/client/tunnel.go @@ -142,9 +142,7 @@ func (t *Tunnel) Bridge(tapRead func(buf []byte) (int, error), tapWrite func(buf errCh <- fmt.Errorf("read from tap: %w", err) return } - frame := make([]byte, n) - copy(frame, buf[:n]) - if err := t.WriteFrames([][]byte{frame}); err != nil { + if err := t.WriteFrames([][]byte{buf[:n]}); err != nil { errCh <- fmt.Errorf("write to server: %w", err) return } @@ -162,6 +160,7 @@ func (t *Tunnel) StartKeepalive() { ticker := time.NewTicker(keepAliveInterval) defer ticker.Stop() rng := rand.New(rand.NewSource(time.Now().UnixNano())) + randBuf := make([]byte, maxKeepaliveSize) for { select { case <-t.stopCh: @@ -174,9 +173,8 @@ func (t *Tunnel) StartKeepalive() { if err := binary.Write(t.sess.Conn, binary.BigEndian, size); err != nil { return } - randData := make([]byte, size) - rng.Read(randData) - if _, err := t.sess.Conn.Write(randData); err != nil { + rng.Read(randBuf[:size]) + if _, err := t.sess.Conn.Write(randBuf[:size]); err != nil { return } }