WIP: Scale FLT IxVM execution with native setup, compact records, and incremental refinement - #621
Open
johnchandlerburnham wants to merge 3 commits into
Open
WIP: Scale FLT IxVM execution with native setup, compact records, and incremental refinement#621johnchandlerburnham wants to merge 3 commits into
johnchandlerburnham wants to merge 3 commits into
Conversation
Keep mmap loading, full constant validation, ownership assignment and audit reporting in Rust for the ordinary whole-partition ix check path. Fuse the coverage and ownership scans into a deterministic parallel pass and share the existing shard executor with the Lean refinement driver. Preserve advanced-option fallbacks, sequence file access through IO, and harden manifest framing checks. Add native/bytecode executor, claim and memory-estimate parity tests plus malformed-input and CLI dispatch tests. Full FLT setup measured 42.1s versus approximately 13m38s for the baseline; this is a setup-only comparison, not a completed IxVM execution result. Validated with the Rust kernel and FFI suites, Lean integration tests, lake build ix IxTests, and strict Clippy.
Member
Author
|
!benchmark fresh |
Contributor
❌ benchmark run failed |
Member
Author
|
!benchmark fresh |
Contributor
|
| constant | execute-time (main) | execute-time (PR) | Δ% | prove-time (main) | prove-time (PR) | Δ% | throughput (const/s) (main) | throughput (const/s) (PR) | Δ% | peak-ram (main) | peak-ram (PR) | Δ% | proof-size (main) | proof-size (PR) | Δ% | verify-time (main) | verify-time (PR) | Δ% | fft-cost (main) | fft-cost (PR) | Δ% |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ByteArray.utf8DecodeChar?_utf8EncodeChar_append |
9.047 s | 13.037 s | +44.1% (1.44× slower) |
36.759 s | 42.156 s | +14.7% (1.15× slower) |
75.490 | 65.830 | -12.8% (1.15× slower) |
73.49 GiB | 74.55 GiB | +1.5% | 5.06 MiB | 5.07 MiB | +0.2% | 28.3 ms | 32.2 ms | +14.0% (1.14× slower) |
137.19B | 140.31B | +2.3% |
Char.ofOrdinal_le_of_le |
7.063 s | 9.995 s | +41.5% (1.42× slower) |
31.496 s | 35.039 s | +11.2% (1.11× slower) |
87.720 | 78.860 | -10.1% (1.11× slower) |
66.16 GiB | 66.20 GiB | +0.1% | 5.05 MiB | 5.07 MiB | +0.5% | 28.2 ms | 30.3 ms | +7.6% (1.08× slower) |
105.30B | 107.10B | +1.7% |
Array.extract_append |
6.501 s | 9.670 s | +48.7% (1.49× slower) |
27.171 s | 34.886 s | +28.4% (1.28× slower) |
59.110 | 46.040 | -22.1% (1.28× slower) |
53.81 GiB | 63.85 GiB | +18.7% (1.19× larger) |
4.92 MiB | 4.97 MiB | +1.1% | 29.3 ms | 30.8 ms | +5.2% (1.05× slower) |
99.03B | 103.13B | +4.1% |
Std.HashMap |
4.117 s | 5.661 s | +37.5% (1.38× slower) |
17.928 s | 19.556 s | +9.1% (1.09× slower) |
113.900 | 104.420 | -8.3% (1.09× slower) |
37.63 GiB | 37.70 GiB | +0.2% | 4.97 MiB | 5.06 MiB | +1.8% | 29.1 ms | 28.6 ms | -1.6% | 63.51B | 64.47B | +1.5% |
_private.Init.Data.Range.Polymorphic.SInt.0.Int64.instRxcHasSize_eq |
3.726 s | 5.278 s | +41.7% (1.42× slower) |
16.597 s | 18.746 s | +12.9% (1.13× slower) |
112.490 | 99.600 | -11.5% (1.13× slower) |
35.45 GiB | 36.10 GiB | +1.8% | 4.95 MiB | 5.03 MiB | +1.7% | 28.1 ms | 29.4 ms | +4.6% |
57.01B | 58.23B | +2.1% |
String.append |
433.3 ms | 493.3 ms | +13.8% (1.14× slower) |
1.779 s | 1.892 s | +6.3% (1.06× slower) |
183.800 | 172.870 | -5.9% (1.06× slower) |
5.02 GiB | 4.57 GiB | -9.0% (1.10× smaller) 🟢 | 4.70 MiB | 4.72 MiB | +0.4% | 27.0 ms | 26.7 ms | -1.3% | 3.51B | 3.52B | +0.3% |
Nat.add_comm |
266.5 ms | 261.2 ms | -2.0% | 736.3 ms | 760.2 ms | +3.2% |
62.470 | 60.510 | -3.1% |
3.98 GiB | 3.53 GiB | -11.3% (1.13× smaller) 🟢 | 4.50 MiB | 4.50 MiB | +0.1% | 25.0 ms | 26.2 ms | +4.7% |
321.32M | 321.22M | -0.0% |
FRI verifier on FRI (7 constants)
| constant | execute-time (main) | execute-time (PR) | Δ% | prove-time (main) | prove-time (PR) | Δ% | throughput (const/s) (main) | throughput (const/s) (PR) | Δ% | peak-ram (main) | peak-ram (PR) | Δ% | proof-size (main) | proof-size (PR) | Δ% | verify-time (main) | verify-time (PR) | Δ% | fft-cost (main) | fft-cost (PR) | Δ% |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ByteArray.utf8DecodeChar?_utf8EncodeChar_append |
2.411 s | 3.450 s | +43.1% (1.43× slower) |
21.470 s | 22.920 s | +6.8% (1.07× slower) |
129.250 | 121.070 | -6.3% (1.07× slower) |
56.05 GiB | 54.51 GiB | -2.8% | 2.21 MiB | 4.00 MiB | +81.1% (1.81× larger) |
13.0 ms | 22.1 ms | +70.3% (1.70× slower) |
108.59B | 106.79B | -1.7% |
Char.ofOrdinal_le_of_le |
2.383 s | 3.435 s | +44.2% (1.44× slower) |
21.577 s | 22.937 s | +6.3% (1.06× slower) |
128.050 | 120.460 | -5.9% (1.06× slower) |
56.01 GiB | 55.39 GiB | -1.1% | 2.21 MiB | 4.01 MiB | +81.0% (1.81× larger) |
13.5 ms | 22.7 ms | +68.0% (1.68× slower) |
107.48B | 107.21B | -0.3% |
Array.extract_append |
2.352 s | 3.449 s | +46.7% (1.47× slower) |
20.717 s | 22.554 s | +8.9% (1.09× slower) |
77.520 | 71.210 | -8.1% (1.09× slower) |
52.94 GiB | 53.48 GiB | +1.0% | 2.21 MiB | 4.01 MiB | +81.0% (1.81× larger) |
12.6 ms | 22.9 ms | +81.9% (1.82× slower) |
104.92B | 105.52B | +0.6% |
Std.HashMap |
2.389 s | 3.371 s | +41.1% (1.41× slower) |
21.272 s | 21.681 s | +1.9% | 95.990 | 94.190 | -1.9% | 54.43 GiB | 52.13 GiB | -4.2% 🟢 | 2.22 MiB | 4.00 MiB | +80.4% (1.80× larger) |
12.6 ms | 22.0 ms | +74.0% (1.74× slower) |
105.80B | 104.65B | -1.1% |
_private.Init.Data.Range.Polymorphic.SInt.0.Int64.instRxcHasSize_eq |
2.375 s | 3.348 s | +41.0% (1.41× slower) |
20.656 s | 22.241 s | +7.7% (1.08× slower) |
90.380 | 83.940 | -7.1% (1.08× slower) |
52.84 GiB | 52.07 GiB | -1.5% | 2.21 MiB | 4.01 MiB | +81.7% (1.82× larger) |
12.6 ms | 23.2 ms | +84.5% (1.84× slower) |
105.31B | 104.47B | -0.8% |
String.append |
2.216 s | 3.141 s | +41.8% (1.42× slower) |
19.855 s | 21.253 s | +7.0% (1.07× slower) |
16.470 | 15.390 | -6.6% (1.07× slower) |
50.66 GiB | 49.96 GiB | -1.4% | 2.21 MiB | 4.00 MiB | +81.1% (1.81× larger) |
13.0 ms | 23.0 ms | +77.0% (1.77× slower) |
96.36B | 95.07B | -1.3% |
Nat.add_comm |
2.060 s | 2.912 s | +41.3% (1.41× slower) |
19.867 s | 21.075 s | +6.1% (1.06× slower) |
2.320 | 2.180 | -6.0% (1.06× slower) |
50.56 GiB | 49.91 GiB | -1.3% | 2.21 MiB | 4.01 MiB | +81.7% (1.82× larger) |
12.4 ms | 24.0 ms | +93.7% (1.94× slower) |
89.07B | 87.78B | -1.4% |
Aggregate flat join (7 constants)
| constant | execute-time (main) | execute-time (PR) | Δ% | prove-time (main) | prove-time (PR) | Δ% | peak-ram (main) | peak-ram (PR) | Δ% | proof-size (main) | proof-size (PR) | Δ% | verify-time (main) | verify-time (PR) | Δ% | fft-cost (main) | fft-cost (PR) | Δ% |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ByteArray.utf8DecodeChar?_utf8EncodeChar_append |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Char.ofOrdinal_le_of_le |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Array.extract_append |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Std.HashMap |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
_private.Init.Data.Range.Polymorphic.SInt.0.Int64.instRxcHasSize_eq |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
String.append |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Nat.add_comm |
n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a |
Pipeline total (7 constants)
| constant | total-time (main) | total-time (PR) | Δ% | pipeline-throughput (const/s) (main) | pipeline-throughput (const/s) (PR) | Δ% | pipeline-peak-ram (main) | pipeline-peak-ram (PR) | Δ% |
|---|---|---|---|---|---|---|---|---|---|
ByteArray.utf8DecodeChar?_utf8EncodeChar_append |
58.229 s | 1m 5.1s | +11.8% (1.12× slower) |
47.660 | 42.640 | -10.5% (1.12× slower) |
73.49 GiB | 74.55 GiB | +1.5% |
Char.ofOrdinal_le_of_le |
53.073 s | 57.976 s | +9.2% (1.09× slower) |
52.060 | 47.660 | -8.5% (1.09× slower) |
66.16 GiB | 66.20 GiB | +0.1% |
Array.extract_append |
47.888 s | 57.440 s | +19.9% (1.20× slower) |
33.540 | 27.960 | -16.6% (1.20× slower) |
53.81 GiB | 63.85 GiB | +18.7% (1.19× larger) |
Std.HashMap |
39.200 s | 41.236 s | +5.2% (1.05× slower) |
52.090 | 49.520 | -4.9% (1.05× slower) |
54.43 GiB | 52.13 GiB | -4.2% 🟢 |
_private.Init.Data.Range.Polymorphic.SInt.0.Int64.instRxcHasSize_eq |
37.253 s | 40.987 s | +10.0% (1.10× slower) |
50.120 | 45.550 | -9.1% (1.10× slower) |
52.84 GiB | 52.07 GiB | -1.5% |
String.append |
21.634 s | 23.144 s | +7.0% (1.07× slower) |
15.120 | 14.130 | -6.5% (1.07× slower) |
50.66 GiB | 49.96 GiB | -1.4% |
Nat.add_comm |
20.603 s | 21.835 s | +6.0% (1.06× slower) |
2.230 | 2.110 | -5.4% (1.06× slower) |
50.56 GiB | 49.91 GiB | -1.3% |
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.
Make whole-environment IxVM execution practical to iterate on: move expensive
partition setup into Rust, reduce retained execution records and arithmetic
work, and refine oversized shards without waiting for unrelated shards to
finish. Add explicit, bounded resource handling and a reproducible focused
regression loop for the previously problematic FLT constants.
This PR concerns IxVM execution, not the native Rust kernel's
check-rsperformance and not a completed STARK proof of FLT. The native kernel changes
already landed in #617; this branch replays only the two subsequent IxVM commits
onto main, which also includes function grouping from #619.
The focused FLT cases, ordinary/Mathlib closure controls, and mixed/forced-split
rollout gates pass on the pre-rebase implementation. A full execution of all
1,330,204 environment constants in 4,100 source shards is running, not yet
claimed successful. That run uses a frozen pre-rebase binary; it cannot validate
the later integration with main's function grouping.
Motivation
Earlier full attempts exposed several distinct bottlenecks:
environment before execution could begin.
exhaustion. Admission can stop new work, but cannot reclaim an active
record that continues to grow.
keys distinguished unused trailing arguments; query keys and counters
often occupied wider storage than their values required.
peer, while repeated full-shard tests delayed reaching known hard constants.
The changes address these separately. Execution storage, process RSS, cgroup
charges, predicted prover RAM and FFT cost remain distinct measurements.
Changes
Native partition setup and independent setup parallelism
.ixemmap, manifest, decoded ownership and auditin Rust. Fuse complete constant validation and ownership assignment into
one parallel pass; only summary counts/timing cross the Lean FFI.
including otherwise unreferenced constants. Preserve manifest framing,
dense IDs, tree coverage and exactly-once block ownership checks.
ownership and first-error ordering deterministic across worker counts.
manifest is still validated for a selection; skipped leaves are reported
unchanged, never certified by the subset test.independently of
--jobsandRAYON_NUM_THREADS. Validate the positiveIX_AIUR_SETUP_THREADSoverride before loading the large input and dropthe setup pool before creating the execution pool.
including destination-prover-budget refinement and refined-manifest output.
The path-based FFI remains an
IOoperation, not a pure cached file read.Memory-aware admission and early execution limits
retain reserves, outstanding reservations and a recent-growth forecast.
Ramp concurrency using observed completions, not just elapsed time.
grows. Account for segment/bucket allocation, promotion and simultaneous
old/new storage during widening or rehash. Drop storage before releasing
its credits; failed growth is atomic for the affected query map.
rejection. Split local-limit failures only between whole blocks. Drain peers
and retry an unchanged claim after shared-budget pressure, at most twice.
execution is neither a passed check nor a measured/proven record.
spikes still immediately pause admission and reduce concurrency, but only
sustained pressure, swap growth or insufficient headroom restarts the long
recovery timer. Recurring brief global stalls cannot indefinitely reset it.
recovery delay and next reservation. Malformed telemetry fails closed;
optional unavailable PSI is handled separately. An idle admission failure
has a bounded deadline and cannot become partial success.
Accounted-record limits are not hard RSS bounds. Witness construction,
stacks, bigint scratch, allocation overhead and file mappings still require
an independently enforced OS memory cap. This does not suspend active workers,
spill records, or grant a growing shard more memory dynamically.
Completion-driven refinement
coordinator outside Rayon. Children become ready after parent cleanup,
while unrelated attempts may remain active.
all generations. Active tasks plus unconsumed completions are bounded by
the pool width; Rayon workers do not wait for admission permits.
construction through recursive splits. Drain launched work on errors and
keep retry/termination limits explicit.
attempts. A split parent settles only when all descendants finish; settlement
may include failure, so the final report remains the success criterion.
scheduler: "completion-driven",executedattempts,max_generation, deterministic final labels, andwaves: null. Do notfabricate a measured parent peak from its children's records.
Compact query records and reusable hashes
widening only as values require. Reconstruct memory-query outputs from
insertion indices after checking that invariant; retain function outputs.
hint promotion, logical witnesses and field semantics. Hashes accelerate
lookup; they never replace an equality check.
recursive calls/returns and memory insertion. Never retain a borrowed
hash-table bucket across recursive growth or remove a required re-probe.
Fallible updates propagate through generated and interpreted execution,
including memo hits and promotion. Field wrap does not truncate or saturate.
IX_AIUR_COMPACT_MULTIPLICITIESoff by default. Add bounded-output,opt-in query/multiplicity diagnostics to measure tradeoffs, not an unbounded
per-query history in ordinary execution.
Arithmetic and substitution work reduction
retaining the checked range, carry and reconstruction relations.
its preconditions are established. Fuse later product rows into addition
without allocating separate product and shifted intermediate lists.
than testing only the final mathematical integer. Keep multiplication and
addition carries distinct and retain a useful empty-accumulator fast path.
the original substitution-window length and binder depth so higher variables
still shift correctly. Sparse removal of interior holes is not implemented.
equivalences. Add independent Lean models/lemmas, differential tests against
the previous algorithms, invalid-input cases and small prove/verify fixtures.
rather than bounds/conversion panics. Preserve the distinction between
unconstrained hint evaluation and the relations that subsequently check it.
Arithmetic and substitution changes can alter logical query counts and FFT
costs; they are not merely invisible storage transformations. Cost pins are
reviewed explicitly, including fixtures where an optimization is a tradeoff.
The Lean lemmas do not amount to a full proof of the Aiur compiler or kernel.
Focused regressions and integration with current main
bench-ixvm-focushelper and documented reproducible commands.Isolate previously failing singleton blocks from a completed report while
retaining the rest of a complete, disjoint manifest and its aggregation tree.
sidecar. Reuse the same inputs across frozen binaries; this is not cached
successful checking of skipped declarations.
per-member metadata and only member/query indices for selected rows; preserve
member order, selector offsets and the original function-channel identities.
functions' query counts before hypothetical subdivision, not index one
function by circuit number. Counts remain conservative about zero-multiplicity
hint rows; exact active-row accounting is still a separate follow-up.
grouped circuit with nested hint promotion and mixed-width values. Preserve
surviving groups rather than disabling grouping to pass tests. Remove the
obsolete
list_snoc.U8_8member, which linear limb construction eliminated;newly introduced functions keep their default singleton circuits.
diffs include function-index renumbering and error propagation; the generated
files are not hand-maintained alternative implementations.
Validation and measurements
Completed pre-rebase validation
four opt-in tests ignored. FFI: 67 passed, two external/live tests ignored in
each configuration; strict Clippy and formatting passed.
1/2/64 workers, nested Rayon work, early children, pressure retries, panic/error
cleanup, unknown telemetry, malformed outcomes and starvation/idle failures.
lake build ixandlake build IxTestspassed; all three generatedtargets matched
ix codegen --check.IxVM assertions including 243 generated/interpreted parity checks, and native
partition tests with compact counters both off and on. Recursive verifier,
aggregation, small honest proofs and tampering rejection were also exercised.
extracted closures passed with identical claims, ownership and estimated
proving cost. These are closure controls, not full Mathlib IxVM execution.
Measured improvements and limits
All timings below are historical pre-function-grouping measurements using
matched selections and preserved binaries. They are not measurements of the
rebased branch or a statistically established full-corpus speedup.
the Lean control's timestamps, combining native decoding, parallelism and
removal of duplicate work. Cache state/concurrent activity differed; this
is not a 19x whole-execution claim. Separately, independent setup workers
reduced the focused serial coverage phase from 161.234s to about 21–23s.
complete coverage/ownership validation on eight setup threads.
the four hard singleton pairs. Execution is broadly flat and one case is
slower. Small/Core and Mathlib timing controls are noisy, with no universal
throughput gain; compact multiplicities remain opt-in.
projection has mixed circuit-cost effects: the initial production fixture
sum increased about 0.13%, despite substantial sharing wins in the targeted
fixture. Fused multiplication later improved 13 of 81 production pins with
the other 68 unchanged; repeated-input synthetic cases can still regress.
ownership counts and predicted proof peaks, not just pass counts. Its real
trace shows a split child starting while an original peer still executes.
GNU-time peak RSS was 39.38 versus 39.13 GiB; both runs had no swap or major
faults. The 8 GiB limit is a test trigger, not a production recommendation.
Completed rebase validation
rebasing only the two IxVM commits onto
eea8f5d8.fixtures when merging the FFT-pin lists. Measured and reviewed the combined
grouped system before updating all 81 exact constant pins and the shard pin.
including grouped compact/full proof parity, expanded exact trace comparisons
and the group-member row-count regression. FFI tests pass in both feature
configurations (67, two ignored); strict combined Clippy and formatting pass.
Review also found main's function/circuit-index mismatch in prover estimates;
the fix sums group members and has a dedicated regression. Final reruns cover
both corrections; the earlier successful unit run did not establish them.
targets match the emitter. Native full/selected partition integration passes
with outer compact counters off and on. Grouped/ungrouped small proofs,
arithmetic/substitution and recursive/aggregation regressions pass: 7,571
assertion lines in the combined linked log, with no failed assertions.
FFT pins. Against main's 79 common constants, 43 improve and 36 regress;
summed modeled FFT cost changes from 84,477,374,813 to 84,486,051,280
(+0.0103%). Largest regression:
nat_lor_lit, +0.430%;nat_pow_bigimproves25.19%. The shard fixture changes from 6,946,001,069 to 7,008,644,066
(+0.902%). These reviewed model-cost tradeoffs are not wall-time measurements.
exactly. It was intended as an ungrouped control, but
AiurTestEnv.buildexplicitly applies its groups and does not use the CLI's environment switch;
it is therefore a repeated grouped run, not evidence of ungrouped/pre-rebase
parity. No harness behavior was weakened to make that comparison pass.
assertion lines, zero assertion failures, exit status zero. This includes
all 81 constant cost pins, the shard cost pin, and generated/interpreted
executor parity. The final validation also rebuilt
IxTestssuccessfullyand reconfirmed the parallel FFI tests (
final-validation.log).d2d58abd, not to the rebase.Function grouping changes circuit layouts, verifying keys and estimated
proving cost even where execution semantics are unchanged.
Direct source comparison confirms that all three generated executors, the
arithmetic/substitution kernel, execution core and native scheduler are
unchanged by this rebase; that does not substitute for grouped witness and
estimate validation.
Full FLT run — in progress
4,100 original shards are selected, including the four isolated heavy cases.
limit, independent 320 GiB/no-swap supervisor ceiling and a 24-hour deadline.
Compact counters and profiling are off. Admission determines actual concurrency.
STARK generation. Final success requires every original shard's final
descendants to pass; a resource abort or supervisor exit is not success.
pending. Do not publish this as completed full-FLT execution.
Reproduction
Use the pinned development environment and build the CLI/test executable
sequentially, since their Rust archive feature sets differ:
For full execution, use a complete manifest and fresh report paths. Run this
inside an independently memory/time-bounded supervisor; the environment variable
below limits accounted records, not the entire process:
IX_AIUR_SETUP_THREADS=8 \ IX_AIUR_EXEC_MAX_BYTES=137438953472 \ IX_AIUR_COMPACT_MULTIPLICITIES=0 \ RAYON_NUM_THREADS=64 LEAN_NUM_THREADS=1 \ .lake/build/bin/ix check --ixe ENV.ixe --ixes FULL.ixes \ --jobs 64 --keep-going --report report.json --json results.jsonSee
Benchmarks/IxVM/README.mdfor focused manifests, diagnostic modes,resource-limit semantics and matched compact/full control procedures.
Review boundaries and follow-ups
crates/ffi/src/aiur/check*,resource policy in
admission*,memory*andprotocol.rs, and storage/errorpropagation in
crates/aiur/src/{querymap*,execute*}.Ix/IxVM/Kernel/andTests/Ix/IxVM/, then check generated-source consistency.tests are part of the acceptance criteria, not just elapsed-time comparisons.
helper inlining, bulk/tail memory tiers, elastic grants, checkpoint/spill,
exact active-function-row peak estimates or memory-bounded proof construction.
aggregate proof verification remain separate work, regardless of its outcome.