Skip to content

Run benchmark

Run benchmark #51

Workflow file for this run

name: Run benchmark
on:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || '' }}-${{ github.base_ref || '' }}-${{ github.ref != 'refs/heads/master' || github.sha }}
cancel-in-progress: true
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
gh_issue_repo: duckdblabs/db-benchmark
instance_id: i-0e75a4f0e0b61c475
jobs:
start-aws-machine:
name: Start aws-small-machine
runs-on: ubuntu-latest
environment: aws-secrets
steps:
- name: Start EC2 runner
shell: bash
env:
AWS_ACCESS_KEY_ID: ${{secrets.AWS_ACCESS_KEY_ID}}
AWS_SECRET_ACCESS_KEY: ${{secrets.AWS_SECRET_ACCESS_KEY}}
AWS_DEFAULT_REGION: us-east-1
run: aws ec2 start-instances --instance-id ${{ env.instance_id }}
- name: Create issue if failure
shell: bash
if: ${{ failure() && contains(github.ref_name, 'main') }}
run: |
gh issue create --repo ${{ env.gh_issue_repo }} --title "Weekly Regression Test Failure" --body "AWS box with instance-id ${{ env.instance_id }} could not be started"
run-benchmark:
name: Regression Tests all solutions
env:
CC: gcc-10
CXX: g++-10
GEN: ninja
runs-on: self-hosted
environment: aws-secrets
permissions: # Job-level permissions configuration starts here
contents: write # 'write' access to repository contents
pull-requests: write # 'write' access to pull requests
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: add_trigger_to_run_the_benchmark
persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal access token.
- name: run mount
shell: bash
run: |
./_setup_utils/mount.sh
- name: Install or Upgrade all solutions
shell: bash
working-directory: /var/lib/mount/db-benchmark-metal
run: |
python3 _setup_utils/install_all_solutions.py all --exclude clickhouse
# installing/updating clickhouse needs sudo priviledges
sudo python3 _setup_utils/install_all_solutions.py clickhouse
- name: Modify run.conf to only have new versions
shell: bash
working-directory: /var/lib/mount/db-benchmark-metal
run: |
git diff --name-only **/VERSION > updated_solutions.txt
sed -i 's/\/VERSION/ /g' updated_solutions.txt
tr --delete '\n' < updated_solutions.txt > updated_solutions_no_newlines.txt
export new_solutions=`cat updated_solutions_no_newlines.txt`
echo "New benchmarks are " $new_solutions
sed -i "s/export RUN_SOLUTIONS=.*/export RUN_SOLUTIONS=\"${new_solutions}\"/g" run.conf
- name: Run the benchmark
shell: bash
working-directory: /var/lib/mount/db-benchmark-metal
run: |
ncores=`python3 -c 'import multiprocessing as mp; print(mp.cpu_count())'`
if [ $ncores -eq 16 ]; then export MACHINE_TYPE="c6id.4xlarge"; fi
if [ $ncores -eq 32 ]; then export MACHINE_TYPE="c6id.8xlarge"; fi
if [ $ncores -eq 128 ]; then export MACHINE_TYPE="c6id.metal"; fi
MACHINE_TYPE=$MACHINE_TYPE ./_run/run_small_medium.sh
- name: name new branch
shell: bash
run: |
echo "new_branch_name=results-`date +%Y-%m-%d-%Hh%Mm`" >> $GITHUB_ENV
echo ${{ env.new_branch_name }}
- name: Commit updates
shell: bash
working-directory: /var/lib/mount/db-benchmark-metal
run: |
git config --global user.email ""
git config --global user.name "Run Benchmark action"
git remote add upstream git@github.com:duckdblabs/db-benchmark
git fetch upstream
git switch -c ${{ env.new_branch_name }}
git add time.csv logs.csv **/VERSION
git add run.conf
git commit -m "new results"
git push upstream ${{ env.new_branch_name }}
- name: Create Archive
if: always()
shell: bash
working-directory: /var/lib/mount/db-benchmark-metal
run: |
mkdir -p out
echo "guarantee not empty dir" > out/guarantee.txt
zip -r out-dir.zip out/
- uses: actions/upload-artifact@v4
if: always()
with:
name: out-dir.zip
path: /var/lib/mount/db-benchmark-metal/out-dir.zip
if-no-files-found: error
shutdown:
name: shut down
environment: aws-secrets
if: always()
runs-on: ubuntu-latest
needs:
- start-aws-machine
- run-benchmark
steps:
- name: shutdown
shell: bash
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-east-1
run: aws ec2 stop-instances --instance-id ${{ env.instance_id }}