Repository navigation
[prototyping] Make DiskGraph explicit I/O production-ready - #169
danielmawhirter wants to merge 1 commit into
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
|
Change mapCurrent head Preserve main’s Arrow/Parquet 60.1.0, PyO3 0.29.3, epserde 0.13.2, worker error handling, removed legacy store APIs, reusable build-only workflow and package-test sharding. Preserve the original sorted Fresh local checks pass: five affected crates’ all-target checks and Clippy; 158 Rust tests with 11 existing ignored cases; all ten strict native cases; all 13 fresh-wheel native/Core boundary cases with zero skips; 118 Core automatic-policy cases and three worker/pickling/options cases; 26 workflow tests; 16 generator tests and manifest/notice checks; all 11 changed Python files’ flake8/isort. Actionlint passes with repository runner labels; the unchanged SC2086 baseline at testing.yml:229 is recorded separately. Local Rust is 1.96.1, versus CI’s pinned 1.99.1. Generated upstream license indentation is preserved verbatim despite generic whitespace checking. Fresh Testing, Public and Lint runs are pending. November 4 qualification, including Keep mmap as default. Rebuild indexes after main’s earlier epserde format migration; validate Linux I/O capability, aggregate per-process cache budgets and representative performance before enabling explicit backends or claiming speedups.
|
96a6538 to
2643ad7
Compare
2643ad7 to
5fd6218
Compare
5fd6218 to
c1a04a3
Compare
Summary
Port DiskGraph #424 from pinned source
f84d30cf3b9a31884c46b3b71c19d233c80fbcc3, adding optional buffered/direct I/O, bounded caching and prefetch planning. Preserve mmap defaults and Engine's existing seeded neighborhoods by omitting the proposal's Floyd sampler replacement. Retain the reproduced cancellation, fork ownership, automatic fusion and profiler fixes.The upstream branch contains one SSH-signed, GitHub-verified commit,
c1a04a305f569cf4fc6a1284e054b9c4277f3625, directly onmain58890141ae0b7d77524ea5562039ef48c7979249. Its 80-path port retains stable patch ID736e39971c9dba458f7c186f2fb5b363c0b60d95; rebasing preserved the native DiskGraph tree. Portable checksums, BigQuery eligibility and vendor-header prerequisites are excluded; this PR does not depend on #196, #198 or #197.The final main refresh changed README/Databricks guidance, assets and their tests. Native and production fit/predict/sampling paths are unchanged. The newly added README equality test passed, as did its flake8/isort checks.
Verification and remaining gates
The following results were recorded for
2643ad77onf9c5ca88, before this rebase:Integration qualification against
329e2ef5completed 83 tests at75ca0e2f: 65 benchmark-harness checks, five temporal-link candidate cases, eight fitted-scalar/plan cases and five prediction-anchor/materialization cases. The temporal-link cases passed outside the sandbox with working DataLoader IPC. These qualify that integration checkout; they do not establish current full CI/platform qualification of this PR head.Completed end-to-end benchmark
The benchmark report records 90 successful fresh trials at
75ca0e2fd6797827feda61d637b59b75e2d6f678: three tasks × three backends × two memory regimes × five balanced repetitions. That integration candidate shares the core I/O port withc1a04a30, adding read-only native I/O diagnostics and optional TensorTable ingest controls for matched work, plus the benchmark harness. It is not the exact PR-head binary.Median public fit-to-first-prediction time, seconds:
Measurements used CPU ARM Linux, workers 0, Torch threads 1, Rayon/native threads 4 and the standalone loader. Cgroup limits were 64GiB resident or 4GiB constrained, including children and kernel page cache, with swap disabled (MemorySwapMax=0). Native cache budgets were 16GiB resident; constrained budgets were 2GiB for classification/regression and 1GiB for link prediction. Resident means OS page cache warm and process-native cache cold. Every constrained trial demonstrated actual training physical reads and reclaim or native-cache turnover. All 90 trials preserved logical work, predictions and task layouts across backends/regimes; repeat and reload checks passed without OOMs.
Five-pair percentile-bootstrap intervals remain exploratory. Buffered's resident link-prediction E2E speedup interval 0.804–1.003× includes parity; its median alone does not establish a slowdown. Other resident regressions remain, while constrained E2E gains were approximately 1.62–5.42×. These are controlled generated-graph CPU workloads, not GPU, production-worker or full-product-default qualification.
The earlier native findings retain their recorded revision scope; rebasing preserved the core native source. Local Rust was 1.96.1, versus the repository's pinned 1.99.1. Current full CI/platform and Windows readiness remain unqualified.
Keep mmap as default. Explicit backends require verified Linux I/O support and a cache budget that accounts for every worker process. Existing indexes require rebuilding after main's earlier epserde format migration.
Physical IOPS follow-up
The instrumented IOPS report records a second 90-trial matrix, with five repetitions per configuration. It reports completed NVMe block read/write/total requests per second and completed native Read/Readv SQEs per second for training and fit through first prediction. Native mmap request counts are unavailable. All 90 trials preserved original work and predictions; all 45 constrained trials demonstrated pressure, and all 180 training/E2E read-byte totals matched both process and BIO counters.
These are instrumented observations, separate from the original untraced latency results above. Short public controls (two pairs per backend) passed their E2E overhead thresholds, while peak-rate synthetic Direct stress showed 17.5% observer overhead and retained a HOLD qualification. The report preserves both results without claiming universal low overhead. The frozen measurement source was
ac7778cd; the installed native build remains75ca0e2f, sharing the core port with this PR rather than being its exact head binary.The portable archive passed full replay and relocated replay without historical files, DiskGraph imports, git or privileged access. All 15 raw-data corruption cases were rejected. The benchmark branch passed 156 benchmark tests, flake8/isort, 36 documentation tests, documentation/catalog checks and license checks. It remains separate from this single-commit core PR.
Historical investigation and revision scope · Maintained change map.