SCHED-1918: Improve multi-node startup with concurrent Pyxis cache reads - #2820
Open
aydinmirac wants to merge 1 commit into
Open
SCHED-1918: Improve multi-node startup with concurrent Pyxis cache reads#2820aydinmirac wants to merge 1 commit into
aydinmirac wants to merge 1 commit into
Conversation
itechdima
approved these changes
Jul 31, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Warm-cache users currently take the same exclusive flock used for image creation. On large multi-node jobs, this turns independent cache readers into a sequential queue even though the completed SquashFS image is immutable.
This change adds a lock-free warm-cache fast path while preserving exclusive coordination for cold-cache publication.
Changes
Validation
Automated tests cover concurrent warm readers, single-producer cold-cache behavior, node-specific cleanup and failed imports. End-to-end tests were performed using real Slurm, Pyxis and Enroot deployments:
The larger CPU improvement is expected. That test had eight lock contenders, while the GPU test had only four, so fewer readers accumulated behind the exclusive lock. The GPU test also has an approximately 27 second baseline from digest lookup, Slurm/Pyxis startup, SquashFS mounting, Enroot setup and NVIDIA device/library injection. These costs are outside this patch and dilute the percentage improvement. The patch targets the additional delay accumulated by queued readers, which becomes more significant as node count increases.
Cold-cache reconstruction of the 12 GB image completed successfully, and subsequent warm-cache launches remained stable.
An exact replay of the original and patched Bash importers was also performed against the shared VirtioFS cache using a fake digest lookup. At 64 concurrent callers:
The patched importer was successfully replayed with 1,000 concurrent callers. A lighter lock-path benchmark also completed 5,000 concurrent cache reads distributed across four workers in approximately 150 ms, with zero failures and zero lock wait.
Scope and limitations
The 5,000-caller benchmark is a synthetic contention test, not an end-to-end 5,000-node launch. It validates the locking algorithm but does not reproduce 5,000 independent Slurm daemons, filesystem clients, container mounts, network paths or GPU initialization. Production-scale testing is still required to measure absolute startup time on a real 5,000-node cluster.