Skip to content

GitInputAccessor: Speed up lookup()#10013

Merged
edolstra merged 1 commit intoNixOS:masterfrom
edolstra:libgit2-lookup
Feb 15, 2024
Merged

GitInputAccessor: Speed up lookup()#10013
edolstra merged 1 commit intoNixOS:masterfrom
edolstra:libgit2-lookup

Conversation

@edolstra
Copy link
Member

@edolstra edolstra commented Feb 14, 2024

Motivation

A command like

rm -rf ~/.cache/nix/tarball-cache/ ~/.cache/nix/fetcher-cache-v1.sqlite*; nix flake metadata 'git+file:///home/eelco/Dev/nixpkgs?rev=9463103069725474698139ab10f17a9d125da859'

was spending about 84% of its runtime in lookup(), specifically in git_tree_entry_bypath(). (The reading of blobs is less than 3%.)

It appears libgit2 doesn't do a lot of caching of trees, so we now make sure that when we look up a path, we add all its parents, and all the immediate children of the parents (since we have them in memory anyway), to our own cache.

This speeds up the command above from 17.2s to 7.8s on my machine.

Fixes (or at least should improve a lot) #9684.

Context

Priorities and Process

Add 👍 to pull requests you find important.

The Nix maintainer team uses a GitHub project board to schedule and track reviews.

A command like

  rm -rf ~/.cache/nix/tarball-cache/ ~/.cache/nix/fetcher-cache-v1.sqlite*; nix flake metadata 'git+file:///home/eelco/Dev/nixpkgs?rev=9463103069725474698139ab10f17a9d125da859'

was spending about 84% of its runtime in lookup(), specifically in
git_tree_entry_bypath(). (The reading of blobs is less than 3%.)

It appears libgit2 doesn't do a lot of caching of trees, so we now
make sure that when we look up a path, we add all its parents, and all
the immediate children of the parents (since we have them in memory
anyway), to our own cache.

This speed up the command above from 17.2s to 7.8s on my machine.

Fixes (or at least should improve a lot) NixOS#9684.
@github-actions github-actions bot added the fetching Networking with the outside (non-Nix) world, input locking label Feb 14, 2024
Copy link
Member

@Ericson2314 Ericson2314 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense to me

@edolstra edolstra merged commit 27b8d5d into NixOS:master Feb 15, 2024
@edolstra edolstra deleted the libgit2-lookup branch February 15, 2024 16:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fetching Networking with the outside (non-Nix) world, input locking

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

2 participants