Use plain functions instead of vtab in duckdb#8102
Conversation
f571652 to
06b11f1
Compare
Merging this PR will not alter performance
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | chunked_varbinview_canonical_into[(100, 100)] |
273.2 µs | 307.9 µs | -11.28% |
| ⚡ | Simulation | chunked_varbinview_opt_canonical_into[(1000, 10)] |
225.1 µs | 187.8 µs | +19.87% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing myrrc/duckdb-no-vtab (63d9fb9) with develop (94d1f5a)
Polar Signals Profiling ResultsLatest Run
Previous Runs (2)
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals ProfilingVortex (geomean): 1.092x ➖ datafusion / vortex-file-compressed (1.092x ➖, 0↑ 4↓)
|
File Sizes: PolarSignals ProfilingNo file size changes detected. |
Benchmarks: FineWeb NVMeVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.016x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.021x ➖, 0↑ 0↓)
datafusion / parquet (1.001x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.000x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.987x ➖, 0↑ 0↓)
duckdb / parquet (1.018x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: FineWeb NVMeNo file size changes detected. |
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.021x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.017x ➖, 0↑ 0↓)
datafusion / parquet (1.009x ➖, 1↑ 2↓)
datafusion / arrow (1.009x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (1.003x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.008x ➖, 0↑ 0↓)
duckdb / parquet (0.982x ➖, 3↑ 1↓)
duckdb / duckdb (1.007x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: TPC-H SF=1 on NVMENo file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.988x ➖, 1↑ 0↓)
datafusion / vortex-compact (0.982x ➖, 4↑ 0↓)
datafusion / parquet (0.998x ➖, 1↑ 2↓)
duckdb / vortex-file-compressed (1.006x ➖, 1↑ 3↓)
duckdb / vortex-compact (1.000x ➖, 0↑ 0↓)
duckdb / parquet (0.984x ➖, 2↑ 1↓)
duckdb / duckdb (1.019x ➖, 1↑ 3↓)
Full attributed analysis
|
File Sizes: TPC-DS SF=1 on NVMENo file size changes detected. |
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.027x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.022x ➖, 0↑ 0↓)
datafusion / parquet (1.027x ➖, 0↑ 0↓)
datafusion / arrow (1.025x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.014x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.017x ➖, 0↑ 0↓)
duckdb / parquet (1.012x ➖, 0↑ 0↓)
duckdb / duckdb (1.008x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: TPC-H SF=10 on NVMENo file size changes detected. |
Benchmarks: Clickbench on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.093x ➖, 1↑ 22↓)
datafusion / parquet (1.086x ➖, 0↑ 18↓)
duckdb / vortex-file-compressed (1.062x ➖, 2↑ 13↓)
duckdb / parquet (1.040x ➖, 1↑ 1↓)
duckdb / duckdb (1.054x ➖, 0↑ 4↓)
Full attributed analysis
|
File Sizes: Clickbench on NVMEFile Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=10 on S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.004x ➖, 2↑ 2↓)
datafusion / vortex-compact (1.001x ➖, 0↑ 1↓)
datafusion / parquet (0.957x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.150x ➖, 0↑ 2↓)
duckdb / vortex-compact (1.116x ➖, 0↑ 1↓)
duckdb / parquet (1.126x ➖, 0↑ 2↓)
Full attributed analysis
|
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (0.964x ➖, 1↑ 1↓)
datafusion / vortex-compact (0.876x ➖, 2↑ 0↓)
datafusion / parquet (0.716x ➖, 2↑ 1↓)
duckdb / vortex-file-compressed (1.112x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.075x ➖, 0↑ 1↓)
duckdb / parquet (1.018x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (low confidence) duckdb / vortex-file-compressed (1.007x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.004x ➖, 0↑ 0↓)
duckdb / parquet (1.022x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: Statistical and Population GeneticsNo file size changes detected. |
Benchmarks: TPC-H SF=1 on S3Verdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.942x ➖, 1↑ 0↓)
datafusion / vortex-compact (0.896x ➖, 3↑ 0↓)
datafusion / parquet (0.972x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.075x ➖, 0↑ 2↓)
duckdb / vortex-compact (1.058x ➖, 0↑ 0↓)
duckdb / parquet (1.015x ➖, 0↑ 0↓)
Full attributed analysis
|
06b11f1 to
4b1547e
Compare
4b1547e to
63d9fb9
Compare
| use crate::duckdb::TableFilterSet; | ||
| use crate::duckdb::TableFilterSetRef; | ||
|
|
||
| pub struct TableInitInput<'a> { |
There was a problem hiding this comment.
You can use #[repr(transparent)] if you want a transparent wrapper on which you can impl your own fns but where you don't need field access indirection by the way.
Remove vtab in favour of plain functions. We already exported them as C functions, so the change was purely removing mangling.
With vtab we had Rust-side functions duplicated 2 times (1 for ordinary scan and 1 for list scan). Remove duplication as well.
Split projection, ffi, and wrappers into their own respective files.