Skip to content

actiondfs: simplify inode metadata, digest caching, and lookups - #25

Merged
dzbarsky merged 15 commits into
mainfrom
codex/actiondfs-deslop-round-four
Aug 1, 2026
Merged

actiondfs: simplify inode metadata, digest caching, and lookups#25
dzbarsky merged 15 commits into
mainfrom
codex/actiondfs-deslop-round-four

Conversation

@dzbarsky

@dzbarsky dzbarsky commented Aug 1, 2026

Copy link
Copy Markdown
Member

Simplify kernel/actiondfs/actiondfs.c in fifteen separately reviewable commits. Borrow immutable cached digests, reduce input inode and blob-cache allocations from kmalloc-192 to kmalloc-96, shrink parsed-child stack storage by 64 bytes, eliminate duplicate cache lookups and blob-path references, replace hexadecimal decoding with character classification, and avoid approximately 1.33 million unstaged-parent lookup calls in the LLVM workload. The actiondfs implementation removes 52 net lines.

Validation: complete supported ARM64/x86_64 Bazel build and test, standalone timing-parser test, production and instrumented macOS Virtualization.framework end-to-end tests, and a fresh LLVM VM smoke with 2,017 warmup plus 2,106 measured actions. The measured build completed in 136.185 seconds; local runs varied with host contention. Matched current-main GitHub Actions baselines are Linux 326.530/328.550 seconds (0.994x actiond/native) and Windows 365.645/376.549 seconds (0.971x), with 1,998 actions each.

@dzbarsky
dzbarsky merged commit b2cfb47 into main Aug 1, 2026
21 of 30 checks passed
dzbarsky added a commit that referenced this pull request Aug 1, 2026
…files (#26)

Continue #25 with 25 separately reviewable actiondfs cleanups. Derive
inode and merged-directory state from cached children, use RCU for
immutable directory-cache hits, search only cached input directories,
borrow backing dentries and staged copy files, transfer root-node
ownership to root inodes, reduce each superblock allocation from 128 to
96 bytes, allocate unhashed roots directly, publish staged backing
dentries before inode insertion, initialize locks only for loadable
inputs, and remove unnecessary ancestor zeroing, repeated inode
classification, blob checks, synthetic symlink digests, protobuf copies,
cache cleanup branches, and released-file state resets.

Validation: all 66 supported Bazel targets, both repository test suites,
the standalone timing-parser test, production and instrumented
Virtualization.framework VM end-to-end tests, and two fresh llvm-tblgen
VM smoke runs with identical 2,106 remote actions (88.494s and 86.002s;
previous run 74.995s). Warmups ranged from 63.992s to 83.160s,
indicating host contention; compare matched Linux and Windows CI
actiond/native results for performance changes.
e2e/LLVM_VM_SMOKE_TIMINGS.md contains the exact counters and both
measurements.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant