Skip to content

Steam downloads severely limited on Linux unless slow CDN IPs are blackholed #13378

Description

@PacketAuditor

Your system information

  • Steam client version: 1782952760
  • Distribution: CachyOS
  • Kernel: 7.1.1-2-cachyos
  • CPU: Ryzen 7 9800X3D
  • GPU: RTX 5090
  • Storage: WD Black SN850X 2TB NVMe
  • Network: Intel X520 10GbE, driver ixgbe
  • Internet: AT&T 5Gb service
  • Router: UDM Pro SE

Problem

Steam downloads on Linux are much slower than expected. On my normal AT&T route, Steam usually downloads around 100 to 350 Mbps, despite having a 5Gb connection and a 10GbE NIC. The same system can do much faster speeds outside Steam, and the NIC is linked correctly at 10Gbps full duplex.

Steam is not CPU or disk bottlenecked. During downloads, pidstat did not show Steam maxing out the CPU, and the system is using a fast NVMe drive.

Network/NIC verification

Linux detects the active NIC correctly:

driver: ixgbe
version: 7.1.1-2-cachyos
Speed: 10000Mb/s
Duplex: Full
Link detected: yes

Things I tried that did not fix it

  • Changed Steam download regions
  • Cleared Steam download cache
  • Verified Steam bandwidth limit is disabled
  • Tried Steam Linux HTTP/2 workaround in steam_dev.cfg
  • Tried forcing more Steam download sources/connections
  • Tried disabling IPv6
  • Tried different DNS providers
  • Tried local dnsmasq caching
  • Tried disabling NIC offloads with ethtool
  • Tried BBR TCP congestion control
  • Tried native Steam / Steam runtime options
  • Restarted NetworkManager
  • Checked CPU usage during downloads with pidstat
  • Confirmed NIC is linked at 10Gbps full duplex
  • Confirmed MTR showed 0% loss to final Valve CDN destinations

Key finding

Using a VPN immediately raised Steam downloads to around 900 Mbps, which appears to be the VPN throughput limit.

The major difference was the number and selection of Steam CDN endpoints.

Without VPN, Steam heavily favored these two Valve CDN IPs:

205.196.6.165
162.254.194.27

Example without VPN:

8 205.196.6.165
8 162.254.194.27
1 23.12.3.102
1 199.232.215.82
1 162.254.194.57

With VPN, Steam opened many more CDN connections across more Valve cache nodes:

8 205.196.6.177
8 205.196.6.173
8 205.196.6.171
8 205.196.6.168
8 205.196.6.167
8 205.196.6.164
8 162.254.194.27
8 162.254.193.7
8 162.254.193.6
8 162.254.193.42
8 162.254.193.4
8 162.254.193.39
8 162.254.193.38
8 162.254.193.37
8 162.254.193.36
8 162.254.193.13
3 205.196.6.165

Workaround

I blackholed the two slow CDN IPs locally:

sudo ip route add blackhole 205.196.6.165
sudo ip route add blackhole 162.254.194.27

pkill -9 -f 'steam|steamwebhelper'
steam

After doing this, Steam selected different CDN endpoints:

8 34.104.36.43
8 23.215.11.61
8 23.215.11.34
8 199.232.215.82
8 199.232.211.82
2 23.12.3.102
2 23.10.165.29
1 23.12.12.110
1 199.232.211.52
1 13.35.226.166

Download speed improved to around 1.9 Gbps.

Command used to inspect Steam CDN IPs

ss -tnp | grep steam | grep ':443' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

MTR observations

Off VPN, MTR to the final Valve CDN destinations showed 0% loss. So this does not look like simple packet loss.

Example final destinations:

162-254-194-27.valve.net   0.0% loss, ~25 ms
205.196.6.165              0.0% loss, ~48 ms

Conclusion

This appears to be a Steam CDN selection/fanout issue or a route specific CDN assignment problem. On my normal AT&T route, Steam heavily favors a small number of slow Valve CDN IPs. When those IPs are blocked, or when I use a VPN, Steam selects a broader/faster set of CDN endpoints and download speed improves dramatically.

The workaround is not ideal because users should not need to manually blackhole CDN IPs. It would be helpful if Steam could detect poor CDN throughput and rotate away from underperforming cache nodes more aggressively.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions