dbg: test #20
Workflow file for this run
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: Flamegraph Reporter LEVM | ||
permissions: | ||
contents: read | ||
pages: write | ||
id-token: write | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||
cancel-in-progress: true | ||
on: | ||
push: | ||
branches: ["main", "levm/perf/automate_flamegraph"] | ||
workflow_dispatch: | ||
jobs: | ||
generate-flamegraph: | ||
name: Generate Flamegraph | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
name: ["levm", "revm"] | ||
steps: | ||
- name: Checkout sources | ||
uses: actions/checkout@v4 | ||
- name: Rustup toolchain install | ||
uses: dtolnay/rust-toolchain@stable | ||
- name: Cache Extra Binaries | ||
id: cache-binaries | ||
uses: actions/cache@v4 | ||
with: | ||
path: | | ||
${{ env.HOME }}/.cargo/bin/addr2line | ||
${{ env.HOME }}/.cargo/bin/flamegraph | ||
${{ env.HOME }}/.cargo/bin/inferno-* | ||
${{ env.HOME }}/ethrex/ethrex/cmd/ef_tests/levm/vectors | ||
key: ${{ runner.os }}-${{ env.RUST_VERSION }}-extra-binaries | ||
- name: Change perf settings | ||
run: | | ||
sudo sysctl kernel.perf_event_paranoid=-1 | ||
sudo sysctl -w kernel.kptr_restrict=0 | ||
sudo chmod +r /proc/kallsyms | ||
sudo perf list hw | ||
- name: Check addr2line installation | ||
id: check-addr2line | ||
run: | | ||
if [ -f "$HOME/.cargo/bin/addr2line" ]; then | ||
echo "$HOME/.cargo/bin/addr2line found" | ||
echo "addr2line_exists=true" >> $GITHUB_OUTPUT | ||
else | ||
echo "$HOME/.cargo/bin/addr2line NOT found" | ||
echo "addr2line_exists=false" >> $GITHUB_OUTPUT | ||
fi | ||
- name: Checkout gimli addr2line | ||
if: steps.check-addr2line.outputs.addr2line_exists != 'true' | ||
uses: actions/checkout@v4 | ||
with: | ||
repository: gimli-rs/addr2line | ||
path: "addr2line" | ||
- name: Build gimli addr2line | ||
if: steps.check-addr2line.outputs.addr2line_exists != 'true' | ||
working-directory: ./addr2line | ||
run: | | ||
# Little hack we need else it throws error building | ||
echo "[workspace]" >> ./Cargo.toml | ||
cargo install --force --features="bin" addr2line | ||
- name: Install flamegraph tools | ||
run: | | ||
if [ ! -f "$HOME/.cargo/bin/flamegraph" ]; then | ||
cargo install --force flamegraph | ||
else | ||
echo "$HOME/.cargo/bin/flamegraph already found" | ||
fi | ||
if [ ! -f "$HOME/.cargo/bin/inferno-collapse-perf" ]; then | ||
cargo install --force inferno | ||
else | ||
echo "$HOME/.cargo/bin/inferno-collapse-perf already found" | ||
fi | ||
- name: Download EF Tests | ||
run: | | ||
if [ ! -f "$HOME/ethrex/ethrex/cmd/ef_tests/levm/vectors" ]; then | ||
cd crates/vm/levm | ||
make download-evm-ef-tests | ||
fi | ||
- name: Generate Flamegraph data for ${{ matrix.name }} | ||
run: | | ||
start_time=$(date +%s) | ||
if [ "${{ matrix.name }}" == "levm" ]; then | ||
rm -rf target/debug/ef_tests_levm | ||
CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" \ | ||
-p ef_tests-levm -- --tests stSolidityTest,stCallCodes | ||
elif [ "${{ matrix.name }}" == "revm" ]; then | ||
rm -rf target/debug/ef_tests_levm | ||
CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" \ | ||
-p ef_tests-levm -- --revm --tests stSolidityTest,stCallCodes | ||
fi | ||
end_time=$(date +%s) | ||
elapsed_time=$((end_time - start_time)) | ||
echo "time_${{ matrix.name }}=${elapsed_time}" >> $GITHUB_OUTPUT | ||
- name: Upload artifact - ${{ matrix.name }} | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: flamegraph_${{ matrix.name }}.svg | ||
path: ./flamegraph_${{ matrix.name }}.svg | ||
test-output: | ||
name: Test Output | ||
runs-on: ubuntu-latest | ||
environment: | ||
name: github-pages | ||
url: ${{ steps.deployment.outputs.page_url }} | ||
needs: [generate-flamegraph] | ||
steps: | ||
- name: echo Output | ||
run: | | ||
Check failure on line 128 in .github/workflows/flamegraph_reporter_levm.yaml GitHub Actions / Flamegraph Reporter LEVMInvalid workflow file
|
||
echo ${{ time_levm }} | ||
echo ${{ time_revm }} | ||
# upload-static-page: | ||
# name: Upload artifacts for static page | ||
# runs-on: ubuntu-latest | ||
# environment: | ||
# name: github-pages | ||
# url: ${{ steps.deployment.outputs.page_url }} | ||
# needs: [generate-flamegraph] | ||
# steps: | ||
# - name: Checkout sources | ||
# uses: actions/checkout@v4 | ||
# - name: Download ethrex flamegraph artifact | ||
# uses: actions/download-artifact@v4 | ||
# with: | ||
# name: flamegraph_levm.svg | ||
# path: flamegraph_levm.svg | ||
# - name: Download reth flamegraph artifact | ||
# uses: actions/download-artifact@v4 | ||
# with: | ||
# name: flamegraph_revm.svg | ||
# path: flamegraph_revm.svg | ||
# - name: Update static page locally with new data | ||
# shell: bash | ||
# run: | | ||
# cp -r flamegraph_levm.svg pages/ | ||
# cp -r flamegraph_revm.svg pages/ | ||
# sed -i "s/{{LAST_UPDATE}}/$(TZ='Etc/GMT+3' date +'%Y-%m-%dT%H:%M:%S')/g" pages/index.html | ||
# sed -i "s/{{ETHREX_TIME}}/${{ needs.generate-flamegraph.outputs.time_levm }}/g" pages/index.html | ||
# sed -i "s/{{RETH_TIME}}/${{ needs.generate-flamegraph.outputs.time_revm }}/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 |