Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
ddf51a5
perf(svar2): rebalance sharded VCF workers
bschilder Jul 27, 2026
6bba41f
test(svar2): benchmark harness for the sharded-VCF reader budget
d-laub Jul 28, 2026
87b8e34
docs(svar2): design spec for the conversion scale-bench harness
d-laub Jul 28, 2026
4dc06fb
docs(svar2): implementation plan for the scale-bench harness
d-laub Jul 28, 2026
6630abf
test(svar2): shared record schema for the scale-bench harness
d-laub Jul 28, 2026
fa635e4
test(svar2): scaling-law fitter and hypothesis verdict
d-laub Jul 28, 2026
4142dde
test(svar2): scaling-law fitter and hypothesis verdict
d-laub Jul 28, 2026
b5acd8f
fix(svar2): declare truthful contig length when stride floors to 1
d-laub Jul 28, 2026
1f98aad
fix(svar2): tighten declared contig length to the true position bound
d-laub Jul 28, 2026
ff19537
feat(svar2): trace-level gauges for reorder backlog and shard skew
d-laub Jul 28, 2026
a896d8b
test(svar2): instrumented single-run conversion probe
d-laub Jul 28, 2026
7518f7d
test(svar2): resumable sweep driver with oracle enforcement
d-laub Jul 28, 2026
81a20f6
test(svar2): scale sweep plans, Slurm driver, and harness README
d-laub Jul 28, 2026
df4a1f0
fix(svar2): scope sweep digest oracle to within-corpus, check per point
d-laub Jul 28, 2026
06a19e0
fix(svar2): repo-root cd in sweep sbatch, dedupe c=1 contig point, RE…
d-laub Jul 28, 2026
f3b4060
test(svar2): fast regression tier with committed baselines
d-laub Jul 28, 2026
64987f9
fix(svar2): key regression baselines by worker count, record on a ded…
d-laub Jul 28, 2026
10dc8af
fix(svar2): refuse to record failed runs or compare baselines across …
d-laub Jul 28, 2026
03c48b9
fix(svar2): make the scale-bench harness able to answer its own question
d-laub Jul 29, 2026
789a5fb
fix(svar2): gate H3 on byte materiality and stop the RAM law being po…
d-laub Jul 29, 2026
7437fbe
fix(svar2): close the remaining scale-bench review findings
d-laub Jul 29, 2026
8a1a09d
fix(svar2): bound corpus-generation memory without costing determinism
d-laub Jul 29, 2026
4ff97fb
fix(svar2): fit the V-law in the regime it is used to predict
d-laub Jul 30, 2026
f17dcac
perf(svar2): resolve VCF sample columns once per contig, not per shard
d-laub Aug 3, 2026
b146fac
fix(svar2): give the RAM law the cohort term peak RSS actually has
d-laub Aug 3, 2026
a22a2b3
fix(svar2): stop scoring the model on an axis it never fitted
d-laub Aug 3, 2026
407a56c
fix(svar2): measure the cohort exponent instead of letting the design…
d-laub Aug 3, 2026
e33ebe3
docs(svar2): spec tuned load balancing for conversion
d-laub Aug 3, 2026
17499fe
docs(svar2): implementation plan for tuned load balancing
d-laub Aug 3, 2026
6af4623
feat(svar2): detect the conversion memory budget from the cgroup
d-laub Aug 3, 2026
d1fefb7
feat(svar2): plan contig concurrency under core and memory constraints
d-laub Aug 3, 2026
be7de72
test(svar2): assert whole ShardedPlan and fix a hand-computed comment
d-laub Aug 3, 2026
af1d861
feat(svar2): estimate per-contig conversion cost from index metadata
d-laub Aug 3, 2026
e0fb3be
feat(svar2): derive reader count from a read/exec rate ratio
d-laub Aug 3, 2026
37896ad
feat(svar2): probe read and exec rates on two chunks
d-laub Aug 3, 2026
7054ff1
fix(svar2): resolve contig ids in the index's own space
d-laub Aug 3, 2026
2b10842
fix(svar2): time the reference stage in the reader probe
d-laub Aug 3, 2026
712fc71
fix(svar2): skip the tabix probe for BCF input
d-laub Aug 3, 2026
58660f0
feat(svar2): plan and order contigs before dispatch
d-laub Aug 3, 2026
b546a78
fix(svar2): degrade gracefully when memory-budget detection fails
d-laub Aug 4, 2026
3e52a42
test(svar2): gate scheduling changes on output-byte invariance
d-laub Aug 4, 2026
6919c7b
docs(svar2): document max_mem/tune and sweep the concurrency axis
d-laub Aug 4, 2026
d4021c0
test(svar2): exercise multi-chunk contigs and the long-allele bank
d-laub Aug 4, 2026
8a2d271
fix(svar2): dispatch and load the concurrency sweep axis
d-laub Aug 4, 2026
8392637
fix(svar2): keep tuned reader-worker probes and nominal chunk-byte es…
d-laub Aug 4, 2026
0bb51e5
fix(svar2): make the from_vcf/from_vcf_list max_mem quantity mismatch…
d-laub Aug 4, 2026
90cd43f
fix(svar2): resolve memory budget from the process's own cgroup, not …
d-laub Aug 4, 2026
0ca6104
test(svar2): assert the long-allele bank is non-empty in the schedule…
d-laub Aug 4, 2026
27b6277
fix(bench): reuse the derived chunk size instead of a hardcoded liter…
d-laub Aug 4, 2026
403e1d8
fix(svar2): restore cgroup-vs-meminfo precedence coverage and fix a w…
d-laub Aug 4, 2026
e5f2b34
feat(svar2)!: unify from_vcf_list's max_mem into a whole-process budget
d-laub Aug 4, 2026
7fbdc49
fix(svar2): address review of the from_vcf_list max_mem unification
d-laub Aug 4, 2026
f50dc3b
docs(svar2): correct a stale planner reference in the conversion pipe…
d-laub Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@ memray_flamegraphs/

# dhat heap profiles emitted by `--features dhat-heap` benches into CWD
dhat-heap.json

# Slurm logs from scripts/bench_svar2/*.sbatch (#SBATCH --output=%x_%j.log
# resolves against the submission directory, which is the repo root).
svar2-*.log
8 changes: 5 additions & 3 deletions docs/roadmap/svar-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -401,9 +401,11 @@ Legend: `[ ]` not started · `[~]` in progress · `[x]` done
so Approach B was not built. Public API is unchanged — sharding is entirely
internal to the existing `threads=` budget. Byte-identical output vs. serial
conversion is gated by a store-hash oracle at every thread count for both
backends. **VCF** scales ~3.9× at 32 cores (chr21, 1176s → 300s); sub-contig
sharding only engages once the thread budget clears HTSlib decode-thread
allocation (~15 cores). **PGEN** sharding is byte-identical but not faster —
backends. **VCF** scales ~3.9× at 32 cores (chr21, 1176s → 300s). Its
backend-specific `reader_workers` budget treats indexed shard readers as a
replacement for the monolithic reader's HTSlib pool and disables per-shard
HTSlib background pools, so medium-sized single-contig runs no longer strand
cores in an inactive reservation. **PGEN** sharding is byte-identical but not faster —
`pgenlib`'s genotype decode holds the CPython GIL, so shard readers serialize
and sharding is net slightly slower than serial (memory
`pgenlib-holds-gil-sharded-reads`); PGEN is intentionally not over-decomposed.
Expand Down
15 changes: 8 additions & 7 deletions docs/source/svar.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,14 @@ regions per contig raise — use `pos`/`record`, or convert separately.

Single-file `SparseVar2.from_vcf` shards **within a contig**, driven by the same
`threads=` budget shown above — no new argument. Sub-contig sharding only kicks
in for the default whole-contig (`regions_overlap="pos"`) path: the thread budget
first spends added cores on HTSlib decode threads for the single reader, so the
sub-contig shard budget stays at 1 (an un-sharded reader) until the core count
clears that stage (~15 cores on the benchmarked hardware). Output is
**byte-identical** to serial conversion at every thread count — sharding is gated
by a store-hash oracle and does not reintroduce missingness (a `./.` haplotype
and a hom-ref haplotype remain indistinguishable in SVAR2 either way).
in for the default whole-contig (`regions_overlap="pos"`) path. The planner uses
a backend-specific reader budget: indexed shard readers decompress inline and
replace, rather than run alongside, the monolithic reader's HTSlib pool. This
lets medium-sized single-contig runs use their available cores without
oversubscribing multi-contig runs. Output is **byte-identical** to serial
conversion at every thread count — sharding is gated by a store-hash oracle and
does not reintroduce missingness (a `./.` haplotype and a hom-ref haplotype
remain indistinguishable in SVAR2 either way).

Sub-contig sharding is restricted to `regions_overlap="pos"` (which the
whole-contig default uses). `"record"` and `"variant"` conversions run on a
Expand Down
Loading
Loading