If you have a 10Gbps network interface, you may find it is not performing quite as expected in all applications, and the issue is likely due to a few things.
1. Your own expectations, you cannot expect full 10Gbps between all servers all of the time, latency, number of hops, the speeds the equipment in between can handle traffic all play a factor, and the software you are using likely was not written with 10Gbps single-threaded download or uploads in mind.
2. You have not optimized your server to run on 10Gbps.
With Windows, you have very few options due to its closed nature so that this guide will be looking at Linux only.
Using your favourite editor, open /etc/sysctl.conf
Add the following lines to the bottom of the file (under everything else)
net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 net.ipv4.tcp_rmem = 4096 87380 134217728 net.ipv4.tcp_wmem = 4096 65536 134217728 net.core.netdev_max_backlog = 300000 net.ipv4.tcp_moderate_rcvbuf =1 net.ipv4.tcp_no_metrics_save = 1
Optional:
# The Hamilton TCP (HighSpeed-TCP) algorithm is a packet loss based congestion control and is more aggressive pushing up to max bandwidth (total BDP) and favors hosts with lower TTL / VARTTL. Only useful for some applications. net.ipv4.tcp_congestion_control=htcp # For jumbo frames, set this to avoid MTU issues, only useful for cross connected servers as the equipment in between may not support jumbo frames. net.ipv4.tcp_mtu_probing = 1
If you are running jumbo frames, then please set the MTU size to 9000 in your network config, e.g.:
MTU=9000
If you are running virtual servers using bridged interfaces, please also add the following lines:
net.bridge.bridge-nf-call-iptables=0 net.bridge.bridge-nf-call-arptables=0 net.bridge.bridge-nf-call-ip6tables=0
Now reboot your server. You should see some improvements straight away.