Skip to content

Commit

Permalink
feat: Add bench workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
tschneider-aneo committed Jan 8, 2025
1 parent 8e69cdd commit c5e410a
Show file tree
Hide file tree
Showing 7 changed files with 1,023 additions and 0 deletions.
144 changes: 144 additions & 0 deletions .github/workflows/bench-benchmark.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: "Benchmark with Bench client"

on:
push:
branches:
- main
release:
types: [published, prereleased]
workflow_dispatch:
inputs:
destroy-on-session-end:
description: "Whether to destroy infrastructure right after the bench job has ended"
type: boolean
required: false
default: true
prefix:
description: "Prefix for the infrastructure. The bucket associated with this prefix must be created before."
required: false
default: "ci-bench"

jobs:
define-matrix:
name: Define matrix
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.types.outputs.matrix }}
steps:
- id: types
name: Define matrix
env:
TRIGGER: ${{ github.event_name }}
REF_NAME: ${{ github.ref_name }}
run: |
set -ex
if [ "$TRIGGER" == 'push' ]; then
echo '{"include":[{"type": "localhost", "ntasks":3000, "polling-limit": 300}]}' > matrix.json
echo "FILE_PREFIX=$REF_NAME" >> $GITHUB_ENV
elif [ "$TRIGGER" == 'release' ]; then
echo '{"include":[{"type": "localhost", "ntasks":3000, "polling-limit": 300}, {"type": "aws", "ntasks":1200000, "polling-limit": 1000, "parameters-file-path": "benchmarking/aws/parameters.tfvars"}]}' > matrix.json
echo "FILE_PREFIX=release/$REF_NAME" >> $GITHUB_ENV
elif [ "$TRIGGER" == 'workflow_dispatch' ]; then
echo '{"include":[{"type": "aws", "ntasks":1200000, "polling-limit": 1000, "parameters-file-path": "benchmarking/aws/parameters.tfvars"}]}' > matrix.json
echo "FILE_PREFIX=manual/$REF_NAME" >> $GITHUB_ENV
fi
echo "matrix=$(cat matrix.json)" >> "$GITHUB_OUTPUT"
benchmark:
name: ${{ matrix.type }}
runs-on: ubuntu-latest
needs: define-matrix
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.define-matrix.outputs.matrix) }}
env:
prefix: ${{ inputs.prefix || 'ci-bench' }}
parameters-file-path: ${{ matrix.parameters-file-path }}
outputs:
terraform-output: ${{ steps.deploy.outputs.terraform-output }}
armonik-endpoint: ${{ steps.get-armonik-endpoint.outputs.endpoint }}
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4

- name: Install Dependencies
uses: aneoconsulting/ArmoniK.Action.Deploy/dependencies@main
with:
terraform: true
k3s: true
docker: true
aws: true
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: eu-west-3

- name: Get Core version
run: |
set -ex
echo "core-version=$(cat versions.tfvars.json | jq -r '.armonik_versions.core')" >> $GITHUB_ENV
- id: deploy
name: "Deploy ArmoniK"
uses: aneoconsulting/ArmoniK.Action.Deploy/deploy@main
with:
type: ${{ matrix.type }}
prefix: ${{ env.prefix }}
core-version: ${{ env.core-version }}
parameters-file-path: ${{ env.parameters-file-path }}

- id: get-armonik-endpoint
name: "Get ArmoniK's control plane endpoint"
env:
TYPE: ${{ matrix.type }}
run: |
set -ex
grpc_endpoint=$(cat "infrastructure/quick-deploy/$TYPE/generated/armonik-output.json" | jq -r '.armonik.control_plane_url' | sed -r 's/(http:\/\/)([^:]*)(:.*)/\2/')
echo "grpc-endpoint=$grpc_endpoint" >> "$GITHUB_OUTPUT"
sleep 60
- id: bench
name: Run Bench
uses: aneoconsulting/ArmoniK.Action.Deploy/bench@main
with:
type: ${{ matrix.type }}
armonik-core-version: ${{ env.core-version }}
ntasks: ${{ matrix.ntasks }}
session-name: bench
grpc-client-endpoint: ${{ steps.get-armonik-endpoint.outputs.grpc-endpoint }}
timeout: 1200

- id: get-bench-stats
name: Get Bench Stats
uses: aneoconsulting/ArmoniK.Action.Deploy/get-throughput@main
with:
grpc-client-endpoint: ${{ steps.get-armonik-endpoint.outputs.grpc-endpoint }}
session-name: ${{ steps.bench.outputs.session-name }}
poll-duration-limit: ${{ matrix.polling-limit }}

- name: Upload benchmark results to artifact registry
uses: actions/upload-artifact@v4
with:
name: benchclient_benchmark_${{ github.event_name }}_${{ matrix.type }}_${{ github.run_id }}
path: ${{ steps.get-bench-stats.outputs.bench-file-path }}

- name: Upload benchmark results to s3
env:
EVENT_NAME: ${{ github.event_name }}
BENCH_RESULTS_PATH: ${{ steps.get-bench-stats.outputs.bench-file-path }}
TYPE: ${{ matrix.type }}
GHRUNID: ${{ github.run_id }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_EC2_METADATA_DISABLED: true
run: |
DATE=$(date +"%Y-%m-%d")
aws s3 cp "$BENCH_RESULTS_PATH" "s3://armonik-bench-storage/${FILE_PREFIX}/${GHRUNID}_${DATE}/benchclient_benchmark_${EVENT_NAME}_${TYPE}.json"
- if: ${{ (github.event_name == 'workflow_dispatch' && inputs.destroy-on-session-end) || (github.event_name != 'workflow_dispatch' && always()) }}
id: destroy
name: Destroy deployment
uses: aneoconsulting/ArmoniK.Action.Deploy/destroy@main
with:
type: ${{ matrix.type }}
prefix: ${{ env.prefix }}
parameters-file-path: ${{ env.parameters-file-path }}
10 changes: 10 additions & 0 deletions benchmarking/aws/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# ArmoniK benchmarking on AWS
This folder contains two Terraform configuration files : one describing the infrastructure that has been chosen as *ArmoniK reference infrastructure on AWS* that is used for regular benchmarks at each ArmoniK release, and an other describing the versions used for all the components when this reference infrastructure was established, notabely for reproducibility purposes.

### Base commit used
COMMIT SHA : [8e69cdd2f5ca8dd99652ce651bc4ff9eaa8776eb](https://github.com/aneoconsulting/ArmoniK/tree/8e69cdd2f5ca8dd99652ce651bc4ff9eaa8776eb)

### How to reproduce the original benchmark infrastructure ?
1. Go to AWS quick-deploy : `cd ../../infrastructure/quick-deploy/aws`

2. `make deploy PARAMETERS_FILE=benchmarking/aws/parameters.tfvars VERSIONS_FILE=benchmarking/aws/versions.tfvars.json`
Loading

0 comments on commit c5e410a

Please sign in to comment.