Run the daemon worker on the same CPU as the client
On a system with multiple CPUs, running Nix operations through the daemon is significantly slower than "direct" mode: $ NIX_REMOTE= nix-instantiate '<nixos>' -A system real 0m0.974s user 0m0.875s sys 0m0.088s $ NIX_REMOTE=daemon nix-instantiate '<nixos>' -A system real 0m2.118s user 0m1.463s sys 0m0.218s The main reason seems to be that the client and the worker get moved to a different CPU after every call to the worker. This patch adds a hack to lock them to the same CPU. With this, the overhead of going through the daemon is very small: $ NIX_REMOTE=daemon nix-instantiate '<nixos>' -A system real 0m1.074s user 0m0.809s sys 0m0.098s
Showing
- configure.ac 4 additions, 0 deletionsconfigure.ac
- src/libstore/build.cc 4 additions, 0 deletionssrc/libstore/build.cc
- src/libstore/local-store.cc 2 additions, 0 deletionssrc/libstore/local-store.cc
- src/libstore/remote-store.cc 12 additions, 1 deletionsrc/libstore/remote-store.cc
- src/libstore/worker-protocol.hh 1 addition, 1 deletionsrc/libstore/worker-protocol.hh
- src/libutil/Makefile.am 2 additions, 2 deletionssrc/libutil/Makefile.am
- src/libutil/affinity.cc 54 additions, 0 deletionssrc/libutil/affinity.cc
- src/libutil/affinity.hh 9 additions, 0 deletionssrc/libutil/affinity.hh
- src/nix-daemon/nix-daemon.cc 4 additions, 0 deletionssrc/nix-daemon/nix-daemon.cc
Loading
Please register or sign in to comment