Blizzard uses BitTorrent for distribution of their game clients and patches. Great idea, but their BitTorrent client lacks any user controlled bandwidth settings so it totally saturates your home network. And thanks to the combination of bufferbloat and 100+ active streams, TCP congestion control doesn’t much help.
What does help is router QoS. I use Tomato firmware and it has a very nice little QoS setting. The key classifier for Blizzard traffic is Source or Destination Port: 6881. That catches most of the TCP streams starting on your PC downloading the game client. I set it to Low priority, which gives my ssh, HTTP and DNS traffic at the router a fighting chance.
While I’m here, the most valuable router QoS setting is “prioritize ACK packets”. That helps stop large uploads from an ADSL line prevent simultaneous fast downloads.
Here’s a graph of my router outbound traffic while I’m busily downloading Diablo III to my laptop (class = Low) while simultaneously uploading a big file via ssh (class = Medium). The graph shows a lot of Highest priority traffic; I’m not sure, but I assume that’s ACK packets. I’m a little sad that low priority gets 50% of the bandwidth whereas medium only gets 25%: I don’t know if that’s how the QoS works or if it’s an artifact of Bittorrent using so many simultaneous streams.
Here’s my router QoS settings:
Match Rule | Class | Description |
UDP Port: 123 |
Highest | ntp |
TCP/UDP Dst Port: 53 Transferred: 0 – 2KB |
Highest | DNS |
TCP Port: 22 Transferred: 0 – 1024KB |
High | ssh |
TCP Dst Port: 80,443 Transferred: 0 – 512KB |
High | WWW |
TCP Dst Port: 80,443 Transferred: 512KB+ |
Low | WWW (512K+) |
TCP/UDP Dst Port: 53 Transferred: 2KB+ |
Lowest | DNS (2K+) |
TCP/UDP Port: 119 |
Low | NNTP |
TCP/UDP Port: 563 |
Low | NNTP (SSL) |
TCP/UDP Port: 6881 |
Low | Blizzard BitTorrent |
And for lolz, I’ve discovered my iMac + router + modem has 2 megs of upload buffer. Boy that’s a lot. I should look into tweaking Tomato to lower the buffers. Or maybe find whatever the new hacker hipster router firmware is.
Update: the graph above was when I only identified source port 6881 as Blizzard traffic. Catching destination 6881 as well seems to help things a little.