DEV Community

Cover image for How to Unlock True 10Gbps Speeds on a Linux Dedicated Server 🚀
Nyra Amsi
Nyra Amsi

Posted on Originally published at servers99.com

How to Unlock True 10Gbps Speeds on a Linux Dedicated Server 🚀

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.

👉 Read the Full 10Gbps Optimization Guide on Servers99

Top comments (0)