All systems operational

Pay with Bitcoin, Monero, USDT & 11 more · email-only sign-up

Networking

Tuning Linux for 10 Gbps

BBR, socket buffers, NIC queues and a realistic way to test a 10 Gbps port.

6 min readReviewed 25 September 2026

About this guideGuide

Category
Networking
Reading time
6 minutes
Written for
Debian 12 and 13, Ubuntu 24.04 and 26.04RHEL-family differences flagged in the text
Last reviewed
25 September 2026

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 --system

Larger 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 enough worker_processes to 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