mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Bump SO_SNDBUF for fdbased endpoint used by runsc.
Updates #231 PiperOrigin-RevId: 289897881
This commit is contained in:
committed by
gVisor bot
parent
ff78a72170
commit
f874723e64
@@ -84,8 +84,8 @@ func (netImpl) printStats() {
|
||||
}
|
||||
|
||||
const (
|
||||
nicID = 1 // Fixed.
|
||||
rcvBufSize = 4 << 20 // 1MB.
|
||||
nicID = 1 // Fixed.
|
||||
bufSize = 4 << 20 // 4MB.
|
||||
)
|
||||
|
||||
type netstackImpl struct {
|
||||
@@ -125,13 +125,13 @@ func setupNetwork(ifaceName string, numChannels int) (fds []int, err error) {
|
||||
}
|
||||
|
||||
// RAW Sockets by default have a very small SO_RCVBUF of 256KB,
|
||||
// up it to at least 1MB to reduce packet drops.
|
||||
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_RCVBUF, rcvBufSize); err != nil {
|
||||
return nil, fmt.Errorf("setsockopt(..., SO_RCVBUF, %v,..) = %v", rcvBufSize, err)
|
||||
// up it to at least 4MB to reduce packet drops.
|
||||
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_RCVBUF, bufSize); err != nil {
|
||||
return nil, fmt.Errorf("setsockopt(..., SO_RCVBUF, %v,..) = %v", bufSize, err)
|
||||
}
|
||||
|
||||
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_SNDBUF, rcvBufSize); err != nil {
|
||||
return nil, fmt.Errorf("setsockopt(..., SO_RCVBUF, %v,..) = %v", rcvBufSize, err)
|
||||
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_SNDBUF, bufSize); err != nil {
|
||||
return nil, fmt.Errorf("setsockopt(..., SO_SNDBUF, %v,..) = %v", bufSize, err)
|
||||
}
|
||||
|
||||
if !*swgso && *gso != 0 {
|
||||
|
||||
@@ -321,16 +321,21 @@ func createSocket(iface net.Interface, ifaceLink netlink.Link, enableGSO bool) (
|
||||
}
|
||||
}
|
||||
|
||||
// Use SO_RCVBUFFORCE because on linux the receive buffer for an
|
||||
// AF_PACKET socket is capped by "net.core.rmem_max". rmem_max
|
||||
// defaults to a unusually low value of 208KB. This is too low
|
||||
// for gVisor to be able to receive packets at high throughputs
|
||||
// without incurring packet drops.
|
||||
const rcvBufSize = 4 << 20 // 4MB.
|
||||
// Use SO_RCVBUFFORCE/SO_SNDBUFFORCE because on linux the receive/send buffer
|
||||
// for an AF_PACKET socket is capped by "net.core.rmem_max/wmem_max".
|
||||
// wmem_max/rmem_max default to a unusually low value of 208KB. This is too low
|
||||
// for gVisor to be able to receive packets at high throughputs without
|
||||
// incurring packet drops.
|
||||
const bufSize = 4 << 20 // 4MB.
|
||||
|
||||
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_RCVBUFFORCE, rcvBufSize); err != nil {
|
||||
return nil, fmt.Errorf("failed to increase socket rcv buffer to %d: %v", rcvBufSize, err)
|
||||
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_RCVBUFFORCE, bufSize); err != nil {
|
||||
return nil, fmt.Errorf("failed to increase socket rcv buffer to %d: %v", bufSize, err)
|
||||
}
|
||||
|
||||
if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_SNDBUFFORCE, bufSize); err != nil {
|
||||
return nil, fmt.Errorf("failed to increase socket snd buffer to %d: %v", bufSize, err)
|
||||
}
|
||||
|
||||
return &socketEntry{deviceFile, gsoMaxSize}, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user