Skip to content

Conversation

@876pol
Copy link

@876pol 876pol commented Jan 6, 2026

Resolves INT-5845.

Only the metric post-processor is edited. To generate the metrics.json with the instruction count information, run with the perf-metrics feature. For instance, to run the fibonacci test and generate the instruction count table, run

OUTPUT_PATH="metrics.json" GUEST_SYMBOLS_PATH="guest.syms" cargo run --release --bin fibonacci --features perf-metrics
openvm-prof --json-paths metrics.json

The generated aggregated table for fibonacci (for n=3000000) looks like:

group opcode frequency
fibonacci_program ADD 27,000,065
fibonacci_program SLTU 9,000,002
fibonacci_program BEQ 3,000,008
fibonacci_program BNE 3,000,005
fibonacci_program JAL 3,000,002
fibonacci_program STOREW 32
fibonacci_program LOADW 21
fibonacci_program LUI 17
fibonacci_program JALR 13
fibonacci_program STOREB 10
fibonacci_program AUIPC 9
fibonacci_program LOADBU 7
fibonacci_program AND 4
fibonacci_program OR 3
fibonacci_program BLT 2
fibonacci_program BLTU 2
fibonacci_program HINT_BUFFER 2
fibonacci_program SUB 1
fibonacci_program PHANTOM 1
fibonacci_program BGEU 1
fibonacci_program HINT_STOREW 1

The detailed table with the breakdown by segment looks like:

group opcode segment frequency
fibonacci_program ADD 0 3,655,773
fibonacci_program SLTU 0 1,218,584
fibonacci_program BEQ 0 406,197
fibonacci_program BNE 0 406,196
fibonacci_program JAL 0 406,195
fibonacci_program LUI 0 11
fibonacci_program STOREW 0 11
fibonacci_program LOADW 0 10
fibonacci_program AUIPC 0 5
fibonacci_program JALR 0 4
fibonacci_program AND 0 3
fibonacci_program OR 0 3
fibonacci_program BLTU 0 2
fibonacci_program HINT_BUFFER 0 2
fibonacci_program BGEU 0 1
fibonacci_program HINT_STOREW 0 1
fibonacci_program PHANTOM 0 1
fibonacci_program SUB 0 1
fibonacci_program ADD 1 3,657,000
fibonacci_program SLTU 1 1,219,000
fibonacci_program BNE 1 406,334
fibonacci_program BEQ 1 406,333
fibonacci_program JAL 1 406,333
fibonacci_program ADD 2 3,656,999
fibonacci_program SLTU 2 1,219,001
fibonacci_program JAL 2 406,334
fibonacci_program BEQ 2 406,333
fibonacci_program BNE 2 406,333
fibonacci_program ADD 3 3,657,001
fibonacci_program SLTU 3 1,218,999
fibonacci_program BEQ 3 406,334
fibonacci_program BNE 3 406,333
fibonacci_program JAL 3 406,333
fibonacci_program ADD 4 3,657,000
fibonacci_program SLTU 4 1,219,000
fibonacci_program BNE 4 406,334
fibonacci_program BEQ 4 406,333
fibonacci_program JAL 4 406,333
fibonacci_program ADD 5 3,656,999
fibonacci_program SLTU 5 1,219,001
fibonacci_program JAL 5 406,334
fibonacci_program BEQ 5 406,333
fibonacci_program BNE 5 406,333
fibonacci_program ADD 6 3,657,001
fibonacci_program SLTU 6 1,218,999
fibonacci_program BEQ 6 406,334
fibonacci_program BNE 6 406,333
fibonacci_program JAL 6 406,333
fibonacci_program ADD 7 1,402,292
fibonacci_program SLTU 7 467,418
fibonacci_program BEQ 7 155,811
fibonacci_program BNE 7 155,809
fibonacci_program JAL 7 155,807
fibonacci_program STOREW 7 21
fibonacci_program LOADW 7 11
fibonacci_program STOREB 7 10
fibonacci_program JALR 7 9
fibonacci_program LOADBU 7 7
fibonacci_program LUI 7 6
fibonacci_program AUIPC 7 4
fibonacci_program BLT 7 2
fibonacci_program AND 7 1

@github-actions

This comment has been minimized.

@876pol 876pol marked this pull request as ready for review January 6, 2026 22:01
@jonathanpwang
Copy link
Contributor

Can you provide instructions (in this PR desc for now) on how to generate the metrics.json needed by openvm-prof?
E.g., what feature flags to enable?

Provide explicit commands for one particular case to test.

After it looks good, we can update the benchmark docs

@876pol
Copy link
Author

876pol commented Jan 7, 2026

I've just updated the description with the instructions

@jonathanpwang
Copy link
Contributor

Can you remove the dsl_ir column and run it on an example with multiple segments (just a larger fibonacci program would do it)? Then give a top level table where the instruction counts are aggregated across all segments. Then more detailed per-segment instrumentation.

@jonathanpwang
Copy link
Contributor

@876pol can you fix the lint? Format on save is likely not being triggered because you need to install Rust nightly: rustup install nightly.

@github-actions

This comment has been minimized.

@github-actions
Copy link

github-actions bot commented Jan 8, 2026

group app.proof_time_ms app.cycles app.cells_used leaf.proof_time_ms leaf.cycles leaf.cells_used
verify_fibair (+39 [+17.4%]) 263 322,610 2,058,654 - - -
fibonacci (-38 [-3.6%]) 1,011 1,500,209 2,100,402 - - -
regex (+150 [+6.5%]) 2,452 4,137,502 17,695,216 - - -
ecrecover (-19 [-2.5%]) 733 122,859 (+2328 [+0.1%]) 2,265,100 - - -
pairing (+102 [+7.1%]) 1,536 1,745,742 25,408,302 - - -

Commit: cb26827

Benchmark Workflow

Copy link
Contributor

@jonathanpwang jonathanpwang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Can you update the documentation for benchmarks to include a section on profiling detailed instruction count?


let mut markdown_output = String::from_utf8(writer)?;

// TODO: calculate diffs for instruction count
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure if we need this since these are more detailed metrics

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants