You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Reopened from #429 using the new dcbuilder/* branch naming.
Old PR: #429
Replacement branch: dcbuilder/pr429-main-mobench-fixtures
Old head branch: dcbuild3r/main-mobench-fixtures
Head SHA: e14fa60beadc25bf1e7d238c9bdbf8f6237fa9f2
add main-based mobench fixtures for passport, OPRF, and P-256 bigcurve
run BrowserStack triad profile across Vivo Y21, Pixel 7, S24 and iOS fallback triad
fix Android prove timing so fixture clone/setup is outside the measured prove span
use jemalloc as the Android fallback allocator under the native C FFI allocator
harden Android incomplete-fixture reporting with timeout/build/kill-evidence fields
Android mobench fix note
The previous failing run was https://github.com/worldfnd/provekit/actions/runs/26007468825. The missing Vivo Y21 monolithic cell did not recover a BrowserStack session payload or summary.json; available artifacts only show the BrowserStack fetch timeout after 7200s for build c943753d95fd0b34f5775aa0a3bc6ff58cbcc3ca.
Before/failure memory from that run:
Vivo Y21 OPRF: 328 MB process peak, 10.061s
Vivo Y21 fragmented age check: 1187 MB process peak, 65.342s
Vivo Y21 monolithic age check: no row; BrowserStack timeout/no summary
S24 OPRF: 426 MB process peak, 2.809s
What changed:
Android and iOS now use the same semantic boundary for prove benches: per-iteration fixture setup happens before the measured closure, and profile_phase("prove") wraps only the prover entry point. Previously prepared.clone() ran inside profile_phase("prove"), so clone cost and peak memory were charged to proving.
Android native C FFI fallback allocation now routes through jemalloc instead of Bionic malloc when no host callback/mmap allocator is active.
If BrowserStack returns no summary, failure.json now records attempts, fetch timeout seconds, build id, and any LMK/OOM/SIGKILL lines recovered from attempt/device logs.
Latest benchmark numbers were reposted as a PR comment from #429.
Validation
cargo fmt --all
cargo test -p bench-mobile --lib
cargo test -p bench-mobile --test examples_smoke
cargo test -p bench-mobile --test passport_smoke
cargo check -p provekit-ffi --target aarch64-linux-android with NDK 26.1 aarch64-linux-android34-clang
Source: Mobile Bench PR Auto run 26368378239 on dcbuild3r/main-mobench-fixtures at e14fa60b.
Mobench version: 0.1.42. Artifact summaries report 2 measured runs per function/device plus 1 warmup run.
iOS
Benchmark
Device
Runs
Warmup
Mean/run
Median
p95
Min
Max
Wall total
CPU median/run
CPU total
CPU/wall
Peak growth
Peak memory
Process peak
OPRF
iPhone 16 Pro Max
2
1
766.622ms
766.622ms
775.181ms
758.064ms
775.181ms
1.533s
3.364s
6.728s
438.8%
10.95 MB
10.95 MB
362.28 MB
OPRF
iPhone 14
2
1
1.096s
1.096s
1.118s
1.075s
1.118s
2.192s
4.497s
8.994s
410.2%
32.55 MB
32.55 MB
206.95 MB
OPRF
iPhone SE 2022
2
1
1.085s
1.085s
1.086s
1.085s
1.086s
2.171s
4.486s
8.972s
413.3%
33.48 MB
33.48 MB
209.44 MB
Passport fragmented
iPhone 16 Pro Max
2
1
4.751s
4.751s
4.805s
4.696s
4.805s
9.501s
21.524s
43.049s
453.1%
150.95 MB
150.95 MB
1042.44 MB
Passport fragmented
iPhone 14
2
1
6.598s
6.598s
6.625s
6.570s
6.625s
13.195s
28.438s
56.877s
431.0%
264.30 MB
264.30 MB
845.34 MB
Passport fragmented
iPhone SE 2022
2
1
7.053s
7.053s
7.233s
6.874s
7.233s
14.106s
30.661s
61.323s
434.7%
265.72 MB
265.72 MB
851.73 MB
Passport complete
iPhone 16 Pro Max
2
1
4.499s
4.499s
4.514s
4.484s
4.514s
8.997s
19.933s
39.866s
443.1%
376.08 MB
376.08 MB
1594.42 MB
Passport complete
iPhone 14
2
1
7.772s
7.772s
8.889s
6.654s
8.889s
15.543s
28.034s
56.069s
360.7%
487.56 MB
487.56 MB
1220.12 MB
Passport complete
iPhone SE 2022
2
1
7.443s
7.443s
7.505s
7.381s
7.505s
14.886s
30.253s
60.507s
406.5%
494.86 MB
494.86 MB
1104.30 MB
Android
Benchmark
Device
Runs
Warmup
Mean/run
Median
p95
Min
Max
Wall total
CPU median/run
CPU total
CPU/wall
Peak growth
Peak memory
Process peak
OPRF
Samsung Galaxy S24
2
1
2.725s
2.725s
2.762s
2.688s
2.762s
5.449s
9.657s
19.315s
354.4%
89.95 MB
89.95 MB
488.93 MB
OPRF
Google Pixel 7
2
1
3.900s
3.900s
3.943s
3.858s
3.943s
7.800s
11.518s
23.036s
295.3%
18.23 MB
18.23 MB
237.57 MB
OPRF
Samsung Galaxy M32
2
1
6.681s
6.681s
6.926s
6.436s
6.926s
13.362s
22.641s
45.282s
338.9%
n/a
n/a
352.76 MB
Passport fragmented
Samsung Galaxy S24
2
1
14.516s
14.516s
14.697s
14.336s
14.697s
29.033s
54.556s
109.112s
375.8%
202.75 MB
202.75 MB
929.28 MB
Passport fragmented
Google Pixel 7
2
1
26.237s
26.237s
28.870s
23.605s
28.870s
52.475s
74.610s
149.220s
284.4%
217.21 MB
217.21 MB
789.64 MB
Passport fragmented
Samsung Galaxy M32
2
1
40.629s
40.629s
41.183s
40.075s
41.183s
81.257s
137.225s
274.451s
337.8%
284.89 MB
284.89 MB
859.60 MB
Passport complete
Samsung Galaxy S24
2
1
11.250s
11.250s
11.671s
10.829s
11.671s
22.500s
46.655s
93.310s
414.7%
376.77 MB
376.77 MB
1157.10 MB
Passport complete
Google Pixel 7
2
1
19.856s
19.856s
22.382s
17.330s
22.382s
39.712s
63.704s
127.408s
320.8%
304.69 MB
304.69 MB
980.12 MB
Passport complete
Samsung Galaxy M32
2
1
28.921s
28.921s
30.002s
27.840s
30.002s
57.842s
102.707s
205.414s
355.1%
365.05 MB
365.05 MB
1220.69 MB
Memory growth is the benchmark-reported peak growth above baseline; process peak is the reported process RSS peak.
Prover time, peak RSS, peak heap, and verifier time are arithmetic means across the iterations. Peak heap comes from the largest peak memory entry in provekit-cli prove's tracing output; peak RSS is reported by /usr/bin/time -v (max-resident-set-size).
Each metric cell shows the current value followed by the percentage delta against the latest successful main run #29429257697. (new) marks circuits absent from the baseline.
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
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.
Reopened from #429 using the new
dcbuilder/*branch naming.Old PR: #429
Replacement branch:
dcbuilder/pr429-main-mobench-fixturesOld head branch:
dcbuild3r/main-mobench-fixturesHead SHA:
e14fa60beadc25bf1e7d238c9bdbf8f6237fa9f2Previous PR CI / benchmark runs from #429:
Summary
provespanAndroid mobench fix note
The previous failing run was https://github.com/worldfnd/provekit/actions/runs/26007468825. The missing Vivo Y21 monolithic cell did not recover a BrowserStack session payload or
summary.json; available artifacts only show the BrowserStack fetch timeout after 7200s for buildc943753d95fd0b34f5775aa0a3bc6ff58cbcc3ca.Before/failure memory from that run:
What changed:
profile_phase("prove")wraps only the prover entry point. Previouslyprepared.clone()ran insideprofile_phase("prove"), so clone cost and peak memory were charged to proving.failure.jsonnow records attempts, fetch timeout seconds, build id, and any LMK/OOM/SIGKILL lines recovered from attempt/device logs.Latest benchmark numbers were reposted as a PR comment from #429.
Validation
cargo fmt --allcargo test -p bench-mobile --libcargo test -p bench-mobile --test examples_smokecargo test -p bench-mobile --test passport_smokecargo check -p provekit-ffi --target aarch64-linux-androidwith NDK 26.1aarch64-linux-android34-clangruby -e 'require "yaml"; YAML.load_file(".github/workflows/mobile-bench-reusable.yml")'git diff --check