Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
2e834a9
feat(bench): run the random access benchmark against S3
claude Aug 14, 2026
0146dac
fix(bench): enable Lance's aws feature for S3 random access
claude Aug 14, 2026
d111cb5
fix(bench): size random-access row groups so lookups don't read whole…
claude Aug 14, 2026
752f11c
fix(bench): use the non-deprecated row group row count setter
claude Aug 14, 2026
e5cdea3
fix(bench): adapt the S3 random access reader to parquet 59
claude Sep 4, 2026
8055869
fix(bench): write random-access parquet with zstd level 3
claude Sep 30, 2026
f5eb8d2
docs(bench): document the S3 random access label and tidy the runner …
joseph-isaacs Sep 30, 2026
836c5bf
refactor(bench): simplify the random access S3 plumbing
joseph-isaacs Sep 30, 2026
645fe98
fix(bench): skip Arrow IPC in remote random access runs
joseph-isaacs Sep 30, 2026
5700b5a
fix(bench): write random-access Parquet with row groups and zstd
joseph-isaacs Sep 30, 2026
764de98
Merge branch 'ji/random-access-parquet-row-groups' into claude/random…
joseph-isaacs Sep 30, 2026
2036089
fix(bench): keep default row group and page sizes for random-access P…
joseph-isaacs Sep 30, 2026
3e9ef88
Merge branch 'ji/random-access-parquet-row-groups' into claude/random…
joseph-isaacs Sep 30, 2026
70eb08b
Merge remote-tracking branch 'origin/develop' into claude/random-acce…
joseph-isaacs Oct 1, 2026
81a1fe6
fix(bench): keep S3 random-access ingest rows apart from local disk
joseph-isaacs Oct 2, 2026
294c5cb
Merge remote-tracking branch 'origin/develop' into claude/random-acce…
joseph-isaacs Oct 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 31 additions & 8 deletions .github/workflows/develop-bench.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ jobs:
timeout-minutes: 120
runs-on: >-
${{ github.repository == 'vortex-data/vortex'
&& format('runs-on={0}/runner=bench-dedicated/family=c8gd.metal-24xl/image=ubuntu24-full-arm64-pre-v2/extras=s3-cache/tag={1}', github.run_id, matrix.benchmark.id)
&& format('runs-on={0}/runner=bench-dedicated/family=c8gd.metal-24xl/image=ubuntu24-full-arm64-pre-v2/extras=s3-cache/tag={1}{2}', github.run_id, matrix.benchmark.id, matrix.benchmark.variant_id)
|| 'ubuntu-latest' }}
strategy:
fail-fast: false
Expand All @@ -93,6 +93,14 @@ jobs:
name: Random Access
build_args: "--features lance"
v4_ingest: true
# Same benchmark, reading the data from S3 instead of local NVMe.
- id: random-access-bench
variant_id: "-s3"
name: Random Access (S3)
build_args: "--features lance"
v4_ingest: true
remote_data_dir: >-
s3://vortex-ci-benchmark-datasets/develop/random-access/
- id: compress-bench
name: Compression
build_args: "--features lance"
Expand Down Expand Up @@ -135,6 +143,25 @@ jobs:
extra_args: "--debuginfo-strip=false"
parca_agent_version: "0.49.0"

- name: Setup AWS CLI
uses: aws-actions/configure-aws-credentials@e1253824e5c10ff9df46874f81ed3ec929e19cfd # v6
with:
role-to-assume: arn:aws:iam::245040174862:role/GitHubBenchmarkRole
aws-region: us-east-1

- name: Upload benchmark data to S3
if: matrix.benchmark.remote_data_dir != null
shell: bash
env:
AWS_REGION: "us-east-1"
run: |
set -Eeu -o pipefail -x

target/release_debug/${{ matrix.benchmark.id }} --prepare-data \
--formats parquet,vortex,lance
aws s3 rm --recursive "${{ matrix.benchmark.remote_data_dir }}"
aws s3 cp --recursive vortex-bench/data "${{ matrix.benchmark.remote_data_dir }}"

- name: Setup benchmark environment
run: sudo bash scripts/setup-benchmark.sh

Expand All @@ -144,8 +171,10 @@ jobs:
env:
RUST_BACKTRACE: full
FLAT_LAYOUT_INLINE_ARRAY_NODE: "1"
AWS_REGION: "us-east-1"
run: |
python3 scripts/random-access-split.py --emit-ingest-records
python3 scripts/random-access-split.py --emit-ingest-records \
${{ matrix.benchmark.remote_data_dir && format('--remote-data-dir {0}', matrix.benchmark.remote_data_dir) || '' }}

- name: Run ${{ matrix.benchmark.name }} benchmark (per-dataset)
if: matrix.benchmark.id == 'compress-bench'
Expand All @@ -165,12 +194,6 @@ jobs:
run: |
python3 scripts/string-split.py

- name: Setup AWS CLI
uses: aws-actions/configure-aws-credentials@e1253824e5c10ff9df46874f81ed3ec929e19cfd # v6
with:
role-to-assume: arn:aws:iam::245040174862:role/GitHubBenchmarkRole
aws-region: us-east-1

- name: Upload Benchmark Results
shell: bash
run: |
Expand Down
21 changes: 21 additions & 0 deletions .github/workflows/pr-bench-dispatch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ jobs:
uses: ./.github/workflows/pr-bench-random-access.yml
secrets: inherit

all-random-access-s3-bench:
needs: remove-all-label
uses: ./.github/workflows/pr-bench-random-access-s3.yml
secrets: inherit

all-compression-bench:
needs: remove-all-label
uses: ./.github/workflows/pr-bench-compress.yml
Expand Down Expand Up @@ -68,6 +73,22 @@ jobs:
uses: ./.github/workflows/pr-bench-random-access.yml
secrets: inherit

remove-random-access-s3-label:
runs-on: ubuntu-latest
timeout-minutes: 10
if: github.event.label.name == 'action/bench-random-access-s3'
steps:
- uses: actions-ecosystem/action-remove-labels@2ce5d41b4b6aa8503e285553f75ed56e0a40bae0 # v1
if: github.event.pull_request.head.repo.full_name == 'vortex-data/vortex'
with:
labels: action/bench-random-access-s3
fail_on_error: true

random-access-s3-bench:
needs: remove-random-access-s3-label
uses: ./.github/workflows/pr-bench-random-access-s3.yml
secrets: inherit

remove-compress-label:
runs-on: ubuntu-latest
timeout-minutes: 10
Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/pr-bench-random-access-s3.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Runs the random-access benchmark for a pull request, reading the data from S3.

name: PR Random Access S3 Benchmark

on:
workflow_call: { }
workflow_dispatch: { }

permissions:
contents: read
pull-requests: write # for commenting on PRs
id-token: write # enables AWS-GitHub OIDC

jobs:
bench:
uses: ./.github/workflows/pr-bench-runner.yml
secrets: inherit
with:
benchmark_id: random-access-bench
benchmark_name: Random Access (S3)
with_lance: true
variant_id: "-s3"
remote_data_dir: >-
s3://vortex-ci-benchmark-datasets/${{ github.ref_name }}/${{ github.run_id }}/random-access/
58 changes: 47 additions & 11 deletions .github/workflows/pr-bench-runner.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ name: PR Benchmark Runner

concurrency:
# The group causes runs to queue instead of running in parallel.
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}-${{ inputs.benchmark_id }}
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}-${{ inputs.benchmark_id }}${{ inputs.variant_id }}
# Don't cancel benchmarks that are already running, instead just queue them up.
cancel-in-progress: false

Expand All @@ -21,6 +21,20 @@ on:
required: false
type: boolean
default: false
variant_id:
description: >-
Suffix distinguishing runs of the same benchmark, e.g. "-s3". Keeps the PR comment
tag and the concurrency group of a variant separate from the default run.
required: false
type: string
default: ""
remote_data_dir:
description: >-
When set, the benchmark data is uploaded to this S3 prefix and read back from there
instead of local disk. Only supported by random-access-bench.
required: false
type: string
default: ""

permissions:
contents: read
Expand Down Expand Up @@ -122,6 +136,26 @@ jobs:
extra_args: "--debuginfo-strip=false"
parca_agent_version: "0.49.0"

- name: Setup AWS CLI
if: github.event.pull_request.head.repo.fork == false
uses: aws-actions/configure-aws-credentials@e1253824e5c10ff9df46874f81ed3ec929e19cfd # v6
with:
role-to-assume: arn:aws:iam::245040174862:role/GitHubBenchmarkRole
aws-region: us-east-1

- name: Upload benchmark data to S3
if: inputs.remote_data_dir != '' && github.event.pull_request.head.repo.fork == false
shell: bash
env:
AWS_REGION: "us-east-1"
run: |
set -Eeu -o pipefail -x

target/release_debug/${{ inputs.benchmark_id }} --prepare-data \
--formats ${{ inputs.with_lance && 'parquet,vortex,lance' || 'parquet,vortex' }}
aws s3 rm --recursive "${{ inputs.remote_data_dir }}"
aws s3 cp --recursive vortex-bench/data "${{ inputs.remote_data_dir }}"

- name: Setup benchmark environment
run: sudo bash scripts/setup-benchmark.sh

Expand All @@ -131,8 +165,10 @@ jobs:
env:
RUST_BACKTRACE: full
FLAT_LAYOUT_INLINE_ARRAY_NODE: "1"
AWS_REGION: "us-east-1"
run: |
python3 scripts/random-access-split.py
python3 scripts/random-access-split.py \
${{ inputs.remote_data_dir != '' && format('--remote-data-dir {0}', inputs.remote_data_dir) || '' }}

- name: Run ${{ inputs.benchmark_name }} benchmark (per-dataset)
if: inputs.benchmark_id == 'compress-bench'
Expand All @@ -152,13 +188,6 @@ jobs:
run: |
python3 scripts/string-split.py

- name: Setup AWS CLI
if: github.event.pull_request.head.repo.fork == false
uses: aws-actions/configure-aws-credentials@e1253824e5c10ff9df46874f81ed3ec929e19cfd # v6
with:
role-to-assume: arn:aws:iam::245040174862:role/GitHubBenchmarkRole
aws-region: us-east-1

- name: Install uv
uses: spiraldb/actions/.github/actions/setup-uv@a746510eafaa926484c354541cfc49b2ec06cc63 # 0.18.6
with:
Expand All @@ -181,7 +210,7 @@ jobs:
uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3
with:
file-path: comment.md
comment-tag: bench-pr-comment-${{ inputs.benchmark_id }}
comment-tag: bench-pr-comment-${{ inputs.benchmark_id }}${{ inputs.variant_id }}

- name: Comment PR on failure
if: failure() && github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork == false
Expand All @@ -191,4 +220,11 @@ jobs:
# BENCHMARK FAILED

Benchmark `${{ inputs.benchmark_name }}` failed! Check the [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
comment-tag: bench-pr-comment-${{ inputs.benchmark_id }}
comment-tag: bench-pr-comment-${{ inputs.benchmark_id }}${{ inputs.variant_id }}

- name: Delete benchmark data from S3
if: always() && inputs.remote_data_dir != '' && github.event.pull_request.head.repo.fork == false
shell: bash
env:
AWS_REGION: "us-east-1"
run: aws s3 rm --recursive "${{ inputs.remote_data_dir }}"
Loading
Loading