Skip to content

test(vm): Refactor VM benchmarks #9133

test(vm): Refactor VM benchmarks

test(vm): Refactor VM benchmarks #9133

name: Compare VM performance to base branch
on:
pull_request:
paths:
- 'core/**'
jobs:
vm-benchmarks:
name: Run VM benchmarks
runs-on: [matterlabs-ci-runner]
steps:
- name: checkout base branch
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4
with:
submodules: "recursive"
fetch-depth: 0
ref: ${{ github.base_ref }}
- name: fetch PR branch
run: |
git remote add pr_repo ${{ github.event.pull_request.head.repo.clone_url }}
git fetch pr_repo ${{ github.event.pull_request.head.ref }}
- name: fetch merge-base SHA
id: merge_base
run: echo "sha=$(git merge-base HEAD FETCH_HEAD)" >> $GITHUB_OUTPUT
- name: checkout divergence point
run: git checkout ${{ steps.merge_base.outputs.sha }} --recurse-submodules
- name: setup-env
run: |
touch .env
echo ZKSYNC_HOME=$(pwd) >> $GITHUB_ENV
echo $(pwd)/bin >> $GITHUB_PATH
- name: init
run: |
run_retried docker compose pull zk
docker compose up -d zk
- name: run benchmarks on base branch
shell: bash
run: |
ci_run zk
ci_run zk compiler system-contracts
ci_run cargo bench --package vm-benchmark --bench iai | tee base-iai
ci_run cargo run --package vm-benchmark --release --bin instruction_counts | tee base-opcodes || touch base-opcodes
ci_run yarn workspace system-contracts clean
- name: checkout PR
run: git checkout --force FETCH_HEAD --recurse-submodules
- name: run benchmarks on PR
shell: bash
run: |
ci_run zk
ci_run zk compiler system-contracts
ci_run cargo bench --package vm-benchmark --bench iai | tee pr-iai
ci_run cargo run --package vm-benchmark --release --bin instruction_counts | tee pr-opcodes || touch pr-opcodes
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "speedup<<$EOF" >> $GITHUB_OUTPUT
ci_run cargo run --package vm-benchmark --release --bin compare_iai_results base-iai pr-iai base-opcodes pr-opcodes >> $GITHUB_OUTPUT
echo "$EOF" >> $GITHUB_OUTPUT
id: comparison
- name: Comment on PR
uses: thollander/actions-comment-pull-request@v2
with:
message: |
${{ steps.comparison.outputs.speedup == '' && '## No performance difference detected (anymore)' || '## Detected VM performance changes' }}
${{ steps.comparison.outputs.speedup }}
comment_tag: vm-performance-changes
mode: recreate
create_if_not_exists: ${{ steps.comparison.outputs.speedup != '' }}