From db67218d02874ea2fa4c8c2096e79d909d54ba88 Mon Sep 17 00:00:00 2001 From: Yanqin Li Date: Mon, 28 Oct 2024 21:17:33 +0800 Subject: [PATCH] ci(perf): optimize the schedule --- .github/workflows/perf.yml | 63 +++++++++++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 4764684231..b90e848f7c 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -2,11 +2,20 @@ name: Performance Regression on: schedule: #run at 15:30 UTC (23:30 UTC+8) on Friday - # - cron: '30 15 * * 5' + - cron: '30 15 * * 5' #run at 15:30 UTC (23:30 UTC+8) Every two weeks - - cron: '30 15 13,27 * *' + # - cron: '30 15 13,27 * *' #run it manually when the workflow is in the default branch workflow_dispatch: + inputs: + test_commit: + description: 'Commit SHA to run the workflow on' + required: false + default: '' + #only for test + push: + branches: [ ci-perf-yml ] + jobs: run: @@ -16,10 +25,32 @@ jobs: timeout-minutes: 2880 name: Performance Regression - Checkpoints steps: - - uses: actions/checkout@v2 + - name: Determine if this is the biweekly run + id: determine_run + run: | + [ $(( $(date +'%V') % 2 )) -eq 0 ] && echo "::set-output name=run_biweekly::true" || echo "::set-output name=run_biweekly::false" + + - name: Set test commit + id: set_test_commit + if: steps.determine_run.outputs.run_biweekly == 'true' + run: | + if [ "${{ github.event.inputs.test_commit }}" = "" ]; then + echo "Using latest commit." + echo "::set-output name=commit_sha::${{ github.sha }}" + else + echo "Using specified commit: ${{ github.event.inputs.test_commit }}" + echo "::set-output name=commit_sha::${{ github.event.inputs.test_commit }}" + fi + + - name: Checkout code at specific commit + if: steps.determine_run.outputs.run_biweekly == 'true' + uses: actions/checkout@v2 with: + ref: ${{ steps.set_test_commit.outputs.commit_sha }} submodules: 'recursive' + - name: Set env + if: steps.determine_run.outputs.run_biweekly == 'true' run: | SHORT_SHA=$(git rev-parse --short HEAD) DATE=$(git show -s --format=%cd --date=format:%y%m%d HEAD) @@ -30,17 +61,25 @@ jobs: echo "SPEC_DIR=/nfs/home/ci-runner/master-perf-report/cr${DATE}-${SHORT_SHA}" >> $GITHUB_ENV echo "CKPT_HOME=/nfs/home/share/checkpoints_profiles/spec06_rv64gcb_O3_20m_gcc12.2.0-intFpcOff-jeMalloc/checkpoint-0-0-0" >> $GITHUB_ENV echo "CKPT_JSON_PATH=/nfs/home/share/checkpoints_profiles/spec06_rv64gcb_O3_20m_gcc12.2.0-intFpcOff-jeMalloc/checkpoint-0-0-0/cluster-0-0.json" >> $GITHUB_ENV - - name: Clean up - run: | - python3 $GITHUB_WORKSPACE/scripts/xiangshan.py --clean + - name: Build EMU with DRAMsim3 + if: steps.determine_run.outputs.run_biweekly == 'true' run: | - python3 $GITHUB_WORKSPACE/scripts/xiangshan.py --build \ - --dramsim3 /nfs/home/share/ci-workloads/DRAMsim3 \ - --with-dramsim3 --threads 16 \ - --pgo $GITHUB_WORKSPACE/ready-to-run/coremark-2-iteration.bin \ - --llvm-profdata llvm-profdata + if [ -e "$SPEC_DIR/emu" ]; then + mkdir -p $NOOP_HOME/build + cp $SPEC_DIR/emu $NOOP_HOME/build/emu + else + python3 $GITHUB_WORKSPACE/scripts/xiangshan.py --clean + python3 $GITHUB_WORKSPACE/scripts/xiangshan.py --build \ + --dramsim3 /nfs/home/share/ci-workloads/DRAMsim3 \ + --with-dramsim3 --threads 16 \ + --pgo $GITHUB_WORKSPACE/ready-to-run/coremark-2-iteration.bin \ + --llvm-profdata llvm-profdata + mkdir -p $SPEC_DIR + cp $NOOP_HOME/build/emu $SPEC_DIR/emu + fi - name: Run SPEC CPU2006 checkpoints + if: steps.determine_run.outputs.run_biweekly == 'true' run: | cd $PERF_HOME python3 xs_autorun_multiServer.py $CKPT_HOME $CKPT_JSON_PATH \ @@ -48,6 +87,7 @@ jobs: -L "node033 node034 node036 node037 node038 node039 node040 node041 node042" find $NOOP_HOME/build/ -maxdepth 1 -name "*.vcd" -exec mv {} $SPEC_DIR \; - name: Report SPEC CPU2006 score + if: steps.determine_run.outputs.run_biweekly == 'true' run: | cd $PERF_HOME python3 xs_autorun_multiServer.py $CKPT_HOME $CKPT_JSON_PATH \ @@ -60,6 +100,7 @@ jobs: cp $SPEC_DIR/err_ckps.json $GITHUB_WORKSPACE/result/err_ckps.json cp $SPEC_DIR/score.txt $GITHUB_WORKSPACE/result/score.txt - name: Upload result + if: steps.determine_run.outputs.run_biweekly == 'true' uses: actions/upload-artifact@v4 with: name: result