I have slower than expected download speed from a server (Debian sever->Windows PC, if that matters). Iperf3 shows no retries but confirms the slow bitrate.
Iperf3 output (iperf3 -s
on windows PC, then iperf3 -c <windows-pc-ip>
from the problematic server). This yields the below:
# iperf3 -c <windows-pc-ip>
Connecting to host <windows-pc-ip>, port 5201
[ 5] local <server-ip> port 55742 connected to <windows-pc-ip> port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 5.46 MBytes 45.8 Mbits/sec 0 419 KBytes
[ 5] 1.00-2.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 2.00-3.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 3.00-4.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 4.00-5.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 5.00-6.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 6.00-7.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 7.00-8.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 8.00-9.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
[ 5] 9.00-10.00 sec 4.29 MBytes 36.0 Mbits/sec 0 419 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 44.1 MBytes 37.0 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 42.4 MBytes 35.6 Mbits/sec receiver
If I check the congestion control algorithm, it appears to be cubic
# sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = cubic
AFAIK, that means that only the package loss matters for scaling, not latency. But retries are 0, so no package loss? (Am I wrong about this?)
RTT between the PC and the server is ~50ms
Some relevant values that I have set by default (Debian 11):
net.core.wmem_max = 212992
net.ipv4.tcp_wmem = 4096 16384 4194304
But I don't recognize my Cwnd value here. I tried playing around with tuning those (and few other parameters) but observed no difference.
So, basically my question is - what makes the OS stop scaling Cwnd? Can I tune some parameter to make it go further?