Repository navigation
Measure dirty scheduler contention and retain I/O inference - #29
Draft
mtwilliams wants to merge 1 commit into
Draft
mtwilliams wants to merge 1 commit into
mtwilliams wants to merge 1 commit into
Conversation
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.
Retains dirty I/O scheduling for inference based on a reproducible contention experiment. A source-only diagnostic feature switches all inference NIFs to dirty CPU, and an internal mode query rejects stale native artifacts. Default/precompiled builds retain the existing schedule. Control preparation remains on dirty CPU and termination remains a short normal NIF.
On Apple silicon with 4 normal/4 dirty CPU/4 dirty I/O schedulers, 2,000 golden-score tree runs had similar concurrent throughput (~86k calls/s). With 16 calls contending for one finite Loop session, a separate 2 MiB CPU-copy probe had p50 52µs on dirty I/O versus 71,779µs on dirty CPU (10 rounds). Mutex waiters can monopolize the CPU pool. docs/schedulers.md records exact results, reproduction, and limits for other graph/provider workloads.
Validation: both modes compiled and completed the benchmark with checked scores/results. The default build was restored and verified by the loaded NIF, then 216 checks passed on runtimes 1.17.3 and 1.24.4 (two optional ResNet checks excluded). Formatting and actionlint passed. CI compile-checks the diagnostic feature with all provider mappings. Stacked on #28; fork only. Task commit unsigned because the signing agent cancels requests.