ci(l2): automate flamegraph tests #82
This file contains 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
name: Daily Flamegraph Reporter | |
permissions: | |
contents: read | |
pages: write | |
id-token: write | |
on: | |
push: | |
branches: [ "main" ] | |
pull_request: | |
branches: [ "**" ] | |
workflow_dispatch: | |
env: | |
RUST_VERSION: 1.81.0 | |
RUST_RETH_VERSION: 1.82.0 | |
jobs: | |
flamegraph: | |
name: Generate Flamegraph for load test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Rustup toolchain install | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
- name: Caching | |
uses: Swatinem/rust-cache@v2 | |
- name: Change perf settings | |
run: | | |
sudo sysctl kernel.perf_event_paranoid=-1 | |
sudo perf list hw | |
- name: Install flamegraph | |
run: | | |
cargo install flamegraph | |
cargo install inferno | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
- name: Install ethrex_l2 cli | |
run: | | |
cargo install --path cmd/ethrex_l2 | |
ethrex_l2 config create default --default | |
ethrex_l2 config set default | |
- name: Build ethrex | |
run: CARGO_PROFILE_RELEASE_DEBUG=true cargo build --release --bin ethrex --features dev | |
- name: Generate Flamegraph data for Ethrex | |
shell: bash | |
run: | | |
CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" --bin ethrex --features dev -- --network test_data/genesis-l2.json --http.port 1729 & | |
echo "waiting to execute load test..." | |
sleep 30 && | |
echo "executing load test..." | |
bash .github/scripts/flamegraph.sh && | |
echo "Load test finished" | |
- name: Generate SVG | |
shell: bash | |
run: | | |
echo "running perf" | |
perf script -v -i perf.data --no-inline > stack.data | |
inferno-collapse-perf < stack.data > collapsed.data | |
inferno-flamegraph < collapsed.data > flamegraph_ethrex.svg | |
file flamegraph_ethrex.svg | |
- name: Upload artifacts - flamegraph_ethrex.svg | |
uses: actions/upload-artifact@v4 | |
with: | |
name: flamegraph_ethrex.svg | |
path: ./flamegraph_ethrex.svg | |
flamegraph-reth: | |
name: Generate Flamegraph for Reth | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Rustup toolchain install | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_RETH_VERSION }} | |
- name: Caching | |
uses: Swatinem/rust-cache@v2 | |
- name: Change perf settings | |
run: | | |
pwd | |
sudo sysctl kernel.perf_event_paranoid=-1 | |
sudo perf list hw | |
- name: Install flamegraph | |
run: | | |
cargo install flamegraph | |
cargo install inferno | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
- name: Install ethrex_l2 cli | |
run: | | |
cargo install --path cmd/ethrex_l2 | |
ethrex_l2 config create default --default | |
ethrex_l2 config set default | |
- name: Checkout reth | |
uses: actions/checkout@v4 | |
with: | |
repository: paradigmxyz/reth | |
path: 'reth' | |
- name: Build and test reth | |
shell: bash | |
run: | | |
cd ./reth | |
cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" --bin reth --profile profiling \ | |
-- node --chain /home/runner/work/ethrex/ethrex/test_data/genesis-load-test.json --dev \ | |
--dev.block-time 5000ms --http.port 1729 --txpool.max-pending-txns 100000000 --txpool.max-new-txns 1000000000 \ | |
--txpool.pending-max-count 100000000 --txpool.pending-max-size 10000000000 --txpool.basefee-max-count 100000000000 \ | |
--txpool.basefee-max-size 1000000000000 --txpool.queued-max-count 1000000000 & | |
echo "waiting to execute load test..." | |
sleep 120 && | |
bash /home/runner/work/ethrex/ethrex/.github/scripts/flamegraph_reth.sh && | |
echo "Load test finished" | |
ls -las | |
- name: Generate SVG | |
shell: bash | |
run: | | |
pwd | |
echo "running perf 2" | |
ls -las /home/runner/work/ethrex/ | |
ls -las /home/runner/work/ethrex/ethrex/ | |
perf script -v -i /home/runner/work/ethrex/ethrex/reth/perf.data --no-inline > stack.data | |
inferno-collapse-perf < stack.data > collapsed.data | |
inferno-flamegraph < collapsed.data > flamegraph_reth.svg | |
file flamegraph_reth.svg | |
- name: Upload artifacts - flamegraph_reth.svg | |
uses: actions/upload-artifact@v4 | |
with: | |
name: flamegraph_reth.svg | |
path: ./flamegraph_reth.svg | |
upload-static-page: | |
name: Upload artifacts for static page | |
runs-on: ubuntu-latest | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
needs: [ flamegraph, flamegraph-reth ] | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Download ethrex flamegraph artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: flamegraph_ethrex.svg | |
path: flamegraph_ethrex.svg | |
- name: Download reth flamegraph artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: flamegraph_reth.svg | |
path: flamegraph_reth.svg | |
- name: Update static page locally with new data | |
shell: bash | |
run: | | |
file flamegraph_ethrex.svg | |
file flamegraph_reth.svg | |
cp -r flamegraph_ethrex.svg pages/ | |
cp -r flamegraph_reth.svg pages/ | |
ls -las pages/ | |
date +'%Y-%m-%dT%H:%M:%S' | |
sed -i "s/{{LAST_UPDATE}}/$(date +'%Y-%m-%dT%H:%M:%S')/g" pages/index.html | |
- name: Setup Pages | |
uses: actions/configure-pages@v5 | |
- name: Upload artifact | |
uses: actions/upload-pages-artifact@v3 | |
with: | |
path: 'pages/' | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@v4 |