Skip to content

Add benchmark suite#526

Merged
evertlammerts merged 7 commits into
duckdb:mainfrom
evertlammerts:perf/codspeed
Jul 2, 2026
Merged

Add benchmark suite#526
evertlammerts merged 7 commits into
duckdb:mainfrom
evertlammerts:perf/codspeed

Conversation

@evertlammerts

Copy link
Copy Markdown
Member

No description provided.

Nine modules over the duckdb-python binding hot paths: fetch (OUT-row),
arrow, pandas, produce_numpy (df/fetchnumpy columnar), ingest_native
(values/executemany), ingest_numpy (numpy scan + analyzer bind), udf (native +
vectorized arrow), types_roundtrip (type x direction matrix), cardinality
(LIMIT sweep). Full-consume discipline, warmup, real-null gotchas, tracemalloc
memory guard. See benchmarks/PLAN.md. Standalone (not yet wired into CI).
Cardinality: the ORDER BY ... LIMIT n sweep let the engine top-N sort dominate
and swamp the per-row conversion signal (numbers were non-monotone). Replace it
with a pre-materialized fixed source + plain LIMIT n (no sort): the scan
early-stops at n rows, so rows-to-Python conversion is the dominant n-varying
cost and the slope is monotone; the A/B delta at each n isolates the binding.

CI: .github/workflows/codspeed.yml runs the suite under CodSpeed simulation
(instruction-count) mode on Linux, tokenless (no dashboard upload; enable the
hosted gate later via a CodSpeed project + OIDC/token). Instruction counts are
deterministic for every benchmark, so no gated/informational split is needed.
Not yet run in CI; the build steps mirror the dev build and need a shakeout.
@evertlammerts evertlammerts merged commit fa5e974 into duckdb:main Jul 2, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant