You just provisioned a shiny 10Gbps bare-metal dedicated server. You boot it up, run a test, and hit a wall at 2.5 Gbps.
Having a 10GbE network port does not automatically guarantee 10Gbps of real-world application throughput. Out of the box, Linux kernel defaults and improper hardware configurations will severely throttle your network performance.
Here is how we at Servers99 identify and fix the most common 10Gbps network bottlenecks.
1. Verify the Physical Link
Before tweaking Linux networking configurations, confirm your hardware is actually negotiating at 10Gbps. A faulty SFP+ module or switch misconfiguration can force a 1Gbps link.
Run ethtool to check your negotiated speed:
Bash
sudo ethtool eth0
Note: Replace eth0 with your actual interface (e.g., eno1, ens18).>
If the output says Speed: 1000Mb/s, you have a physical layer issue. Stop software tuning and check your cables!
2. Stop Choking a Single CPU Core
At 10Gbps, your server processes millions of packets per second. If all hardware interrupts (IRQs) hit a single CPU core (usually CPU0), that core will hit 100% utilization and bottleneck your entire network stack.
Receive-Side Scaling (RSS): Ensure your multi-queue NIC is distributing traffic across multiple queues.
IRQ Balance: Check if interrupts are distributed properly:
Bash
# Check CPU interrupt distribution
grep -i eth0 /proc/interrupts
# Ensure irqbalance is running
systemctl status irqbalance
3. Tune TCP Buffers Safely
High-bandwidth connections, especially over geographic distances, require larger TCP socket buffers than standard local networks. Instead of blindly pasting massive buffer sizes, start with a controlled baseline in /etc/sysctl.d/99-10gbps.conf:
Plaintext
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
Apply with sudo sysctl --system.
4. Benchmark with Multi-Stream iperf3
Never use browser-based speed tests for a 10Gbps server. The browser overhead will skew your results. Test raw TCP throughput using iperf3 with parallel streams (-P 8):
Bash
iperf3 -c <REMOTE_SERVER_IP> -P 8 -t 30
If 8 streams hit 9.5Gbps, but a single stream tops out at 2.5Gbps, your network hardware is fine, and your per-flow TCP window needs further tuning.
📖 Read the Full 17-Step Optimization Guide
Optimizing a high-capacity server is about making one controlled change at a time. We’ve published a complete, 17-step command-line guide covering MTU 9000 (Jumbo Frames), NIC offloading, and packet drop troubleshooting.
Top comments (0)