Leita CLI filesystem scan benchmark, 2026-10-19 This is a measured scan of generated files on a real btrfs mount. The fixture is synthetic developer-shaped data, not a sample of a person's files or a claim about cold-disk or general user workloads. Leita is an optimized development build, g8e42581, not a published release. The full source revision, pinned jm submodule, Odin version, executable SHA-256 hashes, kernel, CPU and exact mount options are in results.json. Reproduction (Linux; run outside tmpfs on a filesystem with at least 2 GB free): export LEITA_REPO=/path/to/leita/checkout export BENCH_SOURCE=/path/to/isolated/leita-source export BENCH_WORK=/path/to/persistent/benchmark-data git -C "$LEITA_REPO" worktree add --detach "$BENCH_SOURCE" 8e42581d204c11c22724c0fdbc3757dffd34c949 git -C "$BENCH_SOURCE" submodule update --init jm cd "$BENCH_SOURCE" LEITA_LICENCE_KEY=e83dc875975880f373348c2eccbf6b5c719736abf15727e77f3968c0c6644553 just cli release python3 /path/to/benchmark.py --workdir "$BENCH_WORK" \ --leita "$BENCH_SOURCE/build/release/leita" \ --fd /path/to/fd --ncdu /path/to/ncdu --time /path/to/GNU-time \ --source-revision 8e42581d204c11c22724c0fdbc3757dffd34c949 \ --jm-revision 6d85e4750a4c58ca3c1076b78b9cc78def2a4c9e \ --build-kind 'optimized development build with repository test public key' \ --build-command 'LEITA_LICENCE_KEY=e83dc875975880f373348c2eccbf6b5c719736abf15727e77f3968c0c6644553 just cli release' \ --output results.json The key above is the repository's public TEST key. The actual run used fd 10.5.0, GNU findutils 4.11.0-modified, ncdu 2.9.2 and GNU Time 1.10. For exact binary identity, compare their SHA-256 hashes in results.json. ncdu came from the Arch package named ncdu-2.9.2-1-x86_64.pkg.tar.zst; its package SHA-256 is recorded. The generator writes 2 fixture roots under BENCH_WORK: 200,000 and 400,000 regular data files. Files are arranged 60% under src, 30% under vendor and 10% under docs, with 100 files per leaf directory. A seeded PRNG chooses language extensions and a content length uniformly from 0, 32, 256 and 4,096 bytes; contents are repeated x bytes. The actual 200,000-file fixture had 49,918 empty, 50,372 32-byte, 49,886 256-byte and 49,824 4,096-byte files (218,461,824 content bytes). The 400,000-file fixture had 99,587 empty, 100,361 32-byte, 99,931 256-byte and 100,121 4,096-byte files (438,889,504 content bytes). Each root also has 400 symlinks to directories, a .gitignore and a fixture marker. The measured operation denominator is all entries beneath the root, excluding the root: 203,020 and 405,634 respectively. Leita's used count and fd names-only, fd metadata, and find counts matched those numbers; ncdu JSON had one additional record for the root. For each fixture the harness verifies every generated file's content, every symlink target and the entry-type counts. It then runs each of the 5 modes twice to warm caches, followed by 7 measured fresh-process runs per mode. Each round shuffles mode order with the recorded seed. Caches stay warm; no global cache drop or sudo is used. The host mount was btrfs with zstd:3 compression; full options are in results.json. The scan commands (with $TREE as fixture root) are: leita --no-history --whole --color never $TREE fd -HI --one-file-system -0 . $TREE fd -HI --one-file-system --changed-before 2100-01-01 -0 . $TREE find $TREE -xdev -mindepth 1 -print0 ncdu -0 --ignore-config -x -o /dev/null $TREE Standard output goes to /dev/null. Leita writes only its first-use trial state under an isolated XDG data directory; history/baseline reuse and report output are disabled. All LEITA_* inherited environment variables are removed. Symlink traversal, ignored/hidden entries and mount boundaries are aligned. Tool thread counts are defaults: Leita reported 24 directory readers on this host; fd and ncdu used their defaults; find uses its normal single process. The fd metadata mode uses a far-future modification-time bound to include every generated entry while making fd read its metadata. It runs no external stat command. The sorted path set matched fd names-only for both fixtures. Untimed strace checks found 112 statx calls versus 10 for names-only on a 100-file leaf, and 412 versus 10 on a 400-symlink directory. Total time is Python perf_counter_ns around launch and wait of a fresh GNU Time wrapper and its target; it includes wrapper startup and output costs. The median of 7 times is reported. ns/op is that median divided by entries beneath the root. Peak memory is GNU Time %M maximum resident set size for the target process, with the maximum of the 7 runs shown in decimal MB (KiB * 1,024 / 1,000,000). Raw elapsed nanoseconds and peak RSS KiB for every measured run are in results.json. Counts and units are independently checkable there. The tools do different work: fd names-only and find enumerate names; fd metadata reads modification times and filters against 2100-01-01; Leita builds a disk usage tree and summary; ncdu accounts for disk usage and serializes a JSON scan to /dev/null. The serialization cost is part of ncdu's reported time. These per-entry figures normalize by the same traversed fixture, not equivalent work. Small, compressible files favor metadata-cache scans; this test does not measure large-file reads, cold storage, network mounts or real project mixtures. Fixture creation takes roughly 1.8 GB of allocated space on the measured host. The script never removes an existing fixture unless --regenerate is given, and then only when its marker exists.