Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
eb5bb19
fix(zisk): drop --max-witness-stored flag, use Zisk's default cap
samuelburnham Jun 30, 2026
0e4097f
feat(ci): CSV-driven !benchmark + Zisk/SP1/native benchmarks
samuelburnham Jun 30, 2026
22fb53d
test(ci): trigger bench-pr.yml on pull_request (TEMPORARY)
samuelburnham Jun 30, 2026
6a98ca7
feat(ci): default to ~11 primary constants
samuelburnham Jun 30, 2026
edb8312
feat(ci): native backend on !benchmark + bencher parity/cleanup
samuelburnham Jun 30, 2026
d437eab
feat(ci): Aiur proves all primaries that fit 128GB; native checks pri…
samuelburnham Jun 30, 2026
f411387
feat(ci): texray per-phase drill-down + child-process-aware peak RAM
samuelburnham Jul 2, 2026
ec1a790
refactor(ci): rename backend native→ooc; suffix bencher workloads wit…
samuelburnham Jul 2, 2026
5bf7453
refactor(ci): bencher-first !benchmark, unified --consts CLI, RAM har…
samuelburnham Jul 2, 2026
b195a58
feat(ci): compile as a !benchmark backend; full-closure zkVM parity; …
samuelburnham Jul 2, 2026
c586023
feat(ci): annotate compare table cells with ratio (1.5x faster/slower)
samuelburnham Jul 2, 2026
5469ca5
fix(ci): review fixes — full-closure check-rs, OOM/polarity/caching, …
samuelburnham Jul 2, 2026
c6b38dd
ci: convert riscv-bench into a zkVM host build+test gate (no proving …
samuelburnham Jul 3, 2026
c11a017
fix(ci): pre-build proofman-starks-lib-c to serialize the shared make
samuelburnham Jul 3, 2026
d8d42db
fix(ci): resolve run.sh tool binaries lazily at their use sites
samuelburnham Jul 3, 2026
6a87e82
fix(ci): classify alloc-abort proves as OOM, sweep Zisk shm, fix vect…
samuelburnham Jul 3, 2026
62ab642
ci: move the zkVM host build gate into ci.yml; comment out the sp1 be…
samuelburnham Jul 3, 2026
8c6abc0
fix(aiur): populate trace rows for UnconstrainedBigUintDivMod
samuelburnham Jul 3, 2026
de8a253
feat(bench): track Aiur proof-size and verify-time
samuelburnham Jul 3, 2026
90040ee
feat(ci): env-sharded zisk execute via ix profile → ix shard manifests
samuelburnham Jul 3, 2026
97fd076
feat(ci): fill partial bencher misses from a targeted base run
samuelburnham Jul 3, 2026
c004e18
feat(ci): PR side cuts its own zisk shard manifest
samuelburnham Jul 3, 2026
99f1842
feat(ci): per-shard execute-time and peak RAM in the zisk env row
samuelburnham Jul 3, 2026
45d61bb
feat(ix): compile --consts seed selection + `ix shard extract` subcom…
samuelburnham Jul 3, 2026
a2d4a59
feat(ci): closure-sharded zisk execute for heavy primaries
samuelburnham Jul 3, 2026
a023d8b
feat(bench): reject typecheck failures loudly — fail fast, ❌ row, red…
samuelburnham Jul 3, 2026
98f2582
test(ci): trigger bench-main on branch pushes (TEMPORARY)
samuelburnham Jul 3, 2026
fa578a0
feat(bench): ix bench orchestrator + neutral row contract; retire run…
samuelburnham Jul 7, 2026
42207b4
test(ci): TEMPORARY triggers to exercise the bench workflows from thi…
samuelburnham Jul 7, 2026
8f19ffe
refactor(bench): drop the "neutral" vocabulary for the results format
samuelburnham Jul 7, 2026
72a4f1c
fix(ci): isolate the App token from PR-derived code in bench-pr
samuelburnham Jul 7, 2026
19a8c1a
fix(ci): passthrough-env step failed on every cell (heredoc terminator)
samuelburnham Jul 7, 2026
1d3839a
feat(bench): announce each constant before its execute/prove
samuelburnham Jul 7, 2026
2c248a4
fix(bench): don't relabel deterministic tool failures as per-constant…
samuelburnham Jul 7, 2026
ac4d54c
refactor(bench): one-line side-failure notes in the compare table
samuelburnham Jul 7, 2026
3181ffa
feat(bench): track peak RSS on the compile cell
samuelburnham Jul 7, 2026
862e07f
refactor(bench): render file-size as env-size in the compare table
samuelburnham Jul 7, 2026
7db8a17
refactor(bench): cutshards backend → `ix bench shard` subcommand
samuelburnham Jul 8, 2026
be52a77
feat(bench): execute-side throughput + surface both Aiur RAM peaks
samuelburnham Jul 8, 2026
8caae3f
refactor(bench): drop the compile mode - the compile backend runs as …
samuelburnham Jul 8, 2026
bac906e
refactor(bench): rename the prove-phase peak to prove-peak-rss
samuelburnham Jul 8, 2026
4388ee3
refactor(bench): bare peak-rss everywhere, phases separated by testbed
samuelburnham Jul 8, 2026
c27cbf7
feat(bench): aiur execute-only is local-only; CI uploads the prove run
samuelburnham Jul 8, 2026
75f7a07
feat(bench): restore the \!benchmark execute token
samuelburnham Jul 8, 2026
3946d6a
feat(bench): bench-main runs aiur execute and prove as separate cells
samuelburnham Jul 8, 2026
e82ac55
fix(ci): concise matrix job names
samuelburnham Jul 8, 2026
0da1e11
refactor(bench): aiur testbeds keep the subject word — aiur-check-{pr…
samuelburnham Jul 8, 2026
0892121
refactor(bench): drop the BENCH_TIER PR knob; render peak-rss as peak…
samuelburnham Jul 8, 2026
8fe63c3
refactor(bench): one env spelling — InitStd everywhere
samuelburnham Jul 8, 2026
e529bf2
fix(bench): satisfy clippy without allows
samuelburnham Jul 8, 2026
3458cea
feat(bench): print throughput + peak RAM on bench-typecheck's log lines
samuelburnham Jul 8, 2026
d4d96e9
refactor(bench): shared instrumentation for aiur execute metrics
samuelburnham Jul 8, 2026
63fd63d
feat(bench): one process per constant; span timings become phase:* me…
samuelburnham Jul 8, 2026
0e75c7f
feat(bench): nest each constant's phase table in its own drop-down
samuelburnham Jul 8, 2026
37c4e05
feat(bench): per-constant phase drop-downs directly under the main table
samuelburnham Jul 8, 2026
ee47235
fix(bench): verified review findings — panic strategy, gate completen…
samuelburnham Jul 8, 2026
b7b70df
chore(zisk): drop the panic-strategy comment
samuelburnham Jul 8, 2026
d284c2e
fix(ci): create-github-app-token deprecated app-id in favor of client-id
samuelburnham Jul 8, 2026
b4d9dfa
refactor(bench): registry as Lean code — bench-config.json and bench.…
samuelburnham Jul 8, 2026
d09b014
refactor(bench): local-first CLI — parse previews, comment becomes re…
samuelburnham Jul 8, 2026
c9c37d8
refactor(bench): group the CI adapters under ix bench ci
samuelburnham Jul 8, 2026
051d44c
docs(bench): full accuracy pass on the benchmarking docs
samuelburnham Jul 8, 2026
f5ee902
refactor(bench): CI data out of the generic registry
samuelburnham Jul 8, 2026
e533065
fix(bench): baselines move to the framework's .lake/benches root
samuelburnham Jul 8, 2026
23e3dc1
fix(bench): watchdog must never lose the race to the runner
samuelburnham Jul 8, 2026
40c0563
fix(ci): derive the benched-env gate from the registry
samuelburnham Jul 8, 2026
6beef01
fix(bench): per-shard data uploads as benchmarks, not one measure per…
samuelburnham Jul 8, 2026
a9b7ea6
fix(ci): threshold the compile cell's peak-rss
samuelburnham Jul 8, 2026
5b5f3c0
fix(bench): enforce the RAM ceiling with RLIMIT_DATA, sampler as back…
samuelburnham Jul 8, 2026
230edbe
fix(bench): never upload an empty BMF report
samuelburnham Jul 8, 2026
54dce10
fix(bench): absolute watchdog path; exec failure is not an OOM
samuelburnham Jul 8, 2026
2aa2586
fix(ci): say where the main side actually came from in the table title
samuelburnham Jul 8, 2026
a9d7aa9
fix(bench): only annotate the mode for multi-mode backends in the sum…
samuelburnham Jul 8, 2026
5c3a308
fix(bench): drop the mode from single-mode cells' table titles
samuelburnham Jul 8, 2026
94d1314
fix(bench): fixed 120 GB default ceiling; RLIMIT_DATA stays everywhere
samuelburnham Jul 8, 2026
f46d6b0
feat(bench): cgroup memory.max as the watchdog's primary enforcement
samuelburnham Jul 8, 2026
a29fd00
feat(bench): cgroup-only watchdog — no fallback, fail loudly
samuelburnham Jul 8, 2026
1f84dfb
fix(bench): sampler-only watchdog with adaptive cadence
samuelburnham Jul 8, 2026
d0c0062
fix(bench): restore the RAM-derived default ceiling
samuelburnham Jul 8, 2026
d513eb7
refactor(bench): zkvm testbeds gain the mode suffix (zisk-check-execute)
samuelburnham Jul 8, 2026
507eae9
feat(ci): bench-pr prepare stage — compile each env's .ixe once
samuelburnham Jul 8, 2026
cc93a6b
fix(bench): watchdog survives memory-bandwidth bursts and shm undercount
samuelburnham Jul 8, 2026
fa59b17
refactor(bench): watchdog watches MemAvailable — one number, no summa…
samuelburnham Jul 8, 2026
1f23eea
chore(bench): watchdog cadence 0.25s -> 0.5s
samuelburnham Jul 8, 2026
dfa0cdc
fix(ci): build the bench binaries on warp — end the instruction-set l…
samuelburnham Jul 8, 2026
92627aa
refactor(ci): one lean-action for both bench-pr build paths
samuelburnham Jul 8, 2026
2bbea93
fix(bench): per-backend watchdog headroom — compile gets a thin floor
samuelburnham Jul 8, 2026
9152ca7
refactor(bench): flat 110 GB default ceiling for all backends
samuelburnham Jul 8, 2026
b854fe3
fix(bench): default ceiling = machine RAM minus 15 GB
samuelburnham Jul 8, 2026
8669d75
fix(ci): file-size rides a ±1% band instead of an exact pin
samuelburnham Jul 8, 2026
b292342
chore(ci): trim the warp-build comment
samuelburnham Jul 8, 2026
5db9a39
chore(ci): CPU log prints the actual AVX flag set
samuelburnham Jul 8, 2026
a1f58c5
chore(ci): pure-Lean ix subcommands run on cheap hosts
samuelburnham Jul 8, 2026
585608e
feat(bench): watchdog is a systemd-run memory scope — sampler deleted
samuelburnham Jul 8, 2026
cdd6166
chore(ci): revert the TEMPORARY test triggers
samuelburnham Jul 8, 2026
fda8f83
fix(bench): OOM-kill the whole scope, not its biggest process
samuelburnham Jul 8, 2026
4e002e2
feat(bench): ix bench run --consts
samuelburnham Jul 9, 2026
f8c2fc2
refactor(bench): explicit --ixe replaces --reuse-ixe; comma lists rep…
samuelburnham Jul 9, 2026
c7372ee
feat(ci): bench-pr compiles each env exactly once — prepare becomes c…
samuelburnham Jul 9, 2026
b8a61c3
chore: bump tracing-texray to the merged fork commit
samuelburnham Jul 9, 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
2 changes: 1 addition & 1 deletion .github/actions/bencher-track/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ inputs:
description: Bencher testbed slug.
required: true
workload:
description: Workload key for the `bencher-thresholds-reset-<workload>` tag (e.g. ix-compile, aiur).
description: Workload key for the `bencher-thresholds-reset-<workload>` tag (the backend testbed minus its runner-arch suffix, e.g. zisk-check-execute).
required: true
file:
description: Bencher Metric Format JSON file to upload.
Expand Down
31 changes: 31 additions & 0 deletions .github/actions/install-sp1/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Install SP1
description: >-
Install the system build deps and the SP1 zkVM toolchain (sp1up) needed to
build and run the SP1 host. Assumes a Rust toolchain is already set up.

runs:
using: composite
steps:
# The shared zkVM apt superset (the ZisK book's full Ubuntu list — the
# prebuilt cargo tooling and proofman's C++ link OpenMPI/OpenMP/GMP/
# nlohmann-json/nasm/secp256k1/… — plus pkg-config + libssl-dev for SP1's
# host crates). The Nix shells provided this; a bare runner doesn't.
- name: Install system build deps
shell: bash
run: |
# Some warpbuild images ship an unreachable azure mirror that hangs
# `apt-get update`; drop it first (no-op elsewhere).
sudo sed -i '/azure\.archive\.ubuntu\.com/d' /etc/apt/apt-mirrors.txt 2>/dev/null || true
sudo apt-get update
sudo apt-get install -y \
xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev \
nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev \
libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev \
openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf \
pkg-config libssl-dev
- name: Install SP1 toolchain (sp1up, latest)
shell: bash
run: |
curl -L https://sp1up.succinct.xyz | bash
~/.sp1/bin/sp1up
echo "$HOME/.sp1/bin" >> "$GITHUB_PATH"
95 changes: 95 additions & 0 deletions .github/actions/install-zisk/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Install Zisk
description: >-
Install the system build deps, the ZisK zkVM toolchain (ziskup, CPU build),
and — unless `proving-key: false` — the fork-matching proving key needed to
RUN the Zisk host. Execute needs the key too (zisk-host's `client.setup()`
loads the circuit's const-tree files before either the execute or the prove
branch), but BUILDING the host does not, so build-only callers skip the
~3 GB download + const-tree regeneration. Assumes a Rust toolchain is
already set up.

inputs:
proving-key:
description: >-
Install the fork-matching proving key (required to execute or prove;
not needed to build). Set false for build-only jobs.
required: false
default: "true"

runs:
using: composite
steps:
# The shared zkVM apt superset — the ZisK book's full Ubuntu list (prebuilt
# cargo-zisk + proofman's C++ link OpenMPI/OpenMP/GMP/nlohmann-json/nasm/
# secp256k1/…), kept identical to install-sp1 so a host that links both is
# covered. The Nix shells provided this; a bare runner doesn't.
- name: Install system build deps
shell: bash
run: |
# Some warpbuild images ship an unreachable azure mirror that hangs
# `apt-get update`; drop it first (no-op elsewhere).
sudo sed -i '/azure\.archive\.ubuntu\.com/d' /etc/apt/apt-mirrors.txt 2>/dev/null || true
sudo apt-get update
sudo apt-get install -y \
xz-utils jq curl build-essential qemu-system libomp-dev libgmp-dev \
nlohmann-json3-dev protobuf-compiler uuid-dev libgrpc++-dev \
libsecp256k1-dev libsodium-dev libpqxx-dev nasm libopenmpi-dev \
openmpi-bin openmpi-common libclang-dev clang gcc-riscv64-unknown-elf \
pkg-config libssl-dev
# `--version 0.18.0` pins the toolchain to match our deps. Our host links the
# argumentcomputer/zisk `blake3-precompile` fork, which is based on v0.18.0
# (its cargo-zisk has `check-setup`, used below to regenerate the key's
# const-trees). Without the pin, ziskup installs `releases/latest`, which
# resolves to upstream `v1.0.0-alpha` — a different circuit whose cargo-zisk
# dropped the `check-setup` subcommand, breaking the key step. `--cpu` picks
# the CPU build (no GPU on the runner) and `--nokey` skips ziskup's key
# install — both avoid its interactive /dev/tty prompts. We keep `--nokey`
# because the upstream `zisk-setup` bucket only carries the upstream circuit's
# key; our fork has a different circuit (extra Blake3f AIR), so we restore the
# fork-matching key from our own S3 in the next step. `--prefix $HOME/.zisk`
# pins the install where cargo-zisk's ZiskPaths fallback looks (the runner
# sets XDG_CONFIG_HOME, which would otherwise relocate it).
- name: Install Zisk toolchain (ziskup, pinned v0.18.0)
shell: bash
run: |
curl -L https://raw.githubusercontent.com/0xPolygonHermez/zisk/main/ziskup/install.sh \
| bash -s -- --cpu --nokey -y --version 0.18.0 --prefix "$HOME/.zisk"
echo "$HOME/.zisk/bin" >> "$GITHUB_PATH"
# Pre-build the proofman C++ sys crate ALONE so its build script runs
# exactly once before any parallel zisk-host build. zisk-host pulls
# zisk-sdk as both a dependency and a build-dependency, so cargo compiles
# proofman-starks-lib-c as two units whose build scripts can run
# CONCURRENTLY — and both run `make` inside the SHARED
# ~/.cargo/git/checkouts/pil2-proofman-* source dir. On a cold runner the
# Makefile stamp is absent, so both units take the `make clean` +
# `make -j` path and race: one unit's clean deletes build/ while the
# other's g++ is mid-compile ("opening dependency file ….d: No such file
# or directory"). Building the crate solo writes the stamp; the second
# unit then skips the clean and its `make -j` is a no-op.
# (Proper fix is an flock in pil2-proofman's build.rs — upstream.)
- name: Pre-build proofman-starks-lib-c (serialize the shared make)
shell: bash
run: cargo build --release -p proofman-starks-lib-c
working-directory: zisk
# Execute still needs a proving key present: zisk-host calls `client.setup()`
# (which the SDK runs before the execute branch), and that loads the circuit's
# const-tree files. We host the fork-matching key in a public S3 bucket
# WITHOUT the const-trees — exactly like Zisk's released
# `zisk-provingkey-*.tar.gz` on `storage.googleapis.com/zisk-setup` — and
# regenerate them here with `cargo-zisk check-setup -a`, which is how `ziskup`
# itself populates them. That keeps the artifact ~3 GB (gzip) instead of
# ~48 GB. The object name carries the fork rev so a circuit change can't
# silently reuse a stale key. Public bucket → plain curl, no AWS creds.
- name: Restore Zisk proving key (fork circuit) from S3
if: inputs.proving-key == 'true'
shell: bash
run: |
mkdir -p "$HOME/.zisk"
curl -fSL --retry 3 \
https://argument-zisk-setup.s3.amazonaws.com/zisk-provingkey-blake3-8f9e24d5-cpu.tar.gz \
-o /tmp/zisk-provingkey.tar.gz
tar -C "$HOME/.zisk" -xzf /tmp/zisk-provingkey.tar.gz
rm -f /tmp/zisk-provingkey.tar.gz
# Regenerate the const-tree files omitted from the artifact (CPU build, so
# no --gpu). This is the "may take a while" step ziskup prints.
cargo-zisk check-setup --proving-key "$HOME/.zisk/provingKey" -a
34 changes: 34 additions & 0 deletions .github/scripts/watchdog.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
# Hard memory cap: run <cmd> in a systemd user scope with cgroup-v2
# memory.max = <ceiling_gb> and swap disabled. The kernel OOM-kills at
# the cap — SIGKILL, exit 137, which the orchestrator (`ix bench run`)
# reads as the in-flight constant's OOM. No sampler to race, nothing to
# sum: the cgroup charges the whole tree's resident memory, and cached
# allocator reservations don't count. Validated on ubuntu-latest and
# warp runners (see ix-cpu-info's cgroup-memcap.yml).
#
# watchdog.sh <ceiling_gb> <cmd> [args...]
#
# Needs a user systemd instance: the linger call boots one on CI
# (passwordless sudo); it no-ops locally, where a desktop session
# already provides the user manager.
set -u
ceiling_gb=${1:?ceiling_gb}
shift
[ $# -ge 1 ] || { echo "watchdog: no command given" >&2; exit 2; }

sudo -n loginctl enable-linger "${USER:-$(id -un)}" 2>/dev/null || true
export XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR:-/run/user/$(id -u)}

# memory.oom.group=1: on breach the kernel kills the WHOLE scope (exit
# 137 -> oom row), not just its biggest process. Without it, Zisk's ASM
# service gets singled out and the surviving host converts the memory
# kill into a clean exit 1 — which the orchestrator must treat as a
# deterministic failure. The scope's cgroup is user-delegated, so the
# write needs no sudo; if it fails, exit 2 rather than run with wrong
# kill semantics.
exec systemd-run --user --scope --quiet \
-p MemoryMax="${ceiling_gb}G" -p MemorySwapMax=0 \
bash -c 'echo 1 > "/sys/fs/cgroup$(cut -d: -f3- /proc/self/cgroup)/memory.oom.group" \
|| { echo "watchdog: cannot set memory.oom.group" >&2; exit 2; }
exec "$@"' watchdog "$@"
Loading