-
-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Walk history for files in parallell #12
Conversation
🤠 Cargo bloat for toolchain stable-x86_64-unknown-linux-gnu 🤠 @@ Size breakdown @@
- Size 3.4 MB
+ Size 3.64 MB +252.85 KB
- Text Size 1.08 MB
+ Text Size 1.15 MB +63.28 KB
Size difference per crateNote: The numbers below are not 100% accurate, use them as a rough estimate. @@ Breakdown per crate @@
- std 286.51 KB
+ std 311.85 KB
- git_warp_time 38.33 KB
+ git_warp_time 43.56 KB
+ rayon_core 26.07 KB
+ crossbeam_epoch 5.44 KB
+ crossbeam_deque 2.44 KB Dependency tree@@ Dependency tree @@
- Count: 335
+ Count: 358
├─ clap v4.4.11
│ ├─ clap_builder v4.4.11
│ │ ├─ anstream v0.6.4
│ │ ├─ anstyle v1.0.4
│ │ ├─ clap_lex v0.6.0
│ │ └─ strsim v0.10.0
│ └─ clap_derive v4.4.7 (proc-macro)
├─ filetime v0.2.23
│ ├─ cfg-if v1.0.0
│ └─ libc v0.2.150
├─ git2 v0.18.1
│ ├─ bitflags v2.4.1
│ ├─ libc v0.2.150
│ ├─ libgit2-sys v0.16.1+1.7.1
│ │ ├─ libc v0.2.150
│ │ ├─ libz-sys v1.1.12
│ │ │ ├─ libc v0.2.150
│ │ │ ├─ cc v1.0.83
│ │ │ │ ├─ jobserver v0.1.27
│ │ │ │ │ └─ libc v0.2.150
│ │ │ │ └─ libc v0.2.150
│ │ │ ├─ pkg-config v0.3.27
│ │ │ └─ vcpkg v0.2.15
│ │ ├─ cc v1.0.83
│ │ └─ pkg-config v0.3.27
│ ├─ log v0.4.20
│ └─ url v2.5.0
│ ├─ form_urlencoded v1.2.1
│ │ └─ percent-encoding v2.3.1
│ ├─ idna v0.5.0
│ │ ├─ unicode-bidi v0.3.14
│ │ └─ unicode-normalization v0.1.22
│ │ └─ tinyvec v1.6.0
│ │ └─ tinyvec_macros v0.1.1
│ └─ percent-encoding v2.3.1
+ ├─ hashbrown v0.14.3
+ │ ├─ ahash v0.8.6
+ │ │ ├─ cfg-if v1.0.0
+ │ │ ├─ once_cell v1.18.0
+ │ │ ├─ zerocopy v0.7.25
+ │ │ └─ version_check v0.9.4
+ │ ├─ allocator-api2 v0.2.16
+ │ └─ rayon v1.8.0
+ │ ├─ either v1.9.0
+ │ └─ rayon-core v1.12.0
+ │ ├─ crossbeam-deque v0.8.3
+ │ │ ├─ cfg-if v1.0.0
+ │ │ ├─ crossbeam-epoch v0.9.15
+ │ │ │ ├─ cfg-if v1.0.0
+ │ │ │ ├─ crossbeam-utils v0.8.16
+ │ │ │ │ └─ cfg-if v1.0.0
+ │ │ │ ├─ memoffset v0.9.0
+ │ │ │ │ └─ autocfg v1.1.0
+ │ │ │ ├─ scopeguard v1.2.0
+ │ │ │ └─ autocfg v1.1.0
+ │ │ └─ crossbeam-utils v0.8.16
+ │ └─ crossbeam-utils v0.8.16
+ ├─ rayon v1.8.0
├─ clap_complete v4.4.4
│ └─ clap v4.4.11
├─ clap_mangen v0.2.15
│ ├─ clap v4.4.11
│ └─ roff v0.2.1
└─ vergen v8.2.6
├─ anyhow v1.0.75
├─ gix v0.55.2
│ ├─ gix-actor v0.28.1
│ │ ├─ bstr v1.8.0
│ │ │ ├─ memchr v2.6.4
│ │ │ └─ regex-automata v0.4.3
│ │ ├─ btoi v0.4.3
│ │ │ └─ num-traits v0.2.17
│ │ │ └─ autocfg v1.1.0
│ │ ├─ gix-date v0.8.1
│ │ │ ├─ bstr v1.8.0
│ │ │ ├─ itoa v1.0.9
│ │ │ ├─ thiserror v1.0.50
│ │ │ │ └─ thiserror-impl v1.0.50 (proc-macro)
│ │ │ │ ├─ proc-macro2 v1.0.70
│ │ │ │ ├─ quote v1.0.33
│ │ │ │ └─ syn v2.0.39
│ │ │ └─ time v0.3.30
│ │ │ ├─ deranged v0.3.10
│ │ │ │ └─ powerfmt v0.2.0
│ │ │ ├─ itoa v1.0.9
│ │ │ ├─ libc v0.2.150
│ │ │ ├─ num_threads v0.1.6
│ │ │ ├─ powerfmt v0.2.0
│ │ │ ├─ time-core v0.1.2
│ │ │ └─ time-macros v0.2.15 (proc-macro)
│ │ │ └─ time-core v0.1.2
│ │ ├─ itoa v1.0.9
│ │ ├─ thiserror v1.0.50
│ │ └─ winnow v0.5.25
│ │ └─ memchr v2.6.4
│ ├─ gix-commitgraph v0.22.1
│ │ ├─ bstr v1.8.0
│ │ ├─ gix-chunk v0.4.5
│ │ │ └─ thiserror v1.0.50
│ │ ├─ gix-features v0.36.1
│ │ │ ├─ crc32fast v1.3.2
│ │ │ │ └─ cfg-if v1.0.0
│ │ │ ├─ flate2 v1.0.28
│ │ │ │ ├─ crc32fast v1.3.2
│ │ │ │ └─ miniz_oxide v0.7.1
│ │ │ │ └─ adler v1.0.2
│ │ │ ├─ gix-hash v0.13.2
│ │ │ │ ├─ faster-hex v0.8.1
│ │ │ │ │ └─ serde v1.0.193
│ │ │ │ └─ thiserror v1.0.50
│ │ │ ├─ gix-trace v0.1.4
│ │ │ ├─ libc v0.2.150
│ │ │ ├─ once_cell v1.18.0
│ │ │ ├─ prodash v26.2.2
│ │ │ ├─ sha1_smol v1.0.0
│ │ │ ├─ thiserror v1.0.50
│ │ │ └─ walkdir v2.4.0
│ │ │ └─ same-file v1.0.6
│ │ ├─ gix-hash v0.13.2
│ │ ├─ memmap2 v0.9.0
│ │ │ └─ libc v0.2.150
│ │ └─ thiserror v1.0.50
│ ├─ gix-config v0.31.0
│ │ ├─ bstr v1.8.0
│ │ ├─ gix-config-value v0.14.1
│ │ │ ├─ bitflags v2.4.1
│ │ │ ├─ bstr v1.8.0
│ │ │ ├─ gix-path v0.10.1
│ │ │ │ ├─ bstr v1.8.0
│ │ │ │ ├─ gix-trace v0.1.4
│ │ │ │ ├─ home v0.5.5
│ │ │ │ ├─ once_cell v1.18.0
│ │ │ │ └─ thiserror v1.0.50
│ │ │ ├─ libc v0.2.150
│ │ │ └─ thiserror v1.0.50
│ │ ├─ gix-features v0.36.1
│ │ ├─ gix-glob v0.14.1
│ │ │ ├─ bitflags v2.4.1
│ │ │ ├─ bstr v1.8.0
│ │ │ ├─ gix-features v0.36.1
│ │ │ └─ gix-path v0.10.1
│ │ ├─ gix-path v0.10.1
│ │ ├─ gix-ref v0.38.0
│ │ │ ├─ gix-actor v0.28.1
│ │ │ ├─ gix-date v0.8.1
│ │ │ ├─ gix-features v0.36.1
│ │ │ ├─ gix-fs v0.8.1
│ │ │ │ └─ gix-features v0.36.1
│ │ │ ├─ gix-hash v0.13.2
│ │ │ ├─ gix-lock v11.0.1
│ │ │ │ ├─ gix-tempfile v11.0.1
│ │ │ │ │ ├─ gix-fs v0.8.1
│ │ │ │ │ ├─ libc v0.2.150
│ │ │ │ │ ├─ once_cell v1.18.0
│ │ │ │ │ ├─ parking_lot v0.12.1
│ │ │ │ │ │ ├─ lock_api v0.4.11
│ │ │ │ │ │ │ ├─ scopeguard v1.2.0
│ │ │ │ │ │ │ └─ autocfg v1.1.0
│ │ │ │ │ │ └─ parking_lot_core v0.9.9
│ │ │ │ │ │ ├─ cfg-if v1.0.0
│ │ │ │ │ │ ├─ libc v0.2.150
│ │ │ │ │ │ └─ smallvec v1.11.2
│ │ │ │ │ ├─ signal-hook v0.3.17
│ │ │ │ │ │ ├─ libc v0.2.150
│ │ │ │ │ │ └─ signal-hook-registry v1.4.1
│ │ │ │ │ │ └─ libc v0.2.150
│ │ │ │ │ ├─ signal-hook-registry v1.4.1
│ │ │ │ │ └─ tempfile v3.8.1
│ │ │ │ │ ├─ cfg-if v1.0.0
│ │ │ │ │ ├─ fastrand v2.0.1
│ │ │ │ │ └─ rustix v0.38.26
│ │ │ │ │ ├─ bitflags v2.4.1
│ │ │ │ │ └─ linux-raw-sys v0.4.12
│ │ │ │ ├─ gix-utils v0.1.6
│ │ │ │ │ └─ fastrand v2.0.1
│ │ │ │ └─ thiserror v1.0.50
│ │ │ ├─ gix-object v0.38.0
│ │ │ │ ├─ bstr v1.8.0
│ │ │ │ ├─ btoi v0.4.3
│ │ │ │ ├─ gix-actor v0.28.1
│ │ │ │ ├─ gix-date v0.8.1
│ │ │ │ ├─ gix-features v0.36.1
│ │ │ │ ├─ gix-hash v0.13.2
│ │ │ │ ├─ gix-validate v0.8.1
│ │ │ │ │ ├─ bstr v1.8.0
│ │ │ │ │ └─ thiserror v1.0.50
│ │ │ │ ├─ itoa v1.0.9
│ │ │ │ ├─ smallvec v1.11.2
│ │ │ │ ├─ thiserror v1.0.50
│ │ │ │ └─ winnow v0.5.25
│ │ │ ├─ gix-path v0.10.1
│ │ │ ├─ gix-tempfile v11.0.1
│ │ │ ├─ gix-validate v0.8.1
│ │ │ ├─ memmap2 v0.7.1
│ │ │ │ └─ libc v0.2.150
│ │ │ ├─ thiserror v1.0.50
│ │ │ └─ winnow v0.5.25
│ │ ├─ gix-sec v0.10.1
│ │ │ ├─ bitflags v2.4.1
│ │ │ └─ libc v0.2.150
│ │ ├─ memchr v2.6.4
│ │ ├─ once_cell v1.18.0
│ │ ├─ smallvec v1.11.2
│ │ ├─ thiserror v1.0.50
│ │ ├─ unicode-bom v2.0.3
│ │ └─ winnow v0.5.25
│ ├─ gix-date v0.8.1
│ ├─ gix-diff v0.37.0
│ │ ├─ gix-hash v0.13.2
│ │ ├─ gix-object v0.38.0
│ │ └─ thiserror v1.0.50
│ ├─ gix-discover v0.26.0
│ │ ├─ bstr v1.8.0
│ │ ├─ gix-hash v0.13.2
│ │ ├─ gix-path v0.10.1
│ │ ├─ gix-ref v0.38.0
│ │ ├─ gix-sec v0.10.1
│ │ └─ thiserror v1.0.50
│ ├─ gix-features v0.36.1
│ ├─ gix-fs v0.8.1
│ ├─ gix-glob v0.14.1
│ ├─ gix-hash v0.13.2
│ ├─ gix-hashtable v0.4.1
│ │ ├─ gix-hash v0.13.2
│ │ ├─ hashbrown v0.14.3
│ │ └─ parking_lot v0.12.1
│ ├─ gix-index v0.26.0
│ │ ├─ bitflags v2.4.1
│ │ ├─ bstr v1.8.0
│ │ ├─ btoi v0.4.3
│ │ ├─ filetime v0.2.23
│ │ ├─ gix-bitmap v0.2.8
│ │ │ └─ thiserror v1.0.50
│ │ ├─ gix-features v0.36.1
│ │ ├─ gix-fs v0.8.1
│ │ ├─ gix-hash v0.13.2
│ │ ├─ gix-lock v11.0.1
│ │ ├─ gix-object v0.38.0
│ │ ├─ gix-traverse v0.34.0
│ │ │ ├─ gix-commitgraph v0.22.1
│ │ │ ├─ gix-date v0.8.1
│ │ │ ├─ gix-hash v0.13.2
│ │ │ ├─ gix-hashtable v0.4.1
│ │ │ ├─ gix-object v0.38.0
│ │ │ ├─ gix-revwalk v0.9.0
│ │ │ │ ├─ gix-commitgraph v0.22.1
│ │ │ │ ├─ gix-date v0.8.1
│ │ │ │ ├─ gix-hash v0.13.2
│ │ │ │ ├─ gix-hashtable v0.4.1
│ │ │ │ ├─ gix-object v0.38.0
│ │ │ │ ├─ smallvec v1.11.2
│ │ │ │ └─ thiserror v1.0.50
│ │ │ ├─ smallvec v1.11.2
│ │ │ └─ thiserror v1.0.50
│ │ ├─ itoa v1.0.9
│ │ ├─ memmap2 v0.7.1
│ │ ├─ smallvec v1.11.2
│ │ └─ thiserror v1.0.50
│ ├─ gix-lock v11.0.1
│ ├─ gix-macros v0.1.1 (proc-macro)
│ │ ├─ proc-macro2 v1.0.70
│ │ ├─ quote v1.0.33
│ │ └─ syn v2.0.39
│ ├─ gix-object v0.38.0
│ ├─ gix-odb v0.54.0
│ │ ├─ arc-swap v1.6.0
│ │ ├─ gix-date v0.8.1
│ │ ├─ gix-features v0.36.1
│ │ ├─ gix-hash v0.13.2
│ │ ├─ gix-object v0.38.0
│ │ ├─ gix-pack v0.44.0
│ │ │ ├─ clru v0.6.1
│ │ │ ├─ gix-chunk v0.4.5
│ │ │ ├─ gix-features v0.36.1
│ │ │ ├─ gix-hash v0.13.2
│ │ │ ├─ gix-hashtable v0.4.1
│ │ │ ├─ gix-object v0.38.0
│ │ │ ├─ gix-path v0.10.1
│ │ │ ├─ gix-tempfile v11.0.1
│ │ │ ├─ memmap2 v0.7.1
│ │ │ ├─ parking_lot v0.12.1
│ │ │ ├─ smallvec v1.11.2
│ │ │ └─ thiserror v1.0.50
│ │ ├─ gix-path v0.10.1
│ │ ├─ gix-quote v0.4.8
│ │ │ ├─ bstr v1.8.0
│ │ │ ├─ btoi v0.4.3
│ │ │ └─ thiserror v1.0.50
│ │ ├─ parking_lot v0.12.1
│ │ ├─ tempfile v3.8.1
│ │ └─ thiserror v1.0.50
│ ├─ gix-pack v0.44.0
│ ├─ gix-path v0.10.1
│ ├─ gix-ref v0.38.0
│ ├─ gix-refspec v0.19.0
│ │ ├─ bstr v1.8.0
│ │ ├─ gix-hash v0.13.2
│ │ ├─ gix-revision v0.23.0
│ │ │ ├─ bstr v1.8.0
│ │ │ ├─ gix-date v0.8.1
│ │ │ ├─ gix-hash v0.13.2
│ │ │ ├─ gix-hashtable v0.4.1
│ │ │ ├─ gix-object v0.38.0
│ │ │ ├─ gix-revwalk v0.9.0
│ │ │ ├─ gix-trace v0.1.4
│ │ │ └─ thiserror v1.0.50
│ │ ├─ gix-validate v0.8.1
│ │ ├─ smallvec v1.11.2
│ │ └─ thiserror v1.0.50
│ ├─ gix-revision v0.23.0
│ ├─ gix-revwalk v0.9.0
│ ├─ gix-sec v0.10.1
│ ├─ gix-tempfile v11.0.1
│ ├─ gix-trace v0.1.4
│ ├─ gix-traverse v0.34.0
│ ├─ gix-url v0.25.2
│ │ ├─ bstr v1.8.0
│ │ ├─ gix-features v0.36.1
│ │ ├─ gix-path v0.10.1
│ │ ├─ home v0.5.5
│ │ ├─ thiserror v1.0.50
│ │ └─ url v2.5.0
│ ├─ gix-utils v0.1.6
│ ├─ gix-validate v0.8.1
│ ├─ once_cell v1.18.0
│ ├─ parking_lot v0.12.1
│ ├─ signal-hook v0.3.17
│ ├─ smallvec v1.11.2
│ └─ thiserror v1.0.50
├─ time v0.3.30
└─ rustversion v1.0.14 (proc-macro)
Commit: fc80325 (Compare with baseline commit) |
On my system with 12 cores this clocks in at 7× faster (tested with repos in the 1k wide by 2k deep range). That's a lot less than a theoretical gain of 11× because of the libgit2 instantiation overhead, but 7× is better than 1×. I'll release this now and then have a look at a different algorithm that might actually fix #11. |
Closes #9.
This effort is likely fairly futile: