Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
index: don't store commit ids in sorted lookup table to save disk space
This reduces the index file size. In my linux mirror repo containing 1591524 commits, the initial index file shrank from 122MB to 92MB. In theory, this makes commit id lookup slow because of additional indirection and cache miss, but I don't see significant difference. In mid-size repo, this is actually a bit faster thanks to smaller index reads. Alternatively, the commit id field could be removed from the CommitGraphEntry, but doing that would introduce indirect lookup there, and the index disk size isn't as small as this change. - jj-0 baseline 122MB - jj-1 shrink CommitLookupEntry (this) 92MB - jj-3 shrink CommitGraphEntry 98MB Mid-size repo, "log" with default template ``` % hyperfine --sort command --warmup 3 --runs 20 -L bin jj-0,jj-1,jj-2,jj-3 \ -s "target/release-with-debug/{bin} -R ~/mirrors/linux debug reindex" \ "target/release-with-debug/{bin} -R ~/mirrors/linux --ignore-working-copy log -r.. -l100 --config-toml='revsets.short-prefixes=\"\"'" Benchmark 1: target/release-with-debug/jj-0 -R ~/mirrors/linux --ignore-working-copy log -r.. -l100 --config-toml='revsets.short-prefixes=""' Time (mean ± σ): 177.7 ms ± 12.9 ms [User: 96.3 ms, System: 81.5 ms] Range (min … max): 156.8 ms … 191.2 ms 20 runs Benchmark 2: target/release-with-debug/jj-1 -R ~/mirrors/linux --ignore-working-copy log -r.. -l100 --config-toml='revsets.short-prefixes=""' Time (mean ± σ): 169.8 ms ± 13.8 ms [User: 93.3 ms, System: 76.6 ms] Range (min … max): 151.1 ms … 191.5 ms 20 runs Benchmark 4: target/release-with-debug/jj-3 -R ~/mirrors/linux --ignore-working-copy log -r.. -l100 --config-toml='revsets.short-prefixes=""' Time (mean ± σ): 170.3 ms ± 13.4 ms [User: 90.1 ms, System: 79.7 ms] Range (min … max): 154.8 ms … 186.2 ms 20 runs Relative speed comparison 1.05 ± 0.11 target/release-with-debug/jj-0 -R ~/mirrors/linux --ignore-working-copy log -r.. -l100 --config-toml='revsets.short-prefixes=""' 1.00 target/release-with-debug/jj-1 -R ~/mirrors/linux --ignore-working-copy log -r.. -l100 --config-toml='revsets.short-prefixes=""' 1.00 ± 0.11 target/release-with-debug/jj-3 -R ~/mirrors/linux --ignore-working-copy log -r.. -l100 --config-toml='revsets.short-prefixes=""' ``` Small repo, "log" thousands of commits with -T"commit_id.shortest()" ``` % hyperfine --sort command --warmup 3 --runs 100 -L bin jj-0,jj-1,jj-2,jj-3 \ -s "target/release-with-debug/{bin} -R ~/mirrors/git debug reindex" \ "target/release-with-debug/{bin} -R ~/mirrors/git --ignore-working-copy log -r.. -l5000 -T'commit_id.shortest()' --config-toml='revsets.short-prefixes=\"\"'" Benchmark 1: target/release-with-debug/jj-0 -R ~/mirrors/git --ignore-working-copy log -r.. -l5000 -T'commit_id.shortest()' --config-toml='revsets.short-prefixes=""' Time (mean ± σ): 179.3 ms ± 12.8 ms [User: 149.7 ms, System: 29.6 ms] Range (min … max): 155.2 ms … 191.0 ms 100 runs Benchmark 2: target/release-with-debug/jj-1 -R ~/mirrors/git --ignore-working-copy log -r.. -l5000 -T'commit_id.shortest()' --config-toml='revsets.short-prefixes=""' Time (mean ± σ): 179.1 ms ± 13.7 ms [User: 148.5 ms, System: 30.5 ms] Range (min … max): 157.2 ms … 196.7 ms 100 runs Benchmark 4: target/release-with-debug/jj-3 -R ~/mirrors/git --ignore-working-copy log -r.. -l5000 -T'commit_id.shortest()' --config-toml='revsets.short-prefixes=""' Time (mean ± σ): 178.2 ms ± 13.6 ms [User: 148.7 ms, System: 29.6 ms] Range (min … max): 156.5 ms … 191.7 ms 100 runs Relative speed comparison 1.01 ± 0.11 target/release-with-debug/jj-0 -R ~/mirrors/git --ignore-working-copy log -r.. -l5000 -T'commit_id.shortest()' --config-toml='revsets.short-prefixes=""' 1.01 ± 0.11 target/release-with-debug/jj-1 -R ~/mirrors/git --ignore-working-copy log -r.. -l5000 -T'commit_id.shortest()' --config-toml='revsets.short-prefixes=""' 1.01 ± 0.11 target/release-with-debug/jj-3 -R ~/mirrors/git --ignore-working-copy log -r.. -l5000 -T'commit_id.shortest()' --config-toml='revsets.short-prefixes=""' ```
- Loading branch information