Permalink
4 comments
on commit
sign in to comment.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Enable HTTP/2 support
The binary cache store can now use HTTP/2 to do lookups. This is much more efficient than HTTP/1.1 due to multiplexing: we can issue many requests in parallel over a single TCP connection. Thus it's no longer necessary to use a bunch of concurrent TCP connections (25 by default). For example, downloading 802 .narinfo files from https://cache.nixos.org/, using a single TCP connection, takes 11.8s with HTTP/1.1, but only 0.61s with HTTP/2. This did require a fairly substantial rewrite of the Downloader class to use the curl multi interface, because otherwise curl wouldn't be able to do multiplexing for us. As a bonus, we get connection reuse even with HTTP/1.1. All downloads are now handled by a single worker thread. Clients call Downloader::enqueueDownload() to tell the worker thread to start the download, getting a std::future to the result.
- Loading branch information
Showing
with
430 additions
and 207 deletions.
- +1 −1 src/libexpr/common-opts.cc
- +1 −1 src/libexpr/parser.y
- +1 −1 src/libexpr/primops.cc
- +6 −4 src/libstore/builtins.cc
- +379 −171 src/libstore/download.cc
- +28 −7 src/libstore/download.hh
- +9 −17 src/libstore/http-binary-cache-store.cc
- +4 −4 src/nix-channel/nix-channel.cc
- +1 −1 src/nix-prefetch-url/nix-prefetch-url.cc
Oops, something went wrong.
This comment has been minimized.
Nice!
This comment has been minimized.
Nice!!
This comment has been minimized.
Can we get rid of negative lookup cache now for http2?
This comment has been minimized.
This commit has been mentioned on Nix community. There might be relevant details there:
https://discourse.nixos.org/t/improvements-to-cache-nixos-org-help-test-the-new-config/3620/7