Skip to content

Limit and monitor warmup memory usage #1812

Limit and monitor warmup memory usage

Limit and monitor warmup memory usage #1812

Workflow file for this run

name: CBENCH
on:
workflow_dispatch:
push:
branches:
- main
paths:
- "quickwit/**"
- "!quickwit/quickwit-ui/**"
# For security reasons (to make sure the list of allowed users is
# trusted), make sure we run the workflow definition from the base
# commit of the pull request.
pull_request_target:
# This is required for github.rest.issues.createComment.
permissions:
issues: write
pull-requests: write
env:
RUSTFLAGS: --cfg tokio_unstable
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
tests:
name: Benchmark
# The self-hosted runner must have the system deps installed for QW and
# the benchmark, because we don't have root access.
runs-on: self-hosted
timeout-minutes: 60
steps:
- name: Set authorized users
id: authorized-users
# List of users allowed to trigger this workflow.
# Because it executes code on a self-hosted runner, it must be restricted to trusted users.
run: |
echo 'users=["ddelemeny", "fmassot", "fulmicoton", "guilload", "PSeitz", "rdettai", "trinity-1686a"]' >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor) && github.event_name == 'pull_request_target'
name: Checkout quickwit (pull request commit)
with:
repository: quickwit-oss/quickwit
ref: ${{ github.event.pull_request.head.sha }}
path: ./quickwit
- uses: actions/checkout@v4
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor) && github.event_name != 'pull_request_target'
name: Checkout quickwit
with:
repository: quickwit-oss/quickwit
ref: ${{ github.sha }}
path: ./quickwit
- name: Checkout benchmarking code
uses: actions/checkout@v4
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor)
with:
repository: quickwit-oss/benchmarks
ref: main
path: ./benchmarks
- name: Install Rust
run: rustup update stable
- name: Install protoc
uses: taiki-e/install-action@v2
with:
tool: protoc
# We don't use rust-cache as it requires root access on the self-hosted runner, which we don't have.
- name: cargo build
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor)
run: cargo build --release --bin quickwit
working-directory: ./quickwit/quickwit
- name: Compile qbench
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor)
run: cargo build --release
working-directory: ./benchmarks/qbench
- name: Run Benchmark on SSD
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor)
id: bench-run-ssd
run: python3 ./run.py --search-only --storage pd-ssd --engine quickwit --track generated-logs --tags "${{ github.event_name }}_${{ github.ref_name }}" --manage-engine --source github_workflow --binary-path ../quickwit/quickwit/target/release/quickwit --instance "{autodetect_gcp}" --export-to-endpoint=https://qw-benchmarks.104.155.161.122.nip.io --engine-data-dir "{qwdata_local}" --github-workflow-user "${{ github.actor }}" --github-workflow-run-id "${{ github.run_id }}" --comparison-reference-tag="push_main" --github-pr "${{ github.event_name == 'pull_request_target' && github.event.number || 0 }}" --comparison-reference-commit "${{ github.event_name == 'pull_request_target' && github.sha || github.event.before }}" --write-exported-run-url-to-file $GITHUB_OUTPUT
working-directory: ./benchmarks
- name: Run Benchmark on cloud storage
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor)
id: bench-run-cloud-storage
run: python3 ./run.py --search-only --storage gcs --engine quickwit --track generated-logs --tags "${{ github.event_name }}_${{ github.ref_name }}" --manage-engine --source github_workflow --binary-path ../quickwit/quickwit/target/release/quickwit --instance "{autodetect_gcp}" --export-to-endpoint=https://qw-benchmarks.104.155.161.122.nip.io --engine-data-dir "{qwdata_gcs}" --engine-config-file engines/quickwit/configs/cbench_quickwit_gcs.yaml --github-workflow-user "${{ github.actor }}" --github-workflow-run-id "${{ github.run_id }}" --comparison-reference-tag="push_main" --github-pr "${{ github.event_name == 'pull_request_target' && github.event.number || 0 }}" --comparison-reference-commit "${{ github.event_name == 'pull_request_target' && github.sha || github.event.before }}" --write-exported-run-url-to-file $GITHUB_OUTPUT
working-directory: ./benchmarks
- name: Show results links
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor)
run: |
echo "::notice title=Benchmark Results on SSD::${{ steps.bench-run-ssd.outputs.url }}"
echo "::notice title=Comparison of results on SSD::${{ steps.bench-run-ssd.outputs.comparison_text }}"
echo "::notice title=Benchmark Results on Cloud Storage::${{ steps.bench-run-cloud-storage.outputs.url }}"
echo "::notice title=Comparison of results on Cloud Storage::${{ steps.bench-run-cloud-storage.outputs.comparison_text }}"
- name: In case of auth error
if: ${{ ! contains(fromJSON(steps.authorized-users.outputs.users), github.actor) }}
run: |
echo "::error title=User not allowed to run the benchmark::User must be in list ${{ steps.authorized-users.outputs.users }}"
- name: Add a PR comment with comparison results
uses: actions/github-script@v7
if: contains(fromJSON(steps.authorized-users.outputs.users), github.actor) && github.event_name == 'pull_request_target'
# Inspired from: https://github.com/actions/github-script/blob/60a0d83039c74a4aee543508d2ffcb1c3799cdea/.github/workflows/pull-request-test.yml
with:
script: |
// Get the existing comments.
const {data: comments} = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.number,
})
// Find any comment already made by the bot to update it.
const botComment = comments.find(comment => comment.user.id === 41898282)
const commentBody = "### On SSD:\n${{ steps.bench-run-ssd.outputs.comparison_text }}\n### On GCS:\n${{ steps.bench-run-cloud-storage.outputs.comparison_text }}\n"
if (botComment) {
// Update existing comment.
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: commentBody
})
} else {
// New comment.
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.number,
body: commentBody
})
}