Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 47 additions & 4 deletions .ci/run_test_suite.sh
Original file line number Diff line number Diff line change
Expand Up @@ -305,16 +305,45 @@ for STACK_TYPE in ${STACK_TYPES[@]}; do
;;
"benchmarksuite")
# Clone evmone and run performance regression check
EVMONE_DIR="evmone"
if [ ! -d "$EVMONE_DIR" ]; then
git clone --depth 1 --recurse-submodules -b for_test https://github.com/DTVMStack/evmone.git $EVMONE_DIR
EVMONE_DIR=${EVMONE_DIR:-evmone}
EVMONE_REPO=${EVMONE_REPO:-https://github.com/DTVMStack/evmone.git}
EVMONE_REF=${EVMONE_REF:-for_test}
EVMONE_COMMIT=${EVMONE_COMMIT:-}

if [ -z "$EVMONE_COMMIT" ]; then
EVMONE_COMMIT=$(git ls-remote "$EVMONE_REPO" "refs/heads/$EVMONE_REF" | awk '{print $1}')
fi
if [ -z "$EVMONE_COMMIT" ]; then
echo "Unable to resolve $EVMONE_REPO refs/heads/$EVMONE_REF"
exit 1
fi

if [ ! -d "$EVMONE_DIR/.git" ]; then
rm -rf "$EVMONE_DIR"
git clone --depth 1 --recurse-submodules -b "$EVMONE_REF" "$EVMONE_REPO" "$EVMONE_DIR"
fi

EVMONE_HEAD=$(git -C "$EVMONE_DIR" rev-parse HEAD 2>/dev/null || true)
EVMONE_SUBMODULES_READY=1
if git -C "$EVMONE_DIR" submodule status --recursive | grep -q '^-'; then
EVMONE_SUBMODULES_READY=0
fi

if [ "$EVMONE_HEAD" = "$EVMONE_COMMIT" ] && [ "$EVMONE_SUBMODULES_READY" = 1 ]; then
echo "Using cached evmone at $EVMONE_COMMIT"
else
git -C "$EVMONE_DIR" remote set-url origin "$EVMONE_REPO"
git -C "$EVMONE_DIR" fetch --depth 1 origin "$EVMONE_REF"
git -C "$EVMONE_DIR" checkout --detach "$EVMONE_COMMIT"
git -C "$EVMONE_DIR" submodule update --init --recursive
fi

Comment thread
abmcar marked this conversation as resolved.
BENCHMARK_THRESHOLD=${BENCHMARK_THRESHOLD:-0.15}
BENCHMARK_MODE=${BENCHMARK_MODE:-multipass}
BENCHMARK_SUMMARY_FILE=${BENCHMARK_SUMMARY_FILE:-/tmp/perf_summary.md}
BENCHMARK_REPETITIONS=${BENCHMARK_REPETITIONS:-3}
BENCHMARK_MIN_TIME=${BENCHMARK_MIN_TIME:-""}
BENCHMARK_JOBS=${BENCHMARK_JOBS:-1}

PERF_ARGS=""
if [ -n "$BENCHMARK_REPETITIONS" ]; then
Expand All @@ -323,6 +352,9 @@ for STACK_TYPE in ${STACK_TYPES[@]}; do
if [ -n "$BENCHMARK_MIN_TIME" ]; then
PERF_ARGS="$PERF_ARGS --benchmark-min-time $BENCHMARK_MIN_TIME"
fi
if [ -n "$BENCHMARK_JOBS" ]; then
PERF_ARGS="$PERF_ARGS --benchmark-jobs $BENCHMARK_JOBS"
fi

cp build/lib/* $EVMONE_DIR/

Expand All @@ -331,7 +363,18 @@ for STACK_TYPE in ${STACK_TYPES[@]}; do
cp ../tools/check_performance_regression.py ./

if [ ! -f "build/bin/evmone-bench" ]; then
"$SCRIPT_DIR/cmake_ci_build.sh" build -- -DEVMONE_TESTING=ON -DCMAKE_BUILD_TYPE=Release
EVMONE_CMAKE_ARGS=(-DEVMONE_TESTING=ON -DCMAKE_BUILD_TYPE=Release)
if [ "${DTVM_CI_USE_NINJA:-0}" = "1" ]; then
EVMONE_CMAKE_ARGS=(-G Ninja "${EVMONE_CMAKE_ARGS[@]}")
fi
if [ "${DTVM_CI_USE_SCCACHE:-0}" = "1" ]; then
EVMONE_CMAKE_ARGS+=(
-DCMAKE_C_COMPILER_LAUNCHER=sccache
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache
)
fi
cmake -S . -B build "${EVMONE_CMAKE_ARGS[@]}"
cmake --build build --target evmone-bench --parallel "${DTVM_CI_BUILD_JOBS:-16}"
fi
print_sccache_stats "before benchmarks"

Expand Down
33 changes: 32 additions & 1 deletion .github/workflows/dtvm_evm_test_x86.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ on:
permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

# Shared FetchContent cache root for all container jobs. The hook in
# CMakeLists.txt (commit 96707a2 lines 8-18) picks this up as the base
# dir for FetchContent populations. The cache key includes the generator
Expand All @@ -28,6 +32,9 @@ env:
SCCACHE_IDLE_TIMEOUT: "0"
DTVM_CI_USE_NINJA: "1"
DTVM_CI_USE_SCCACHE: "1"
EVMONE_REPO: https://github.com/DTVMStack/evmone.git
EVMONE_REF: for_test
EVMONE_BENCH_CACHE_VERSION: v1

jobs:
build_test_evm_interpreter_x86_ctest:
Expand Down Expand Up @@ -500,6 +507,23 @@ jobs:
git checkout ${{ github.sha }}
git stash pop || true

- name: Resolve evmone benchmark commit
id: evmone
run: |
EVMONE_COMMIT=$(git ls-remote "$EVMONE_REPO" "refs/heads/$EVMONE_REF" | awk '{print $1}')
if [ -z "$EVMONE_COMMIT" ]; then
echo "Unable to resolve $EVMONE_REPO refs/heads/$EVMONE_REF" >&2
exit 1
fi
echo "commit=$EVMONE_COMMIT" >> "$GITHUB_OUTPUT"
echo "Resolved evmone $EVMONE_REF to $EVMONE_COMMIT"

- name: Cache evmone-bench
uses: actions/cache@v4
with:
path: evmone
key: ${{ runner.os }}-evmone-bench-${{ env.EVMONE_BENCH_CACHE_VERSION }}-${{ steps.evmone.outputs.commit }}-${{ hashFiles('.ci/run_test_suite.sh', '.github/workflows/dtvm_evm_test_x86.yml') }}

- name: Build current PR and check regression
id: perf-check
run: |
Expand All @@ -509,7 +533,7 @@ jobs:
export LLVM_DIR=$LLVM_SYS_150_PREFIX/lib/cmake/llvm
export PATH=$LLVM_SYS_150_PREFIX/bin:$PATH

rm -rf build evmone
rm -rf build

export CMAKE_BUILD_TARGET=Release
export ENABLE_ASAN=false
Expand All @@ -523,10 +547,17 @@ jobs:
export BENCHMARK_BASELINE_LIB=/tmp/baseline_lib
export BENCHMARK_SUMMARY_FILE=/tmp/perf_summary_${{ matrix.mode }}.md
export BENCHMARK_REPETITIONS=5
export BENCHMARK_JOBS=3
export EVMONE_COMMIT=${{ steps.evmone.outputs.commit }}

bash .ci/run_test_suite.sh
continue-on-error: true

- name: Clean evmone cache inputs
if: always()
run: |
rm -f evmone/libdtvmapi.so evmone/libdtvmapi.so.* evmone/check_performance_regression.py

- name: Write Performance Summary
if: always()
run: |
Expand Down
Loading
Loading