pragmatist
Patrick Joyce

January 3, 2007

Selfish Bittorrent

Seems that a team at the University of Washington have implemented a selfish bittorrent client, BitTyrant, that generates an average 70% increase in download performance for users with 1 Mbit upload.

They modded Azureus so that instead of dividing your upload bandwidth evenly amongst the peers they allocate it based on how fact that peer is sending to you..

From their website:

Q: How is BitTyrant different from existing BitTorrent clients?

BitTyrant differs from existing clients in its selection of which peers to unchoke and send rates to unchoked peers. Suppose your upload capacity is 50 KBps. If you’ve unchoked 5 peers, existing clients will send each peer 10 KBps, independent of the rate each is sending to you. In contrast, BitTyrant will rank all peers by their receive / sent ratios, preferentially unchoking those peers with high ratios. For example, a peer sending data to you at 20 KBps and receiving data from you at 10 KBps will have a ratio of 2, and would be unchoked before unchoking someone uploading at 10 KBps (ratio 1). Further, BitTyrant dynamically adjusts its send rate, giving more data to peers that can and do upload quickly and reducing send rates to others.

To be honest I has always thought that this was how bittorrent clients behaved. It doesn't violate the protocol, and it seemed fairly obvious that it would result in higher performance, so I'm surprised that this is a new idea. In any case, cool stuff, and I'm look forward to using this and seeing how it works with the very modest upload bandwidth that Comcast gives me.

If you're interested in the nerdy details, check out the research paper (pdf)

More Articles on Software & Product Development

Agile With a Lowercase “a”
”Agile“ is an adjective. It is not a noun. It isn’t something you do, it is something you are.
How Do You End Up With A Great Product A Year From Now?
Nail the next two weeks. 26 times in a row.
Build it Twice
Resist the urge to abstract until you've learned what is general to a class of problems and what is specific to each problem.