One of the things I've been doing this release cycle for Ubuntu is look at ways in which updates can be downloaded faster. The conclusion seems to be that there are three relatively easy things we can do:

  1. Use debdelta for getting updates to packages.
  2. Use zsync for getting updated Packages files.
  3. Use zsync for getting updated ISO files during testing.

Some further notes:

  • zsync is an implementation of the rsync algorithm that pre-computes the signatures (stored into a .zsync file), and uses HTTP range requests to get data from the server. It does not require anything above a normal http server, unlike rsync.
  • debdelta computes binary deltas between package versions. It is good for upgrading between specific versions. zsync would work between any versions, but it requires downloading a lot more data. Although debdelta is less convenient, it should save so much bandwidth it is worth it.
  • zsync works really well for Packages files, however, especially on uncompressed ones, but the gzip-compressed ones are really good, too.
  • zsync works really well also for downloading test versions of ISOs during testing: the ISOs don't change all that much from day to day. zsync is actually much more efficient than rsync, using about a quarter of the bandwidth in my brief tests.

I'm next going to be working on getting these into actual use for Ubuntu, and hopefully this work can benefit Debian as well.

Some discussions on the ubuntu-devel mailing list: