1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-12-05 00:21:01 +01:00
Nix, the purely functional package manager
Find a file
Sergei Zimmerman 2f6550b7a7
libfetchers/git-utils: Avoid using git_writestream for small files
It turns out that libgit2 is incredibly naive and each git_writestream creates
a new temporary file like .cache/nix/tarball-cache/objects/streamed_git2_6a82bb68dc0a3918
that it reads from afterwards. It doesn't do any internal buffering.

Doing (with a fresh fetcher cache) a simple:

strace -c nix flake metadata "https://releases.nixos.org/nixos/25.05/nixos-25.05.813095.1c8ba8d3f763/nixexprs.tar.xz" --store "dummy://?read-only=false"

(Before)

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ------------------
 31.05    2.372728           9    259790     81917 openat
 19.21    1.467784          30     48157           unlink
 10.43    0.796793           4    162898           getdents64
  7.75    0.592637           4    145969           read
  7.67    0.585976           3    177877           close
  7.11    0.543032           4    129970       190 newfstatat
  6.98    0.533211          10     48488           write
  4.09    0.312585           3     81443     81443 utimensat
  3.22    0.246158           3     81552           fstat

(After)

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ------------------
 29.61    0.639393           3    162898           getdents64
 26.26    0.567119           3    163523     81934 openat
 12.50    0.269835           3     81848       207 newfstatat
 11.60    0.250429           3     81443     81443 utimensat
  9.82    0.212053           2     81593           close
  9.33    0.201390           2     81544           fstat
  0.18    0.003814           9       406        17 futex
2025-12-02 04:48:43 +03:00
.github build(deps): bump actions/checkout from 5 to 6 2025-11-24 22:03:58 +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 release-notes/rl-2.26.md: remove hidden Unicode RLO control chars (#14666) 2025-11-30 18:38:18 +08:00
maintainers release-notes/rl-2.26.md: remove hidden Unicode RLO control chars (#14666) 2025-11-30 18:38:18 +08: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 packaging: Unbork win shells with unavailable dependencies 2025-11-19 00:43:28 +03:00
scripts Change channel URLs to channels.nixos.org subdomain 2025-11-09 15:28:12 +01:00
src libfetchers/git-utils: Avoid using git_writestream for small files 2025-12-02 04:48:43 +03:00
tests Merge pull request #14672 from NixOS/fix-13948 2025-11-30 01:03:01 +00: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-10-07 17:15:28 +02:00
CITATION.cff chore: PhD thesis as reference in CITATION.cff 2024-05-18 20:05:22 +02:00
CONTRIBUTING.md Update developer facing links to nix.dev 2025-07-25 10:59:44 +02: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 flake: Bump nixpkgs 2025-11-27 23:43:41 +03: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.