1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2026-01-10 00:11:24 +01:00
Nix, the purely functional package manager
Find a file
Sergei Zimmerman b1c0f416cb
libutil: Make computeClosure async
This makes computeFSClosure much faster in practice, because the graph is now traversed in an async BFS manner, while
previously it serialised on each single path info query. For something like

rm ~/.cache/nix/binary-cache-v7.sqlite && nix path-info --store https://cache.nixos.org --recursive /nix/store/7zz3zmv2a0ssmgqlfhy4rsb6ii6z475a-stdenv-linux.drv

The difference is huge:

(Before)

Command being timed: "nix path-info --store https://cache.nixos.org --recursive /nix/store/7zz3zmv2a0ssmgqlfhy4rsb6ii6z475a-stdenv-linux.drv"
        User time (seconds): 0.07
        System time (seconds): 0.06
        Percent of CPU this job got: 1%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:08.88

(After)

Command being timed: "build/src/nix/nix path-info --store https://cache.nixos.org --recursive /nix/store/7zz3zmv2a0ssmgqlfhy4rsb6ii6z475a-stdenv-linux.drv"
        User time (seconds): 0.07
        System time (seconds): 0.04
        Percent of CPU this job got: 22%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.49

Basically 20x speedup with just processing stuff in an async manner.

Note that for now we have rather ad-hoc event loop just for
computeClosure. This seems perfectly fine for now, but in the future
we could extended it and possibly have a global even loop with multiple
threads handling it.

For now we have basic rate limiting <= 64 coroutines in flight which is
smaller than CURLMOPT_MAX_CONCURRENT_STREAMS (100 by default).
2025-12-19 07:28:44 +03:00
.github Merge pull request #14805 from NixOS/dependabot/github_actions/cachix/install-nix-action-31.9.0 2025-12-16 19:58:01 +00:00
ci/gha ci/gha: Disable linkcheck on darwin 2025-11-05 15:38:23 +01:00
contrib function-trace: always show the trace 2019-09-18 23:23:21 +02:00
doc/manual Merge pull request #14824 from roberth/issue-14776 2025-12-18 03:18:45 +00:00
maintainers Update release credits 2025-12-09 15:36:45 +01:00
misc zsh/completion: put compdef on first line 2025-10-29 18:09:42 +08:00
nix-meson-build-support build: Disable libstdc++ TBB backend to avoid unnecessary dependency 2025-11-07 20:58:46 +01:00
packaging Fix up dev shell in a few ways 2025-12-17 15:41:47 -05:00
scripts Change channel URLs to channels.nixos.org subdomain 2025-11-09 15:28:12 +01:00
src libutil: Make computeClosure async 2025-12-19 07:28:44 +03:00
tests Remove dependent realisations 2025-12-16 19:56:19 -05:00
.clang-format Update clang-format with fixing namespace coments, and separate definition blocks 2025-07-18 12:46:51 -04:00
.clang-tidy Add .clang-tidy 2024-02-01 01:01:39 +01:00
.coderabbit.yaml .coderabbit.yaml: Kill chats 2025-11-04 22:55:18 +03:00
.dir-locals.el .dir-locals.el: Set c-block-comment-prefix 2020-07-10 11:21:06 +02:00
.editorconfig No global eval settings in libnixexpr 2024-06-24 12:15:16 -04:00
.git-blame-ignore-revs git-blame-ignore-revs: Add nixfmt 1.0.0 reformat 2025-08-18 20:30:54 +03:00
.gitignore Overriding gtest with gmock 2025-05-31 07:41:27 -07:00
.shellcheckrc housekeeping: shellcheck for tests/functional/ca/build-cache.sh 2024-06-12 17:41:16 -04:00
.version Bump version 2025-12-10 17:35:28 +01:00
CITATION.cff chore: PhD thesis as reference in CITATION.cff 2024-05-18 20:05:22 +02:00
CONTRIBUTING.md chore: document we use sembr in the docs 2025-12-05 23:17:13 +01:00
COPYING COPYING: update to latest lgpl-2.1.txt (fixes #13758) 2025-09-18 00:45:01 +08:00
default.nix Format .nix files 2025-01-24 17:04:02 +01:00
docker.nix Change channel URLs to channels.nixos.org subdomain 2025-11-09 15:28:12 +01:00
flake.lock flake: Bump nixpkgs 2025-11-27 23:43:41 +03:00
flake.nix doc: make HTML manual build optional 2025-12-06 22:35:45 +01:00
HACKING.md Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
meson.build meson.build: Make schema checks optional 2025-11-07 15:15:56 -05:00
meson.format flake: Add meson formatter 2025-06-11 22:08:03 +00:00
meson.options meson.build: Make schema checks optional 2025-11-07 15:15:56 -05:00
README.md fix(docs): update Matrix channel links 2025-05-04 12:17:48 +02:00
shell.nix Remove url literals 2022-01-24 13:28:21 +01:00

Nix

Open Collective supporters CI

Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. Please refer to the Nix manual for more details.

Installation and first steps

Visit nix.dev for installation instructions and beginner tutorials.

Full reference documentation can be found in the Nix manual.

Building and developing

Follow instructions in the Nix reference manual to set up a development environment and build Nix from source.

Contributing

Check the contributing guide if you want to get involved with developing Nix.

Additional resources

Nix was created by Eelco Dolstra and developed as the subject of his PhD thesis The Purely Functional Software Deployment Model, published 2006. Today, a world-wide developer community contributes to Nix and the ecosystem that has grown around it.

License

Nix is released under the LGPL v2.1.