From 5102b5340c8a79b9fae08b24123d21fc8624a0b0 Mon Sep 17 00:00:00 2001 From: Kevin Krakauer Date: Tue, 16 May 2023 12:04:16 -0700 Subject: [PATCH] netstack: default recv buf auto tuning to on This has been enabled most everywhere for a long time -- leaving it off artificially deflates gVisor performance for users that don't know to set the option. Also enable it by default in tcp_benchmark. PiperOrigin-RevId: 532532579 --- pkg/tcpip/transport/tcp/protocol.go | 1 + pkg/tcpip/transport/tcp/testing/context/context.go | 7 +++++++ test/benchmarks/tcp/tcp_proxy.go | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/tcpip/transport/tcp/protocol.go b/pkg/tcpip/transport/tcp/protocol.go index 574f288f2..81059d6a3 100644 --- a/pkg/tcpip/transport/tcp/protocol.go +++ b/pkg/tcpip/transport/tcp/protocol.go @@ -521,6 +521,7 @@ func NewProtocol(s *stack.Stack) stack.TransportProtocol { }, congestionControl: ccReno, availableCongestionControl: []string{ccReno, ccCubic}, + moderateReceiveBuffer: true, lingerTimeout: DefaultTCPLingerTimeout, timeWaitTimeout: DefaultTCPTimeWaitTimeout, timeWaitReuse: tcpip.TCPTimeWaitReuseLoopbackOnly, diff --git a/pkg/tcpip/transport/tcp/testing/context/context.go b/pkg/tcpip/transport/tcp/testing/context/context.go index 3d16adb07..868c7b2cf 100644 --- a/pkg/tcpip/transport/tcp/testing/context/context.go +++ b/pkg/tcpip/transport/tcp/testing/context/context.go @@ -220,6 +220,13 @@ func NewWithOpts(t *testing.T, opts Options) *Context { t.Fatalf("s.SetTransportProtocolOption(%d, &%T(%d)): %s", tcp.ProtocolNumber, minRTOOpt, minRTOOpt, err) } + // Many tests verify the window size. Autotuning can change that value, + // so we turn it off. + autoTuneOpt := tcpip.TCPModerateReceiveBufferOption(false) + if err := s.SetTransportProtocolOption(tcp.ProtocolNumber, &autoTuneOpt); err != nil { + t.Fatalf("SetTransportProtocolOption(%d, &%T(%t)): %s", tcp.ProtocolNumber, autoTuneOpt, autoTuneOpt, err) + } + // Some of the congestion control tests send up to 640 packets, we so // set the channel size to 1000. ep := channel.New(1000, opts.MTU, "") diff --git a/test/benchmarks/tcp/tcp_proxy.go b/test/benchmarks/tcp/tcp_proxy.go index 89658f6d4..d184aec7b 100644 --- a/test/benchmarks/tcp/tcp_proxy.go +++ b/test/benchmarks/tcp/tcp_proxy.go @@ -59,7 +59,7 @@ var ( iface = flag.String("iface", "", "network interface name to bind for netstack") sack = flag.Bool("sack", false, "enable SACK support for netstack") rack = flag.Bool("rack", false, "enable RACK in TCP") - moderateRecvBuf = flag.Bool("moderate_recv_buf", false, "enable TCP Receive Buffer Auto-tuning") + moderateRecvBuf = flag.Bool("moderate_recv_buf", true, "enable TCP Receive Buffer Auto-tuning") cubic = flag.Bool("cubic", false, "enable use of CUBIC congestion control for netstack") gso = flag.Int("gso", 0, "GSO maximum size") swgso = flag.Bool("swgso", false, "gVisor-level GSO")