From db051fb013f4117228febc185f5b131caa70ced9 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Wed, 20 May 2020 10:43:43 -0400 Subject: [PATCH] ipnserver and logpolicy: configure zstd with low-memory settings. The compressed blobs we send back and forth are small and infrequent, which doesn't justify the 8MB * GOMAXPROCS memory that was being allocated. This was the overwhelming majority of memory use in tailscaled. On my system it goes from ~100M RSS to ~15M RSS (which is still suspiciously high, but we can worry about that more later). Signed-off-by: Avery Pennarun --- ipn/ipnserver/server.go | 6 +++++- logpolicy/logpolicy.go | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ipn/ipnserver/server.go b/ipn/ipnserver/server.go index e184d4f50..d3a6c7d78 100644 --- a/ipn/ipnserver/server.go +++ b/ipn/ipnserver/server.go @@ -113,7 +113,11 @@ func Run(rctx context.Context, logf logger.Logf, logid string, opts Options, e w return fmt.Errorf("NewLocalBackend: %v", err) } b.SetDecompressor(func() (controlclient.Decompressor, error) { - return zstd.NewReader(nil) + return zstd.NewReader(nil, + zstd.WithDecoderLowmem(true), + zstd.WithDecoderConcurrency(1), + zstd.WithDecoderMaxMemory(65536), + ) }) if opts.DebugMux != nil { diff --git a/logpolicy/logpolicy.go b/logpolicy/logpolicy.go index 2a69325eb..eeccf1494 100644 --- a/logpolicy/logpolicy.go +++ b/logpolicy/logpolicy.go @@ -183,7 +183,11 @@ func New(collection string) *Policy { PrivateID: newc.PrivateID, Stderr: logWriter{console}, NewZstdEncoder: func() logtail.Encoder { - w, err := zstd.NewWriter(nil) + w, err := zstd.NewWriter(nil, + zstd.WithEncoderLevel(zstd.SpeedFastest), + zstd.WithEncoderConcurrency(1), + zstd.WithWindowSize(8192), + ) if err != nil { panic(err) }