mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Enable TCP Receive buffer moderation in gonet and benchmark.
Fixes #1666 PiperOrigin-RevId: 314148384
This commit is contained in:
committed by
gVisor bot
parent
a9b47390c8
commit
839208f118
@@ -94,6 +94,9 @@ while [ $# -gt 0 ]; do
|
||||
--cubic)
|
||||
netstack_opts="${netstack_opts} -cubic"
|
||||
;;
|
||||
--moderate-recv-buf)
|
||||
netstack_opts="${netstack_opts} -moderate_recv_buf"
|
||||
;;
|
||||
--duration)
|
||||
shift
|
||||
[ "$#" -le 0 ] && echo "no duration provided" && exit 1
|
||||
@@ -147,8 +150,9 @@ while [ $# -gt 0 ]; do
|
||||
echo " --client use netstack as the client"
|
||||
echo " --ideal reset all network emulation"
|
||||
echo " --server use netstack as the server"
|
||||
echo " --mtu set the mtu (bytes)"
|
||||
echo " --mtu set the mtu (bytes)"
|
||||
echo " --sack enable SACK support"
|
||||
echo " --moderate-recv-buf enable TCP receive buffer auto-tuning"
|
||||
echo " --cubic enable CUBIC congestion control for Netstack"
|
||||
echo " --duration set the test duration (s)"
|
||||
echo " --latency set the latency (ms)"
|
||||
|
||||
@@ -56,6 +56,7 @@ var (
|
||||
mask = flag.Int("mask", 8, "mask size for address")
|
||||
iface = flag.String("iface", "", "network interface name to bind for netstack")
|
||||
sack = flag.Bool("sack", false, "enable SACK support for netstack")
|
||||
moderateRecvBuf = flag.Bool("moderate_recv_buf", false, "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, "software-level GSO")
|
||||
@@ -231,6 +232,11 @@ func newNetstackImpl(mode string) (impl, error) {
|
||||
return nil, fmt.Errorf("SetTransportProtocolOption for SACKEnabled failed: %v", err)
|
||||
}
|
||||
|
||||
// Enable Receive Buffer Auto-Tuning.
|
||||
if err := s.SetTransportProtocolOption(tcp.ProtocolNumber, tcpip.ModerateReceiveBufferOption(*moderateRecvBuf)); err != nil {
|
||||
return nil, fmt.Errorf("SetTransportProtocolOption failed: %v", err)
|
||||
}
|
||||
|
||||
// Set Congestion Control to cubic if requested.
|
||||
if *cubic {
|
||||
if err := s.SetTransportProtocolOption(tcp.ProtocolNumber, tcpip.CongestionControlOption("cubic")); err != nil {
|
||||
|
||||
@@ -335,6 +335,11 @@ func (c *TCPConn) Read(b []byte) (int, error) {
|
||||
deadline := c.readCancel()
|
||||
|
||||
numRead := 0
|
||||
defer func() {
|
||||
if numRead != 0 {
|
||||
c.ep.ModerateRecvBuf(numRead)
|
||||
}
|
||||
}()
|
||||
for numRead != len(b) {
|
||||
if len(c.read) == 0 {
|
||||
var err error
|
||||
|
||||
Reference in New Issue
Block a user