| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- name: benchmark-ab
- # Manual A/B throughput comparison between two refs.
- #
- # This is a measurement, not a test: it never fails the build on a slow result.
- # Absolute req/s from a shared runner is meaningless on its own, so both refs
- # are built and measured alternately in the same job and only the ratio of the
- # medians is reported, with a permutation test to say whether the difference
- # stands out from the run-to-run noise.
- #
- # Non-SSL and Linux only for now.
- on:
- workflow_dispatch:
- inputs:
- base:
- description: "Baseline ref"
- required: false
- default: "origin/master"
- head:
- description: "Ref to compare (defaults to the ref this run was started on)"
- required: false
- default: ""
- rounds:
- description: "Measurement rounds per ref (9+ recommended; below 4 the test can never reach significance)"
- required: false
- default: "9"
- duration:
- description: "Load duration per measurement"
- required: false
- default: "5s"
- connections:
- description: "Concurrent connections"
- required: false
- default: "10"
- permissions:
- contents: read
- jobs:
- ubuntu:
- runs-on: ubuntu-latest
- steps:
- - name: checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
- - name: install bombardier
- run: go install github.com/codesenberg/bombardier@latest
- - name: run A/B benchmark
- run: |
- export PATH="$(go env GOPATH)/bin:$PATH"
- HEAD_REF="${{ inputs.head }}"
- if [ -z "$HEAD_REF" ]; then HEAD_REF="${{ github.sha }}"; fi
- ./benchmark/ab.sh \
- --base "${{ inputs.base }}" \
- --head "$HEAD_REF" \
- --rounds "${{ inputs.rounds }}" \
- --duration "${{ inputs.duration }}" \
- --connections "${{ inputs.connections }}"
|