Kernel settings
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864$ sysctl --systemLarger buffers matter for distant clients: a single TCP flow can carry at most its window divided by the round-trip time.
Network card
$ ethtool -g eno1 # ring buffer sizes
$ ethtool -G eno1 rx 4096 tx 4096
$ ethtool -k eno1 | grep -E 'segmentation|receive-offload'Keep offloads (TSO, GRO) enabled and let irqbalance spread interrupts across cores. The internet MTU is 1,500 bytes: jumbo frames only help on a private VLAN.
Application side
- nginx:
sendfile on; tcp_nopush on;and enoughworker_processesto use several cores. - Serve hot files from memory or NVMe; spinning disks cannot feed 10 Gbps on their own.
Testing
One connection rarely fills a 10 Gbps port over the internet. Test with parallel streams against a close, well-connected endpoint:
$ iperf3 -c <test-server> -P 8 -t 30