-
Notifications
You must be signed in to change notification settings - Fork 0
overall benchmark 2026 09 22
Merged main at 4e5ded3, Polars 1.44.2, Linux x86-64, 32 threads. pixi run -e oracle bench-polars --reps 7 checks row counts and checksums before reporting best warmed read/operation times. Ratios are Mojo / Polars; rows are sorted by the 1M-row ratio as requested. Times are milliseconds.
| Workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| grouped_str | 8.03 / 2.11 | 3.81x | 122.31 / 14.18 | 8.63x |
| filter | 7.06 / 3.84 | 1.84x | 44.91 / 7.04 | 6.38x |
| join_inner | 11.32 / 4.19 | 2.70x | 108.38 / 25.05 | 4.33x |
| sort_multi | 20.72 / 7.21 | 2.87x | 138.50 / 51.05 | 2.71x |
| grouped_high | 4.94 / 3.09 | 1.60x | 33.37 / 12.42 | 2.69x |
| global_sum | 0.24 / 0.14 | 1.71x | 0.58 / 0.24 | 2.42x |
| grouped_skew | 4.32 / 2.20 | 1.96x | 24.86 / 10.90 | 2.28x |
| grouped_low | 4.23 / 1.67 | 2.53x | 24.28 / 11.16 | 2.18x |
| arithmetic_chain | 2.36 / 3.59 | 0.66x | 7.99 / 3.86 | 2.07x |
| nullable_compare | 2.20 / 3.12 | 0.71x | 5.66 / 3.99 | 1.42x |
| csv_read | 5.66 / 2.39 | 2.37x | 18.32 / 16.45 | 1.11x |
The large-filter improvement merged in PR #167; this table remains the earlier merged-main baseline for judging each PR independently.
Current merged main at 869c2c0 plus the unmerged changes in PR #169, PR #170, and PR #171. Built as one optimized runner; bench-polars --reps 7 verified row counts and checksums against Polars 1.44.2. This is an integration checkpoint, not a new merged-main baseline. Ratios use the displayed rounded milliseconds and are sorted by the 1M ratio.
| Workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| join_inner | 12.98 / 4.06 | 3.20x | 115.17 / 26.66 | 4.32x |
| sort_multi | 22.66 / 6.98 | 3.25x | 143.18 / 52.56 | 2.72x |
| grouped_high | 5.27 / 2.84 | 1.86x | 33.25 / 14.28 | 2.33x |
| global_sum | 0.24 / 0.14 | 1.71x | 0.58 / 0.26 | 2.23x |
| filter | 7.25 / 4.49 | 1.61x | 14.65 / 7.14 | 2.05x |
| grouped_str | 4.94 / 2.02 | 2.45x | 29.49 / 14.81 | 1.99x |
| grouped_low | 4.16 / 1.82 | 2.29x | 22.44 / 12.17 | 1.84x |
| grouped_skew | 4.28 / 1.70 | 2.52x | 23.35 / 15.24 | 1.53x |
| arithmetic_chain | 2.35 / 3.19 | 0.74x | 8.17 / 5.57 | 1.47x |
| nullable_compare | 2.20 / 3.37 | 0.65x | 5.80 / 5.20 | 1.12x |
| csv_read | 5.79 / 2.59 | 2.24x | 19.12 / 19.83 | 0.96x |
Merged main at b3096ef plus the unmerged changes in PRs #170–#175. Polars 1.44.2, Linux x86-64, 32 threads. Each of three matched bench-polars --reps 7 runs checked row counts and checksums; cells are medians of the reported times. Ratios are median Mojo / median Polars and rows are sorted by the 1M ratio. This is an integration checkpoint, not a merged-main baseline.
| workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| global_sum | 0.24 / 0.12 | 2.00x | 0.59 / 0.24 | 2.46x |
| grouped_high | 5.31 / 2.86 | 1.86x | 32.00 / 15.51 | 2.06x |
| grouped_str | 4.96 / 2.16 | 2.30x | 29.66 / 15.35 | 1.93x |
| sort_multi | 16.75 / 7.46 | 2.25x | 99.48 / 52.23 | 1.90x |
| filter | 7.35 / 4.13 | 1.78x | 14.77 / 7.91 | 1.87x |
| grouped_low | 4.19 / 1.85 | 2.26x | 22.91 / 13.54 | 1.69x |
| grouped_skew | 4.30 / 2.40 | 1.79x | 23.67 / 14.03 | 1.69x |
| join_inner | 3.43 / 5.32 | 0.64x | 42.55 / 25.82 | 1.65x |
| arithmetic_chain | 2.40 / 4.39 | 0.55x | 8.37 / 5.53 | 1.51x |
| nullable_compare | 2.22 / 3.64 | 0.61x | 5.90 / 4.35 | 1.36x |
| csv_read | 5.66 / 2.63 | 2.15x | 18.79 / 18.95 | 0.99x |
Merged main at eb23bee plus the unmerged changes in PR #175, #176, #177, and #178. Polars 1.44.2, Linux x86-64, 32 threads. Each of three matched bench-polars --reps 7 runs checked row counts and checksums; cells are medians of reported times. Ratios are median Mojo / median Polars, sorted by the 1M ratio. This is an integration checkpoint, not a merged-main baseline.
| workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| arithmetic_chain | 2.36 / 3.51 | 0.67x | 8.31 / 3.96 | 2.10x |
| grouped_high | 4.72 / 2.64 | 1.79x | 28.09 / 13.74 | 2.04x |
| global_sum | 0.21 / 0.13 | 1.62x | 0.51 / 0.25 | 2.04x |
| filter | 7.24 / 4.33 | 1.67x | 14.89 / 7.59 | 1.96x |
| grouped_str | 4.40 / 1.86 | 2.37x | 29.80 / 15.39 | 1.94x |
| grouped_low | 3.60 / 1.84 | 1.96x | 22.62 / 13.25 | 1.71x |
| join_inner | 3.44 / 4.46 | 0.77x | 42.71 / 25.41 | 1.68x |
| sort_multi | 16.50 / 6.85 | 2.41x | 84.18 / 54.30 | 1.55x |
| grouped_skew | 3.74 / 1.91 | 1.96x | 23.57 / 15.68 | 1.50x |
| nullable_compare | 2.22 / 3.39 | 0.65x | 5.89 / 4.17 | 1.41x |
| csv_read | 5.80 / 2.53 | 2.29x | 19.99 / 17.17 | 1.16x |
Polars 1.44.2; 32 configured threads; each run uses best of seven timed repetitions and verifies rows/checksums. Merged main at eb23bee plus the unmerged changes in PRs #175–#178 and PR #180. This is an integration checkpoint, not a merged-main baseline. Ratios use median Mojo / median Polars.
| workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| global_sum | 0.14 / 0.13 | 1.08x | 0.52 / 0.23 | 2.26x |
| grouped_high | 4.08 / 2.99 | 1.36x | 28.04 / 13.41 | 2.09x |
| filter | 6.25 / 4.04 | 1.55x | 15.06 / 7.30 | 2.06x |
| grouped_str | 3.92 / 2.02 | 1.94x | 29.79 / 15.39 | 1.94x |
| join_inner | 3.24 / 4.99 | 0.65x | 48.45 / 27.05 | 1.79x |
| sort_multi | 15.97 / 7.06 | 2.26x | 87.30 / 53.40 | 1.63x |
| grouped_low | 3.12 / 1.76 | 1.77x | 23.12 / 14.22 | 1.63x |
| arithmetic_chain | 2.17 / 3.73 | 0.58x | 8.32 / 5.44 | 1.53x |
| grouped_skew | 3.22 / 2.30 | 1.40x | 23.69 / 16.28 | 1.46x |
| nullable_compare | 2.01 / 3.52 | 0.57x | 5.85 / 4.68 | 1.25x |
| csv_read | 4.93 / 2.57 | 1.92x | 20.13 / 16.91 | 1.19x |
Polars 1.44.2; 32 configured threads; each run uses best of seven timed repetitions and verifies rows/checksums. Merged main at eb23bee plus the unmerged changes in PRs #175–#178, #180, and #181. This is an integration checkpoint, not a merged-main baseline. Ratios use median Mojo / median Polars.
| workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| filter | 6.38 / 4.47 | 1.43x | 14.78 / 7.47 | 1.98x |
| grouped_high | 4.12 / 2.98 | 1.38x | 28.28 / 15.03 | 1.88x |
| grouped_str | 3.92 / 2.23 | 1.76x | 29.76 / 15.98 | 1.86x |
| join_inner | 3.24 / 5.11 | 0.63x | 47.11 / 26.78 | 1.76x |
| sort_multi | 15.82 / 7.29 | 2.17x | 87.95 / 52.65 | 1.67x |
| grouped_low | 3.10 / 1.96 | 1.58x | 23.41 / 14.29 | 1.64x |
| grouped_skew | 3.24 / 2.44 | 1.33x | 23.69 / 15.38 | 1.54x |
| arithmetic_chain | 2.20 / 3.96 | 0.56x | 8.44 / 5.59 | 1.51x |
| nullable_compare | 2.02 / 3.65 | 0.55x | 5.91 / 4.68 | 1.26x |
| csv_read | 4.99 / 2.64 | 1.89x | 20.07 / 16.64 | 1.21x |
| global_sum | 0.07 / 0.14 | 0.50x | 0.26 / 0.24 | 1.08x |
Polars 1.44.2; 32 configured threads; each run uses best of seven timed repetitions and verifies rows/checksums. Merged main at eb23bee plus the unmerged changes in PRs #175–#178, #180, #181, and #182. This is an integration checkpoint, not a merged-main baseline. Ratios use median Mojo / median Polars.
| workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| filter | 6.36 / 4.79 | 1.33x | 14.71 / 7.39 | 1.99x |
| grouped_high | 4.10 / 2.92 | 1.40x | 28.14 / 14.48 | 1.94x |
| grouped_str | 3.93 / 2.18 | 1.80x | 29.75 / 15.41 | 1.93x |
| sort_multi | 13.32 / 7.35 | 1.81x | 92.48 / 54.90 | 1.68x |
| grouped_low | 3.12 / 1.97 | 1.58x | 22.99 / 13.74 | 1.67x |
| arithmetic_chain | 2.19 / 3.81 | 0.57x | 8.44 / 5.62 | 1.50x |
| join_inner | 3.26 / 5.06 | 0.64x | 42.16 / 28.13 | 1.50x |
| grouped_skew | 3.23 / 2.37 | 1.36x | 23.87 / 16.14 | 1.48x |
| global_sum | 0.07 / 0.12 | 0.58x | 0.25 / 0.20 | 1.25x |
| nullable_compare | 2.02 / 3.72 | 0.54x | 5.89 / 4.76 | 1.24x |
| csv_read | 4.82 / 2.80 | 1.72x | 18.62 / 17.28 | 1.08x |
Polars 1.44.2; 32 configured threads; each run uses best of seven timed repetitions and verifies rows/checksums. Merged main at eb23bee plus the unmerged changes in PRs #175–#178 and #180–#183. This is an integration checkpoint, not a merged-main baseline. Five matched runs were used for this table. Ratios use median Mojo / median Polars.
| workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| grouped_high | 4.09 / 3.00 | 1.36x | 28.14 / 14.99 | 1.88x |
| grouped_str | 3.94 / 2.11 | 1.87x | 29.94 / 16.21 | 1.85x |
| join_inner | 3.27 / 4.94 | 0.66x | 46.47 / 25.58 | 1.82x |
| arithmetic_chain | 2.18 / 4.20 | 0.52x | 8.51 / 4.78 | 1.78x |
| sort_multi | 12.28 / 7.47 | 1.64x | 88.65 / 52.78 | 1.68x |
| grouped_low | 3.13 / 1.84 | 1.70x | 23.51 / 14.02 | 1.68x |
| grouped_skew | 3.24 / 2.23 | 1.45x | 23.92 / 16.16 | 1.48x |
| filter | 4.85 / 4.11 | 1.18x | 11.13 / 7.70 | 1.45x |
| nullable_compare | 2.01 / 3.41 | 0.59x | 5.90 / 4.53 | 1.30x |
| csv_read | 4.69 / 2.68 | 1.75x | 19.02 / 16.65 | 1.14x |
| global_sum | 0.07 / 0.15 | 0.47x | 0.25 / 0.27 | 0.93x |
Polars 1.44.2; 32 configured threads; each run uses best of seven timed repetitions and verifies rows/checksums. Merged main at eb23bee plus the unmerged changes in PRs #175–#178 and #180–#185. This is an integration checkpoint, not a merged-main baseline. Five matched runs were used for this table. Ratios use median Mojo / median Polars.
| workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| grouped_high | 4.08 / 2.99 | 1.36x | 27.99 / 13.65 | 2.05x |
| grouped_str | 3.92 / 2.06 | 1.90x | 29.81 / 15.14 | 1.97x |
| join_inner | 3.23 / 5.06 | 0.64x | 48.51 / 26.25 | 1.85x |
| grouped_low | 3.14 / 1.84 | 1.71x | 23.22 / 13.89 | 1.67x |
| sort_multi | 12.70 / 7.40 | 1.72x | 86.36 / 52.96 | 1.63x |
| filter | 4.87 / 4.76 | 1.02x | 11.16 / 6.95 | 1.61x |
| grouped_skew | 3.24 / 2.36 | 1.37x | 23.63 / 15.91 | 1.49x |
| arithmetic_chain | 1.38 / 4.34 | 0.32x | 7.99 / 5.47 | 1.46x |
| nullable_compare | 1.23 / 3.76 | 0.33x | 5.25 / 4.56 | 1.15x |
| csv_read | 4.73 / 2.95 | 1.60x | 18.68 / 17.27 | 1.08x |
| global_sum | 0.07 / 0.12 | 0.58x | 0.26 / 0.25 | 1.04x |
Merged main at eb23bee plus the unmerged performance changes in PRs #175–#178, #180–#186, and #187. The integrated optimized runner used Polars 1.44.2 and 32 threads on Linux x86-64. Five complete matched bench-polars --reps 7 runs checked row counts and checksums for each workload; each cell below is the median time across those five runs. Ratios use the unrounded median times and rows are sorted by the 1M ratio. This is an integration checkpoint; the PRs remain individually reviewable.
| Workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| grouped_high | 4.10 / 2.88 | 1.42x | 26.19 / 13.80 | 1.90x |
| grouped_str | 3.94 / 2.05 | 1.92x | 29.98 / 16.10 | 1.86x |
| grouped_low | 3.14 / 1.73 | 1.82x | 23.20 / 14.43 | 1.61x |
| sort_multi | 13.38 / 7.20 | 1.86x | 84.09 / 53.00 | 1.59x |
| join_inner | 3.27 / 4.82 | 0.68x | 41.28 / 26.45 | 1.56x |
| grouped_skew | 3.23 / 2.17 | 1.49x | 23.90 / 15.73 | 1.52x |
| arithmetic_chain | 1.39 / 4.85 | 0.29x | 8.07 / 5.55 | 1.45x |
| filter | 4.87 / 4.15 | 1.17x | 11.17 / 7.78 | 1.44x |
| csv_read | 4.87 / 2.61 | 1.87x | 19.00 / 17.82 | 1.07x |
| nullable_compare | 1.20 / 3.66 | 0.33x | 5.30 / 5.04 | 1.05x |
| global_sum | 0.07 / 0.13 | 0.54x | 0.26 / 0.27 | 0.96x |
The narrowest 100k margin is grouped_str at 1.92x. Individual runs vary, and CI on the newest PRs is still pending at this checkpoint.
Merged main at eb23bee plus the unmerged performance changes in PRs #175–#178 and #180–#189. The optimized runner used Polars 1.44.2 and 32 threads on Linux x86-64. Five complete matched bench-polars --reps 7 runs checked row counts and checksums; each cell is the median time across runs. Ratios use unrounded medians and rows are sorted by the 1M ratio. These PRs remain individually reviewable.
| Workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| grouped_high | 4.10 / 2.95 | 1.39x | 26.06 / 13.53 | 1.93x |
| join_inner | 3.29 / 5.26 | 0.63x | 49.16 / 26.16 | 1.88x |
| grouped_low | 3.13 / 1.96 | 1.60x | 23.15 / 13.61 | 1.70x |
| sort_multi | 12.84 / 7.07 | 1.82x | 87.90 / 54.46 | 1.61x |
| grouped_skew | 3.24 / 2.32 | 1.40x | 23.96 / 15.92 | 1.51x |
| filter | 4.86 / 4.87 | 1.00x | 11.40 / 7.88 | 1.45x |
| arithmetic_chain | 1.39 / 3.67 | 0.38x | 6.52 / 5.64 | 1.16x |
| global_sum | 0.07 / 0.13 | 0.54x | 0.25 / 0.22 | 1.14x |
| nullable_compare | 1.22 / 3.83 | 0.32x | 5.24 / 4.94 | 1.06x |
| csv_read | 4.74 / 2.76 | 1.72x | 18.26 / 17.57 | 1.04x |
| grouped_str | 3.93 / 2.09 | 1.88x | 15.11 / 15.48 | 0.98x |
The largest default median ratio is now 1.93x at 1M grouped_high. Separate 10M scaling remains a more demanding check, especially filter and join.
Merged main at eb23bee plus the unmerged performance changes in PRs #175–#178 and #180–#191. The optimized runner used Polars 1.44.2 and 32 threads on Linux x86-64. Five complete matched bench-polars --reps 7 runs checked row counts and checksums; each cell is the median time across runs. Ratios use unrounded medians and rows are sorted by the 1M ratio. These PRs remain individually reviewable.
| Workload | 100k Mojo / Polars | 100k ratio | 1M Mojo / Polars | 1M ratio |
|---|---|---|---|---|
| grouped_high | 4.09 / 2.81 | 1.46x | 26.29 / 14.04 | 1.87x |
| grouped_low | 3.10 / 1.81 | 1.71x | 23.19 / 13.54 | 1.71x |
| sort_multi | 13.54 / 7.56 | 1.79x | 84.91 / 54.85 | 1.55x |
| filter | 4.81 / 4.14 | 1.16x | 11.42 / 7.52 | 1.52x |
| grouped_skew | 3.22 / 2.35 | 1.37x | 23.69 / 16.01 | 1.48x |
| global_sum | 0.07 / 0.12 | 0.58x | 0.26 / 0.20 | 1.30x |
| nullable_compare | 1.23 / 3.48 | 0.35x | 5.24 / 4.44 | 1.18x |
| arithmetic_chain | 1.38 / 3.69 | 0.37x | 6.43 / 5.72 | 1.12x |
| csv_read | 4.76 / 2.76 | 1.72x | 17.69 / 16.86 | 1.05x |
| grouped_str | 3.93 / 2.09 | 1.88x | 15.01 / 15.17 | 0.99x |
| join_inner | 0.80 / 4.96 | 0.16x | 9.34 / 26.34 | 0.35x |
All 22 default cells have median ratios below 2x. The largest 1M median is grouped_high at 1.87x; the largest 100k median is grouped_str at 1.88x.