Skip to content

Dynamic work scheduling in FileStream#21351

Open
alamb wants to merge 2 commits intoapache:mainfrom
alamb:alamb/reschedule_io
Open

Dynamic work scheduling in FileStream#21351
alamb wants to merge 2 commits intoapache:mainfrom
alamb:alamb/reschedule_io

Conversation

@alamb
Copy link
Copy Markdown
Contributor

@alamb alamb commented Apr 3, 2026

Which issue does this PR close?

Rationale for this change

This PR finally enables dynamic work scheduling in the FileStream (so that if a task is done it can look at any remaining work)

This improves performance on queries that scan multiple files and the work is not balanced evenly across partitions in the plan (e.g. we have dynamic filtering that reduces work significantly)

It is the last of a sequence of several PRs:

What changes are included in this PR?

  1. Add shared state across sibling FileStream's and the wiring to connect them
  2. Sibling streams put their file work into a shared queue when it can be reordered
  3. Add a bunch of tests sjpw

Note there are a bunch of other things that are NOT included in this PR, including

  1. Trying to limit concurrent IO (this PR has the same properties as main -- up to one outstanding IO per partition)
  2. Trying to issue multiple IOs by the same partition (aka to interleave IO and CPU work more)
  3. Splitting files into smaller units (e.g. across row groups)

As @Dandandan proposes below, I expect we can work on those changes as follow on PRs.

Are these changes tested?

Yes by existing functional and benchmark tests, as well as new functional tests

Are there any user-facing changes?

Yes, faster performance (see benchmarks): #21351 (comment)

@github-actions github-actions bot added the datasource Changes to the datasource crate label Apr 3, 2026
@alamb alamb force-pushed the alamb/reschedule_io branch 2 times, most recently from 9789b9f to d5c4c5f Compare April 6, 2026 11:04
@alamb

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@alamb

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@alamb

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@adriangbot

This comment has been minimized.

@Dandandan

This comment has been minimized.

@adriangbot

This comment has been minimized.

@Dandandan
Copy link
Copy Markdown
Contributor

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)

Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Details

Comparing HEAD and alamb_reschedule_io
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                   alamb_reschedule_io ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.30 / 4.56 ±6.37 / 17.29 ms │          1.31 / 4.55 ±6.35 / 17.25 ms │     no change │
│ QQuery 1  │        14.65 / 15.05 ±0.29 / 15.56 ms │        12.00 / 12.42 ±0.27 / 12.83 ms │ +1.21x faster │
│ QQuery 2  │        44.23 / 44.61 ±0.42 / 45.39 ms │        35.97 / 36.54 ±0.31 / 36.90 ms │ +1.22x faster │
│ QQuery 3  │        43.10 / 44.46 ±1.35 / 46.69 ms │        34.41 / 35.17 ±0.70 / 36.12 ms │ +1.26x faster │
│ QQuery 4  │     293.78 / 305.01 ±7.65 / 316.85 ms │     260.16 / 263.55 ±4.78 / 272.96 ms │ +1.16x faster │
│ QQuery 5  │     348.16 / 352.47 ±4.23 / 358.82 ms │     302.86 / 308.72 ±5.56 / 319.27 ms │ +1.14x faster │
│ QQuery 6  │           5.80 / 6.57 ±0.63 / 7.63 ms │           6.62 / 7.86 ±0.78 / 8.75 ms │  1.20x slower │
│ QQuery 7  │        17.11 / 17.74 ±0.66 / 18.58 ms │        13.90 / 14.35 ±0.39 / 14.93 ms │ +1.24x faster │
│ QQuery 8  │     420.14 / 429.93 ±8.45 / 444.77 ms │    378.42 / 390.37 ±11.88 / 408.19 ms │ +1.10x faster │
│ QQuery 9  │     663.03 / 672.84 ±5.72 / 680.54 ms │    521.39 / 531.97 ±10.80 / 552.34 ms │ +1.26x faster │
│ QQuery 10 │        92.14 / 94.93 ±2.52 / 99.25 ms │        76.47 / 77.79 ±1.46 / 80.45 ms │ +1.22x faster │
│ QQuery 11 │     104.15 / 105.38 ±0.69 / 106.30 ms │        86.41 / 87.26 ±0.97 / 89.08 ms │ +1.21x faster │
│ QQuery 12 │     357.65 / 366.42 ±6.72 / 373.88 ms │     297.51 / 304.37 ±4.38 / 309.09 ms │ +1.20x faster │
│ QQuery 13 │     458.02 / 470.34 ±9.64 / 480.11 ms │    428.91 / 443.12 ±10.92 / 458.50 ms │ +1.06x faster │
│ QQuery 14 │     354.42 / 359.89 ±4.07 / 367.09 ms │     305.02 / 314.80 ±6.65 / 325.44 ms │ +1.14x faster │
│ QQuery 15 │    370.27 / 382.31 ±15.57 / 412.33 ms │    332.09 / 345.10 ±15.11 / 373.91 ms │ +1.11x faster │
│ QQuery 16 │    734.79 / 751.32 ±12.64 / 771.68 ms │    690.14 / 723.75 ±56.61 / 836.78 ms │     no change │
│ QQuery 17 │    721.23 / 731.36 ±10.62 / 751.20 ms │    686.92 / 718.61 ±57.67 / 833.81 ms │     no change │
│ QQuery 18 │ 1418.87 / 1491.07 ±39.56 / 1534.75 ms │ 1378.18 / 1409.22 ±49.85 / 1508.29 ms │ +1.06x faster │
│ QQuery 19 │        36.52 / 38.08 ±1.80 / 40.51 ms │      32.21 / 62.83 ±37.79 / 137.37 ms │  1.65x slower │
│ QQuery 20 │    723.14 / 740.27 ±16.11 / 760.99 ms │    513.72 / 527.72 ±10.71 / 544.27 ms │ +1.40x faster │
│ QQuery 21 │     767.80 / 774.94 ±6.76 / 787.66 ms │     597.68 / 606.11 ±7.93 / 618.51 ms │ +1.28x faster │
│ QQuery 22 │  1131.51 / 1137.57 ±7.04 / 1151.24 ms │ 1062.84 / 1072.76 ±10.36 / 1091.17 ms │ +1.06x faster │
│ QQuery 23 │ 3068.54 / 3099.60 ±19.20 / 3116.41 ms │ 3302.70 / 3323.50 ±16.22 / 3352.12 ms │  1.07x slower │
│ QQuery 24 │     101.01 / 104.87 ±2.81 / 109.76 ms │        43.34 / 46.80 ±3.25 / 52.18 ms │ +2.24x faster │
│ QQuery 25 │     140.64 / 141.29 ±0.67 / 142.40 ms │     114.94 / 116.41 ±1.24 / 118.08 ms │ +1.21x faster │
│ QQuery 26 │     102.97 / 104.39 ±0.80 / 105.19 ms │        43.89 / 45.52 ±1.57 / 47.70 ms │ +2.29x faster │
│ QQuery 27 │     852.42 / 859.56 ±7.14 / 871.93 ms │     673.53 / 683.34 ±5.19 / 688.03 ms │ +1.26x faster │
│ QQuery 28 │ 7750.35 / 7784.12 ±20.30 / 7804.81 ms │ 6987.03 / 7070.54 ±44.85 / 7114.20 ms │ +1.10x faster │
│ QQuery 29 │        52.98 / 55.46 ±4.12 / 63.62 ms │       43.51 / 55.84 ±19.75 / 95.00 ms │     no change │
│ QQuery 30 │     364.88 / 374.97 ±7.27 / 384.57 ms │    332.34 / 344.98 ±13.87 / 371.55 ms │ +1.09x faster │
│ QQuery 31 │    372.94 / 390.15 ±14.22 / 416.32 ms │    335.38 / 350.66 ±13.06 / 374.32 ms │ +1.11x faster │
│ QQuery 32 │ 1046.43 / 1088.88 ±41.29 / 1149.35 ms │ 1038.82 / 1060.23 ±30.52 / 1120.27 ms │     no change │
│ QQuery 33 │  1488.55 / 1499.96 ±7.93 / 1512.60 ms │  1459.04 / 1470.59 ±7.68 / 1480.30 ms │     no change │
│ QQuery 34 │ 1488.46 / 1500.84 ±11.87 / 1519.15 ms │ 1447.16 / 1472.97 ±18.26 / 1500.69 ms │     no change │
│ QQuery 35 │     402.87 / 405.09 ±2.05 / 408.76 ms │     322.39 / 325.27 ±4.63 / 334.50 ms │ +1.25x faster │
│ QQuery 36 │     117.00 / 122.22 ±2.88 / 125.83 ms │        70.69 / 72.64 ±1.35 / 74.20 ms │ +1.68x faster │
│ QQuery 37 │        50.38 / 51.37 ±0.73 / 52.43 ms │        38.61 / 39.88 ±0.92 / 41.10 ms │ +1.29x faster │
│ QQuery 38 │        76.42 / 77.64 ±0.93 / 78.65 ms │        40.72 / 42.41 ±1.03 / 43.59 ms │ +1.83x faster │
│ QQuery 39 │     222.54 / 226.06 ±2.44 / 229.01 ms │     130.19 / 134.34 ±3.95 / 140.15 ms │ +1.68x faster │
│ QQuery 40 │        22.89 / 26.76 ±2.41 / 30.20 ms │        17.75 / 20.33 ±2.11 / 22.87 ms │ +1.32x faster │
│ QQuery 41 │        19.87 / 21.12 ±0.68 / 21.88 ms │        15.20 / 15.73 ±0.36 / 16.07 ms │ +1.34x faster │
│ QQuery 42 │        20.10 / 20.26 ±0.15 / 20.52 ms │        13.64 / 14.18 ±0.41 / 14.70 ms │ +1.43x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 27291.72ms │
│ Total Time (alamb_reschedule_io)   │ 25005.09ms │
│ Average Time (HEAD)                │   634.69ms │
│ Average Time (alamb_reschedule_io) │   581.51ms │
│ Queries Faster                     │         33 │
│ Queries Slower                     │          3 │
│ Queries with No Change             │          7 │
│ Queries with Failure               │          0 │
└────────────────────────────────────┴────────────┘

Resource Usage
clickbench_partitioned — base (merge-base)

Metric Value
Wall time 137.6s
Peak memory 40.4 GiB
Avg memory 31.6 GiB
CPU user 1299.0s
CPU sys 87.2s
Peak spill 0 B
clickbench_partitioned — branch

Metric Value
Wall time 126.2s
Peak memory 41.5 GiB
Avg memory 28.2 GiB
CPU user 1313.5s
CPU sys 87.9s
Peak spill 0 B
File an issue against this benchmark runner

It's happening!

@adriangbot

This comment has been minimized.

@alamb
Copy link
Copy Markdown
Contributor Author

alamb commented Apr 6, 2026

It's happening!

Yes! Finally -- and no regressions this time!

I have a pile of stacked PRs:

Now that I have some evidence that this PR make them faster, I'll go back and get them ready to review

@alamb
Copy link
Copy Markdown
Contributor Author

alamb commented Apr 6, 2026

Screenshot 2026-04-06 at 9 08 31 AM

github-merge-queue bot pushed a commit that referenced this pull request Apr 9, 2026
…er` (#21327)

~(Draft until I am sure I can use this API to make FileStream behave
better)~

## Which issue does this PR close?

- part of #20529
- Needed for #21351
- Broken out of #20820
- Closes #21427

## Rationale for this change

I can get 10% faster on many ClickBench queries by reordeirng files at
runtime. You can see it all working together here:
#21351

To do do, I need to rework the FileStream so that it can reorder
operations at runtime. Eventually that will include both CPU and IO.

This PR is a step in the direction by introducing the main Morsel API
and implementing it for Parquet. The next PR
(#21342) rewrites FileStream in
terms of the Morsel API

## What changes are included in this PR?

1. Add proposed `Morsel` API
2. Rewrite Parquet opener in terms of that API
3. Add an adapter layer (back to FileOpener, so I don't have to rewrite
FileStream in the same PR)

My next PR will rewrite the FileStream to use the Morsel API

## Are these changes tested?

Yes by existing CI.

I will work on adding additional tests for just Parquet opener in a
follow on PR

## Are there any user-facing changes?
No
@alamb alamb force-pushed the alamb/reschedule_io branch 2 times, most recently from acde88a to 6b79a6f Compare April 9, 2026 19:46
@alamb

This comment has been minimized.

@alamb alamb force-pushed the alamb/reschedule_io branch from f1f0079 to 19f5120 Compare April 14, 2026 15:14
@Dandandan
Copy link
Copy Markdown
Contributor

Another thing to consider is costs: in a read heavy workload paying per read might be an important cost factor. So I think ultimately it should be tunable.

Yes

Copy link
Copy Markdown
Contributor Author

@alamb alamb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR has almost 500 lines of tests / test infrastructure. The actual code changes are pretty small

I recommend reviewing this PR:

  1. Start with the API changes to the DataSource trait
  2. Look at the changes to ScanState to see how the shared state is used
  3. Review the tests in file_stream/mod.rs
  4. Most of the rest of the code changes are plumbing to get the shared state into ScanState

self.open_with_args(OpenArgs::new(partition, context))
}

fn open_with_args(&self, args: OpenArgs) -> Result<SendableRecordBatchStream> {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added an open_with_args API to mirror other with_args APIs such as TableSource::scan_with_args:

async fn scan_with_args<'a>(
&self,
state: &dyn Session,
args: ScanArgs<'a>,
) -> Result<ScanResult> {
let filters = args.filters().unwrap_or(&[]);
let projection = args.projection().map(|p| p.to_vec());
let limit = args.limit();
let plan = self
.scan(state, projection.as_ref(), filters, limit)
.await?;
Ok(plan.into())
}

The new API was required to pass in the shared state (aka to connect sibling streams so they can share / reorder work)

----- Partition 0 -----
Done
----- Partition 1 -----
Batch: 101
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note that partition 1 has run all the files

mod builder;
mod metrics;
mod scan_state;
pub(crate) mod work_source;
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that there are no changes to the FIleStream -- this is only test changes

/// Files that still need to be planned.
file_iter: VecDeque<PartitionedFile>,
/// Unopened files that still need to be planned for this stream.
work_source: WorkSource,
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here is the key difference -- instead of a local queue there is now a (potentially) shared work source

}
}

/// Shared source of work for sibling `FileStream`s
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At the moment, the work source only supports entire files, but I can imagine it getting more sophisticated and supporting morsels and morsel planners too (to do work stealing, etc)

None
}

/// Create per execution state to share across sibling instances of this
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are they key new APIs

@alamb alamb force-pushed the alamb/reschedule_io branch from 2354cf6 to 1b1b586 Compare April 14, 2026 15:49
@alamb
Copy link
Copy Markdown
Contributor Author

alamb commented Apr 14, 2026

run benchmarks

@alamb
Copy link
Copy Markdown
Contributor Author

alamb commented Apr 14, 2026

run benchmark clickbench_partitioned

@adriangbot
Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4245283016-1232-z9k88 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing alamb/reschedule_io (1b1b586) to 961c5fc (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4245283800-1235-xmk9k 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing alamb/reschedule_io (1b1b586) to 961c5fc (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4245283016-1234-5vdfw 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing alamb/reschedule_io (1b1b586) to 961c5fc (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4245283016-1233-k65q9 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing alamb/reschedule_io (1b1b586) to 961c5fc (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and alamb_reschedule_io
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                   alamb_reschedule_io ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.20 / 4.36 ±6.25 / 16.85 ms │          1.18 / 4.36 ±6.28 / 16.93 ms │     no change │
│ QQuery 1  │        14.56 / 14.79 ±0.23 / 15.20 ms │        11.73 / 12.69 ±0.64 / 13.67 ms │ +1.17x faster │
│ QQuery 2  │        43.53 / 44.01 ±0.58 / 45.08 ms │        35.60 / 35.76 ±0.12 / 35.95 ms │ +1.23x faster │
│ QQuery 3  │        42.71 / 44.11 ±1.07 / 45.29 ms │        32.34 / 34.12 ±1.49 / 35.94 ms │ +1.29x faster │
│ QQuery 4  │     281.61 / 288.55 ±7.44 / 302.14 ms │     255.63 / 261.62 ±3.86 / 267.81 ms │ +1.10x faster │
│ QQuery 5  │     335.13 / 338.72 ±3.17 / 344.02 ms │     295.88 / 296.91 ±0.82 / 298.04 ms │ +1.14x faster │
│ QQuery 6  │           5.37 / 5.78 ±0.44 / 6.55 ms │           6.21 / 7.04 ±0.82 / 8.59 ms │  1.22x slower │
│ QQuery 7  │        16.91 / 17.36 ±0.76 / 18.87 ms │        13.42 / 13.64 ±0.14 / 13.83 ms │ +1.27x faster │
│ QQuery 8  │     403.72 / 409.92 ±6.64 / 421.21 ms │     354.78 / 361.10 ±4.72 / 369.43 ms │ +1.14x faster │
│ QQuery 9  │    630.45 / 644.63 ±11.47 / 659.79 ms │    493.05 / 520.94 ±14.48 / 535.34 ms │ +1.24x faster │
│ QQuery 10 │        91.04 / 92.94 ±1.47 / 94.88 ms │        75.43 / 77.22 ±1.51 / 79.63 ms │ +1.20x faster │
│ QQuery 11 │     105.15 / 105.89 ±0.60 / 106.55 ms │        83.91 / 84.98 ±0.65 / 85.87 ms │ +1.25x faster │
│ QQuery 12 │     337.35 / 348.02 ±8.14 / 361.91 ms │     287.00 / 290.20 ±2.30 / 293.15 ms │ +1.20x faster │
│ QQuery 13 │     450.11 / 460.67 ±6.73 / 467.27 ms │    421.76 / 443.69 ±31.62 / 506.55 ms │     no change │
│ QQuery 14 │     333.82 / 341.39 ±4.08 / 346.08 ms │     297.26 / 302.14 ±3.21 / 305.99 ms │ +1.13x faster │
│ QQuery 15 │    342.40 / 355.56 ±14.46 / 382.60 ms │    318.42 / 339.11 ±24.98 / 383.83 ms │     no change │
│ QQuery 16 │    700.95 / 717.10 ±17.91 / 746.87 ms │     663.56 / 674.13 ±6.85 / 684.34 ms │ +1.06x faster │
│ QQuery 17 │    697.26 / 736.96 ±27.09 / 780.63 ms │     666.46 / 671.53 ±3.41 / 676.18 ms │ +1.10x faster │
│ QQuery 18 │ 1387.18 / 1446.59 ±32.13 / 1481.48 ms │ 1324.20 / 1330.75 ±10.61 / 1351.89 ms │ +1.09x faster │
│ QQuery 19 │       34.66 / 41.47 ±11.99 / 65.39 ms │        29.95 / 30.81 ±1.12 / 32.86 ms │ +1.35x faster │
│ QQuery 20 │    720.48 / 739.14 ±21.48 / 774.08 ms │     511.86 / 514.31 ±2.86 / 519.76 ms │ +1.44x faster │
│ QQuery 21 │     756.31 / 762.38 ±6.02 / 772.77 ms │     588.54 / 591.09 ±2.35 / 595.45 ms │ +1.29x faster │
│ QQuery 22 │  1128.17 / 1136.82 ±6.86 / 1144.10 ms │  1046.25 / 1048.43 ±2.44 / 1052.01 ms │ +1.08x faster │
│ QQuery 23 │ 3056.67 / 3073.87 ±15.06 / 3095.30 ms │ 3241.38 / 3258.62 ±10.78 / 3271.44 ms │  1.06x slower │
│ QQuery 24 │      98.82 / 103.45 ±4.09 / 109.38 ms │        44.25 / 47.00 ±3.09 / 51.98 ms │ +2.20x faster │
│ QQuery 25 │     137.84 / 141.12 ±2.32 / 144.62 ms │     112.37 / 114.01 ±1.39 / 116.00 ms │ +1.24x faster │
│ QQuery 26 │      98.89 / 102.37 ±2.62 / 105.96 ms │        42.59 / 43.54 ±0.82 / 44.84 ms │ +2.35x faster │
│ QQuery 27 │     846.56 / 850.94 ±4.12 / 858.45 ms │     657.88 / 662.07 ±5.13 / 671.91 ms │ +1.29x faster │
│ QQuery 28 │ 3258.73 / 3280.63 ±14.35 / 3302.63 ms │  3001.40 / 3016.24 ±9.06 / 3024.04 ms │ +1.09x faster │
│ QQuery 29 │        50.38 / 54.51 ±2.87 / 58.87 ms │        42.56 / 45.64 ±3.17 / 51.00 ms │ +1.19x faster │
│ QQuery 30 │     350.70 / 360.10 ±7.09 / 371.07 ms │     319.76 / 326.14 ±4.54 / 333.79 ms │ +1.10x faster │
│ QQuery 31 │     362.41 / 375.90 ±7.66 / 383.71 ms │     323.20 / 328.94 ±3.62 / 333.52 ms │ +1.14x faster │
│ QQuery 32 │ 1022.20 / 1038.28 ±18.09 / 1073.65 ms │ 1006.17 / 1014.57 ±12.76 / 1039.79 ms │     no change │
│ QQuery 33 │ 1441.38 / 1451.31 ±11.21 / 1471.88 ms │  1421.22 / 1430.45 ±6.35 / 1438.30 ms │     no change │
│ QQuery 34 │  1460.36 / 1471.02 ±7.23 / 1480.93 ms │  1435.81 / 1444.26 ±6.88 / 1454.22 ms │     no change │
│ QQuery 35 │     373.53 / 376.24 ±2.02 / 379.78 ms │     309.61 / 310.91 ±1.09 / 312.37 ms │ +1.21x faster │
│ QQuery 36 │     114.97 / 119.45 ±3.85 / 124.79 ms │        64.38 / 67.38 ±1.97 / 70.54 ms │ +1.77x faster │
│ QQuery 37 │        48.07 / 49.03 ±0.78 / 50.12 ms │        35.70 / 38.31 ±1.63 / 40.35 ms │ +1.28x faster │
│ QQuery 38 │        75.50 / 77.81 ±1.62 / 80.12 ms │        41.08 / 43.12 ±1.53 / 45.45 ms │ +1.80x faster │
│ QQuery 39 │     205.29 / 208.87 ±3.05 / 212.87 ms │     119.83 / 128.31 ±6.47 / 136.03 ms │ +1.63x faster │
│ QQuery 40 │        23.10 / 25.04 ±2.39 / 29.62 ms │        14.61 / 16.63 ±1.65 / 18.98 ms │ +1.51x faster │
│ QQuery 41 │        19.35 / 20.63 ±0.75 / 21.28 ms │        13.65 / 14.65 ±0.62 / 15.33 ms │ +1.41x faster │
│ QQuery 42 │        19.22 / 19.65 ±0.30 / 20.12 ms │        12.74 / 13.29 ±0.30 / 13.63 ms │ +1.48x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 22297.40ms │
│ Total Time (alamb_reschedule_io)   │ 20310.67ms │
│ Average Time (HEAD)                │   518.54ms │
│ Average Time (alamb_reschedule_io) │   472.34ms │
│ Queries Faster                     │         35 │
│ Queries Slower                     │          2 │
│ Queries with No Change             │          6 │
│ Queries with Failure               │          0 │
└────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 112.7s
Peak memory 40.6 GiB
Avg memory 29.9 GiB
CPU user 1063.6s
CPU sys 83.7s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 102.6s
Peak memory 39.1 GiB
Avg memory 33.2 GiB
CPU user 1070.8s
CPU sys 73.6s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and alamb_reschedule_io
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                   alamb_reschedule_io ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.20 / 4.38 ±6.28 / 16.95 ms │          1.21 / 4.41 ±6.33 / 17.07 ms │     no change │
│ QQuery 1  │        14.02 / 14.42 ±0.24 / 14.67 ms │        11.87 / 12.14 ±0.14 / 12.27 ms │ +1.19x faster │
│ QQuery 2  │        43.82 / 43.99 ±0.13 / 44.20 ms │        35.53 / 35.67 ±0.11 / 35.84 ms │ +1.23x faster │
│ QQuery 3  │        42.15 / 44.80 ±1.65 / 47.05 ms │        31.97 / 34.45 ±2.33 / 37.77 ms │ +1.30x faster │
│ QQuery 4  │     278.02 / 288.13 ±7.92 / 298.62 ms │     256.71 / 269.64 ±9.62 / 286.07 ms │ +1.07x faster │
│ QQuery 5  │     340.23 / 345.12 ±3.51 / 349.59 ms │     300.37 / 305.32 ±3.14 / 310.20 ms │ +1.13x faster │
│ QQuery 6  │           5.07 / 5.74 ±0.62 / 6.66 ms │           6.57 / 7.59 ±0.95 / 9.22 ms │  1.32x slower │
│ QQuery 7  │        16.80 / 17.84 ±1.06 / 19.77 ms │        13.39 / 14.28 ±0.89 / 15.86 ms │ +1.25x faster │
│ QQuery 8  │     400.15 / 417.68 ±9.73 / 426.04 ms │     366.19 / 372.84 ±4.97 / 379.26 ms │ +1.12x faster │
│ QQuery 9  │     624.77 / 631.29 ±6.24 / 643.01 ms │     512.29 / 518.02 ±4.87 / 525.07 ms │ +1.22x faster │
│ QQuery 10 │       91.29 / 94.27 ±3.22 / 100.46 ms │        74.36 / 75.55 ±1.12 / 77.11 ms │ +1.25x faster │
│ QQuery 11 │     103.14 / 104.68 ±1.22 / 106.27 ms │        83.98 / 84.42 ±0.47 / 85.29 ms │ +1.24x faster │
│ QQuery 12 │     337.12 / 339.78 ±3.17 / 345.63 ms │    289.92 / 303.78 ±13.79 / 328.24 ms │ +1.12x faster │
│ QQuery 13 │    463.40 / 472.97 ±10.00 / 488.95 ms │    430.32 / 446.48 ±13.08 / 464.27 ms │ +1.06x faster │
│ QQuery 14 │     335.90 / 341.55 ±4.21 / 346.57 ms │     303.65 / 307.62 ±2.65 / 311.86 ms │ +1.11x faster │
│ QQuery 15 │    355.88 / 365.47 ±13.95 / 393.09 ms │    321.84 / 333.92 ±12.00 / 355.65 ms │ +1.09x faster │
│ QQuery 16 │     713.01 / 721.22 ±7.29 / 731.57 ms │    685.21 / 700.04 ±17.78 / 733.60 ms │     no change │
│ QQuery 17 │     702.43 / 709.74 ±4.66 / 716.29 ms │    687.77 / 723.87 ±25.30 / 750.28 ms │     no change │
│ QQuery 18 │ 1419.87 / 1451.96 ±27.26 / 1493.04 ms │ 1412.14 / 1472.13 ±31.72 / 1500.31 ms │     no change │
│ QQuery 19 │        34.78 / 36.17 ±1.17 / 38.33 ms │       29.55 / 39.20 ±16.95 / 73.03 ms │  1.08x slower │
│ QQuery 20 │    717.48 / 733.25 ±14.69 / 752.12 ms │    515.33 / 523.87 ±13.12 / 549.73 ms │ +1.40x faster │
│ QQuery 21 │    760.44 / 776.64 ±17.36 / 808.51 ms │     588.13 / 591.85 ±2.46 / 594.01 ms │ +1.31x faster │
│ QQuery 22 │ 1127.54 / 1137.83 ±10.53 / 1151.58 ms │  1049.14 / 1050.85 ±1.25 / 1052.59 ms │ +1.08x faster │
│ QQuery 23 │ 3069.17 / 3083.85 ±16.36 / 3112.53 ms │ 3248.95 / 3260.87 ±11.83 / 3275.58 ms │  1.06x slower │
│ QQuery 24 │      95.88 / 100.03 ±3.51 / 104.19 ms │        43.19 / 45.70 ±1.91 / 48.83 ms │ +2.19x faster │
│ QQuery 25 │     137.82 / 140.09 ±1.30 / 141.55 ms │     113.67 / 114.93 ±0.81 / 115.79 ms │ +1.22x faster │
│ QQuery 26 │     101.63 / 103.77 ±1.29 / 105.05 ms │        42.51 / 43.91 ±1.39 / 46.15 ms │ +2.36x faster │
│ QQuery 27 │     849.94 / 853.18 ±3.30 / 859.01 ms │     660.57 / 666.26 ±4.18 / 673.30 ms │ +1.28x faster │
│ QQuery 28 │ 3255.10 / 3290.42 ±24.89 / 3323.19 ms │ 2977.02 / 3004.81 ±15.97 / 3024.96 ms │ +1.10x faster │
│ QQuery 29 │        49.29 / 59.62 ±9.76 / 75.78 ms │        43.33 / 46.77 ±4.11 / 54.16 ms │ +1.27x faster │
│ QQuery 30 │     356.44 / 361.94 ±5.36 / 370.27 ms │     325.79 / 329.58 ±2.08 / 331.50 ms │ +1.10x faster │
│ QQuery 31 │    361.94 / 376.31 ±11.59 / 397.49 ms │     322.85 / 331.69 ±5.62 / 338.56 ms │ +1.13x faster │
│ QQuery 32 │ 1033.94 / 1169.03 ±93.73 / 1308.93 ms │ 1144.76 / 1207.77 ±43.99 / 1271.43 ms │     no change │
│ QQuery 33 │ 1416.71 / 1439.58 ±13.87 / 1454.58 ms │ 1460.55 / 1487.58 ±36.91 / 1559.57 ms │     no change │
│ QQuery 34 │  1417.58 / 1433.05 ±8.78 / 1444.44 ms │ 1452.12 / 1470.28 ±20.50 / 1509.87 ms │     no change │
│ QQuery 35 │     382.16 / 383.64 ±1.85 / 387.08 ms │    314.60 / 323.44 ±10.64 / 344.10 ms │ +1.19x faster │
│ QQuery 36 │     112.42 / 117.52 ±2.84 / 120.24 ms │        66.30 / 69.45 ±2.02 / 72.35 ms │ +1.69x faster │
│ QQuery 37 │        46.87 / 49.69 ±2.30 / 53.72 ms │        37.51 / 39.22 ±1.05 / 40.67 ms │ +1.27x faster │
│ QQuery 38 │        76.32 / 76.83 ±0.43 / 77.61 ms │        42.85 / 44.09 ±1.54 / 46.91 ms │ +1.74x faster │
│ QQuery 39 │     204.38 / 213.55 ±6.05 / 222.10 ms │     118.74 / 130.95 ±6.84 / 137.81 ms │ +1.63x faster │
│ QQuery 40 │        22.16 / 23.84 ±1.25 / 25.23 ms │        14.99 / 18.38 ±2.32 / 21.60 ms │ +1.30x faster │
│ QQuery 41 │        19.24 / 20.98 ±2.13 / 24.83 ms │        14.82 / 16.64 ±1.15 / 18.26 ms │ +1.26x faster │
│ QQuery 42 │        18.55 / 19.70 ±0.71 / 20.38 ms │        13.27 / 13.70 ±0.28 / 13.97 ms │ +1.44x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 22415.55ms │
│ Total Time (alamb_reschedule_io)   │ 20893.97ms │
│ Average Time (HEAD)                │   521.29ms │
│ Average Time (alamb_reschedule_io) │   485.91ms │
│ Queries Faster                     │         33 │
│ Queries Slower                     │          3 │
│ Queries with No Change             │          7 │
│ Queries with Failure               │          0 │
└────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 113.2s
Peak memory 42.5 GiB
Avg memory 29.0 GiB
CPU user 1062.6s
CPU sys 88.0s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 105.4s
Peak memory 38.4 GiB
Avg memory 27.4 GiB
CPU user 1077.9s
CPU sys 96.1s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and alamb_reschedule_io
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                     HEAD ┃                      alamb_reschedule_io ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │              6.64 / 7.08 ±0.77 / 8.60 ms │              6.80 / 7.30 ±0.74 / 8.77 ms │     no change │
│ QQuery 2  │        145.72 / 146.30 ±0.46 / 147.09 ms │        144.91 / 146.87 ±1.18 / 148.28 ms │     no change │
│ QQuery 3  │        114.00 / 114.99 ±0.71 / 115.99 ms │        114.67 / 115.84 ±0.82 / 117.16 ms │     no change │
│ QQuery 4  │    1373.33 / 1389.14 ±10.72 / 1406.36 ms │    1384.83 / 1413.22 ±19.25 / 1430.76 ms │     no change │
│ QQuery 5  │        173.17 / 174.28 ±1.07 / 176.26 ms │        173.94 / 175.13 ±0.64 / 175.65 ms │     no change │
│ QQuery 6  │       826.84 / 867.76 ±33.08 / 907.29 ms │       849.90 / 882.26 ±27.10 / 930.99 ms │     no change │
│ QQuery 7  │        344.47 / 346.73 ±1.56 / 349.05 ms │        343.03 / 347.36 ±2.60 / 349.45 ms │     no change │
│ QQuery 8  │        117.25 / 118.78 ±0.86 / 119.67 ms │        116.87 / 118.17 ±0.79 / 119.28 ms │     no change │
│ QQuery 9  │        100.73 / 102.52 ±1.98 / 106.37 ms │        103.37 / 107.10 ±1.87 / 108.22 ms │     no change │
│ QQuery 10 │        107.29 / 108.27 ±0.82 / 109.51 ms │        105.74 / 106.94 ±1.02 / 108.42 ms │     no change │
│ QQuery 11 │      967.00 / 981.04 ±13.70 / 1001.92 ms │       989.66 / 999.65 ±5.29 / 1004.48 ms │     no change │
│ QQuery 12 │           45.01 / 47.79 ±1.69 / 49.91 ms │           45.88 / 47.61 ±1.28 / 49.82 ms │     no change │
│ QQuery 13 │        405.19 / 407.79 ±1.82 / 410.48 ms │        404.62 / 407.86 ±2.34 / 410.81 ms │     no change │
│ QQuery 14 │     1017.07 / 1024.23 ±3.92 / 1029.11 ms │     1006.97 / 1014.79 ±5.62 / 1023.32 ms │     no change │
│ QQuery 15 │           16.27 / 17.64 ±1.04 / 18.65 ms │           15.95 / 17.48 ±1.38 / 19.79 ms │     no change │
│ QQuery 16 │              7.35 / 7.72 ±0.43 / 8.50 ms │              7.28 / 7.62 ±0.28 / 7.98 ms │     no change │
│ QQuery 17 │        233.33 / 236.55 ±1.84 / 238.83 ms │        231.21 / 232.90 ±1.70 / 235.18 ms │     no change │
│ QQuery 18 │        130.62 / 131.06 ±0.32 / 131.44 ms │        127.81 / 129.61 ±1.08 / 131.19 ms │     no change │
│ QQuery 19 │        157.11 / 158.58 ±1.37 / 161.08 ms │        156.49 / 159.11 ±1.82 / 161.96 ms │     no change │
│ QQuery 20 │           14.56 / 14.99 ±0.28 / 15.33 ms │           14.02 / 14.62 ±0.68 / 15.49 ms │     no change │
│ QQuery 21 │           20.16 / 20.69 ±0.63 / 21.67 ms │           19.66 / 19.93 ±0.21 / 20.26 ms │     no change │
│ QQuery 22 │        494.22 / 499.09 ±4.14 / 506.38 ms │        491.37 / 497.77 ±4.96 / 505.02 ms │     no change │
│ QQuery 23 │        887.83 / 905.81 ±9.74 / 917.11 ms │       889.44 / 915.98 ±18.20 / 932.03 ms │     no change │
│ QQuery 24 │        387.86 / 389.06 ±0.92 / 390.40 ms │        397.57 / 402.03 ±3.31 / 407.43 ms │     no change │
│ QQuery 25 │        346.28 / 348.06 ±2.25 / 352.50 ms │        350.25 / 354.13 ±2.60 / 357.68 ms │     no change │
│ QQuery 26 │           83.56 / 84.97 ±1.53 / 87.62 ms │           83.16 / 85.94 ±2.99 / 91.28 ms │     no change │
│ QQuery 27 │              7.07 / 7.42 ±0.41 / 8.23 ms │              7.32 / 7.54 ±0.34 / 8.22 ms │     no change │
│ QQuery 28 │        150.13 / 151.81 ±2.06 / 155.65 ms │        152.50 / 155.65 ±1.71 / 157.64 ms │     no change │
│ QQuery 29 │        283.99 / 286.64 ±2.29 / 290.69 ms │        293.46 / 294.99 ±1.72 / 298.08 ms │     no change │
│ QQuery 30 │           42.94 / 45.22 ±1.89 / 48.68 ms │           43.86 / 45.79 ±1.57 / 48.36 ms │     no change │
│ QQuery 31 │        171.32 / 173.41 ±2.19 / 177.33 ms │        176.24 / 177.96 ±0.95 / 178.85 ms │     no change │
│ QQuery 32 │           57.63 / 58.20 ±0.45 / 58.92 ms │           58.93 / 59.97 ±0.93 / 61.72 ms │     no change │
│ QQuery 33 │        141.38 / 143.62 ±1.57 / 146.26 ms │        143.20 / 145.34 ±1.89 / 148.42 ms │     no change │
│ QQuery 34 │              6.94 / 7.28 ±0.27 / 7.77 ms │              7.32 / 7.93 ±0.97 / 9.86 ms │  1.09x slower │
│ QQuery 35 │        109.25 / 110.51 ±1.14 / 111.92 ms │        112.36 / 113.41 ±0.88 / 114.53 ms │     no change │
│ QQuery 36 │              6.65 / 6.91 ±0.23 / 7.30 ms │              6.91 / 7.04 ±0.13 / 7.29 ms │     no change │
│ QQuery 37 │             8.78 / 9.45 ±0.97 / 11.38 ms │              8.62 / 9.17 ±0.29 / 9.43 ms │     no change │
│ QQuery 38 │           86.18 / 89.09 ±2.58 / 93.69 ms │          88.45 / 93.17 ±5.49 / 103.82 ms │     no change │
│ QQuery 39 │        127.24 / 132.51 ±3.96 / 138.34 ms │        135.27 / 137.06 ±1.03 / 137.93 ms │     no change │
│ QQuery 40 │        112.32 / 118.56 ±7.41 / 132.48 ms │        111.77 / 119.20 ±9.30 / 136.76 ms │     no change │
│ QQuery 41 │           14.48 / 15.48 ±0.60 / 16.18 ms │           15.07 / 16.03 ±0.57 / 16.60 ms │     no change │
│ QQuery 42 │        107.67 / 110.10 ±1.79 / 113.07 ms │        108.42 / 110.45 ±2.15 / 114.33 ms │     no change │
│ QQuery 43 │              6.19 / 6.35 ±0.19 / 6.73 ms │              6.47 / 6.68 ±0.31 / 7.30 ms │  1.05x slower │
│ QQuery 44 │           11.92 / 12.30 ±0.21 / 12.52 ms │           12.00 / 12.51 ±0.38 / 13.01 ms │     no change │
│ QQuery 45 │           51.46 / 52.23 ±0.90 / 53.91 ms │           51.50 / 52.56 ±1.30 / 55.06 ms │     no change │
│ QQuery 46 │              8.64 / 8.81 ±0.14 / 9.05 ms │              8.95 / 9.23 ±0.27 / 9.72 ms │     no change │
│ QQuery 47 │        755.92 / 768.62 ±9.97 / 785.45 ms │       755.32 / 793.23 ±25.35 / 816.23 ms │     no change │
│ QQuery 48 │        286.23 / 294.98 ±4.85 / 300.16 ms │        285.26 / 292.02 ±6.57 / 301.57 ms │     no change │
│ QQuery 49 │        251.01 / 254.00 ±4.10 / 262.12 ms │        251.79 / 255.31 ±1.87 / 257.19 ms │     no change │
│ QQuery 50 │        222.96 / 230.54 ±5.44 / 236.77 ms │        225.00 / 227.11 ±2.22 / 231.17 ms │     no change │
│ QQuery 51 │        180.89 / 186.14 ±2.78 / 188.94 ms │        181.48 / 183.15 ±1.79 / 185.95 ms │     no change │
│ QQuery 52 │        108.61 / 110.22 ±1.37 / 112.18 ms │        108.51 / 108.95 ±0.33 / 109.44 ms │     no change │
│ QQuery 53 │        103.69 / 104.92 ±1.32 / 107.43 ms │        103.24 / 104.85 ±1.84 / 108.29 ms │     no change │
│ QQuery 54 │        149.40 / 151.55 ±1.55 / 153.22 ms │        149.28 / 150.41 ±1.04 / 152.18 ms │     no change │
│ QQuery 55 │        107.70 / 109.27 ±1.78 / 112.67 ms │        107.03 / 107.87 ±0.52 / 108.46 ms │     no change │
│ QQuery 56 │        143.56 / 145.16 ±1.86 / 148.75 ms │        141.66 / 144.04 ±1.36 / 145.82 ms │     no change │
│ QQuery 57 │        178.48 / 180.60 ±1.54 / 183.27 ms │        176.79 / 177.69 ±0.66 / 178.35 ms │     no change │
│ QQuery 58 │        296.79 / 303.11 ±5.60 / 310.53 ms │        297.52 / 307.30 ±5.67 / 312.44 ms │     no change │
│ QQuery 59 │        205.81 / 208.45 ±1.81 / 210.87 ms │        197.29 / 201.23 ±3.31 / 204.94 ms │     no change │
│ QQuery 60 │        146.96 / 148.28 ±0.91 / 149.64 ms │        146.38 / 147.69 ±1.36 / 149.99 ms │     no change │
│ QQuery 61 │           13.82 / 13.97 ±0.08 / 14.05 ms │           13.33 / 13.56 ±0.16 / 13.83 ms │     no change │
│ QQuery 62 │     941.99 / 1015.75 ±65.67 / 1132.51 ms │      914.42 / 963.46 ±34.93 / 1007.82 ms │ +1.05x faster │
│ QQuery 63 │        106.37 / 108.54 ±1.21 / 109.70 ms │        104.94 / 107.62 ±2.62 / 111.49 ms │     no change │
│ QQuery 64 │        708.68 / 714.14 ±3.85 / 720.26 ms │        693.30 / 700.72 ±7.19 / 713.58 ms │     no change │
│ QQuery 65 │        269.91 / 273.74 ±5.09 / 283.76 ms │        256.04 / 260.88 ±3.05 / 265.04 ms │     no change │
│ QQuery 66 │       246.16 / 263.71 ±17.62 / 297.52 ms │       251.43 / 266.78 ±11.08 / 281.86 ms │     no change │
│ QQuery 67 │        320.87 / 328.21 ±9.03 / 345.24 ms │        323.82 / 331.31 ±5.62 / 338.25 ms │     no change │
│ QQuery 68 │            9.29 / 11.41 ±1.92 / 14.15 ms │            9.21 / 10.38 ±1.04 / 12.25 ms │ +1.10x faster │
│ QQuery 69 │        102.44 / 104.07 ±0.91 / 104.99 ms │        104.46 / 104.89 ±0.36 / 105.51 ms │     no change │
│ QQuery 70 │       355.15 / 368.29 ±10.86 / 386.24 ms │       339.88 / 357.86 ±14.49 / 381.49 ms │     no change │
│ QQuery 71 │        133.95 / 136.23 ±1.51 / 137.53 ms │        135.33 / 137.59 ±1.82 / 139.88 ms │     no change │
│ QQuery 72 │       610.66 / 629.75 ±14.70 / 650.83 ms │        643.94 / 651.28 ±6.73 / 660.98 ms │     no change │
│ QQuery 73 │              6.95 / 7.57 ±0.66 / 8.66 ms │              6.94 / 8.43 ±0.89 / 9.72 ms │  1.11x slower │
│ QQuery 74 │        632.11 / 641.14 ±8.57 / 653.72 ms │        629.74 / 642.67 ±6.67 / 647.50 ms │     no change │
│ QQuery 75 │        278.45 / 282.02 ±3.08 / 285.96 ms │        275.19 / 278.71 ±2.31 / 282.17 ms │     no change │
│ QQuery 76 │        133.40 / 134.47 ±0.94 / 135.74 ms │        132.54 / 133.90 ±1.13 / 135.71 ms │     no change │
│ QQuery 77 │        189.72 / 193.32 ±2.01 / 195.83 ms │        188.28 / 189.84 ±1.84 / 193.40 ms │     no change │
│ QQuery 78 │        340.89 / 347.27 ±4.01 / 351.97 ms │        342.60 / 346.24 ±2.55 / 350.45 ms │     no change │
│ QQuery 79 │        238.27 / 243.24 ±2.78 / 245.48 ms │        236.94 / 240.31 ±2.47 / 244.60 ms │     no change │
│ QQuery 80 │        324.49 / 326.92 ±2.10 / 330.49 ms │        322.83 / 323.97 ±0.67 / 324.72 ms │     no change │
│ QQuery 81 │           26.98 / 27.66 ±0.55 / 28.65 ms │           26.43 / 27.55 ±1.08 / 29.44 ms │     no change │
│ QQuery 82 │        199.02 / 201.60 ±1.74 / 203.74 ms │        197.91 / 199.69 ±1.40 / 201.27 ms │     no change │
│ QQuery 83 │           39.86 / 42.10 ±1.63 / 43.92 ms │           38.33 / 39.62 ±0.82 / 40.61 ms │ +1.06x faster │
│ QQuery 84 │           49.78 / 50.41 ±0.61 / 51.46 ms │           49.11 / 50.75 ±1.90 / 53.81 ms │     no change │
│ QQuery 85 │        150.84 / 152.16 ±0.82 / 153.15 ms │        150.61 / 152.15 ±1.75 / 155.49 ms │     no change │
│ QQuery 86 │           39.48 / 39.82 ±0.31 / 40.34 ms │           38.52 / 40.56 ±1.10 / 41.81 ms │     no change │
│ QQuery 87 │           86.79 / 89.29 ±3.39 / 95.93 ms │           88.52 / 90.88 ±2.85 / 96.36 ms │     no change │
│ QQuery 88 │        100.37 / 101.61 ±1.13 / 103.72 ms │        101.00 / 101.98 ±0.54 / 102.66 ms │     no change │
│ QQuery 89 │        119.20 / 121.78 ±1.62 / 124.17 ms │        121.09 / 121.99 ±0.67 / 122.84 ms │     no change │
│ QQuery 90 │           23.39 / 24.39 ±0.93 / 25.94 ms │           24.14 / 24.86 ±0.43 / 25.38 ms │     no change │
│ QQuery 91 │           64.52 / 65.25 ±0.69 / 66.43 ms │           64.70 / 65.47 ±0.66 / 66.65 ms │     no change │
│ QQuery 92 │           58.37 / 59.43 ±0.89 / 60.55 ms │           57.06 / 58.77 ±1.40 / 60.92 ms │     no change │
│ QQuery 93 │        189.79 / 191.81 ±1.80 / 195.04 ms │        191.29 / 192.37 ±0.99 / 194.21 ms │     no change │
│ QQuery 94 │           61.76 / 62.10 ±0.23 / 62.44 ms │           61.90 / 62.78 ±0.51 / 63.26 ms │     no change │
│ QQuery 95 │        125.84 / 127.98 ±1.77 / 131.23 ms │        127.64 / 130.03 ±1.56 / 132.40 ms │     no change │
│ QQuery 96 │           72.15 / 74.10 ±1.31 / 75.99 ms │           72.52 / 74.77 ±1.29 / 76.16 ms │     no change │
│ QQuery 97 │        129.21 / 130.61 ±1.13 / 131.94 ms │        126.76 / 130.03 ±2.72 / 134.71 ms │     no change │
│ QQuery 98 │        152.30 / 155.56 ±2.52 / 159.42 ms │        153.25 / 157.85 ±2.53 / 160.78 ms │     no change │
│ QQuery 99 │ 10837.92 / 10887.02 ±28.52 / 10912.55 ms │ 10822.45 / 10849.87 ±18.94 / 10875.78 ms │     no change │
└───────────┴──────────────────────────────────────────┴──────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                  ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                  │ 32141.09ms │
│ Total Time (alamb_reschedule_io)   │ 32152.10ms │
│ Average Time (HEAD)                │   324.66ms │
│ Average Time (alamb_reschedule_io) │   324.77ms │
│ Queries Faster                     │          3 │
│ Queries Slower                     │          3 │
│ Queries with No Change             │         93 │
│ Queries with Failure               │          0 │
└────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 161.1s
Peak memory 5.4 GiB
Avg memory 4.5 GiB
CPU user 265.7s
CPU sys 17.9s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 161.1s
Peak memory 5.5 GiB
Avg memory 4.6 GiB
CPU user 267.4s
CPU sys 17.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb
Copy link
Copy Markdown
Contributor

This PR has almost 500 lines of tests / test infrastructure. The actual code changes are pretty small

I recommend reviewing this PR:

1. Start with the API changes to the `DataSource` trait

2. Look at the changes to ScanState to see how the shared state is used

3. Review the tests in file_stream/mod.rs

4. Most of the rest of the code changes are plumbing to get the shared state into ScanState

Mind taking it out of draft if it is ready for review?

@alamb
Copy link
Copy Markdown
Contributor Author

alamb commented Apr 14, 2026

Mind taking it out of draft if it is ready for review?

Yes I will do so for sure. I wanted to make sure it was ready (passing tests, comments all polished) before doing so. I expect to mark it ready very soon

@alamb alamb marked this pull request as ready for review April 14, 2026 19:47
@alamb
Copy link
Copy Markdown
Contributor Author

alamb commented Apr 14, 2026

Ok, this is ready for review. I am so sorry for the size of the PR but it is mostly comments and tests

@comphead
Copy link
Copy Markdown
Contributor

Awesome, so the PR changes who reads which file at runtime using morselizer, would be extremely interesting to try this on many small files environments.

Do we expect improvements for even partitions(partition have the similar number of files with similar sizes)?

Is it planned to morselize deeper to process row groups in parallel?

This activity actually reminds me of #19815 benchmark.

@Dandandan
Copy link
Copy Markdown
Contributor

Awesome, so the PR changes who reads which file at runtime using morselizer, would be extremely interesting to try this on many small files environments.

Do we expect improvements for even partitions(partition have the similar number of files with similar sizes)?

Is it planned to morselize deeper to process row groups in parallel?

This activity actually reminds me of #19815 benchmark.

Do we expect improvements for even partitions(partition have the similar number of files with similar sizes)

In my experience, there is always a some partition skew even for very balanced scans on local FS.
So, this will benefit from morsel-based scan (but only something like 5-10%) as long as there are enough morsels to spread the work (at least more than the number of cores).
Object store will almost always benefit (due to huge variation in response times).
OTOH the relative improvement will be less for larger / more evenly balanced datasets.

Is it planned to morselize deeper to process row groups in parallel?

Yes - it is the plan to split morsels into sub-row-group morsels, so smaller datasets (e.g. TPC-DS at SF=1 which has single-row group files) or high-cpu machines (due to too little parallelism) will benefit more as well.

Currently parallelism is limited in datasets with few row groups as we can't go beyond row groups.

///
/// Streams that may share work across siblings use [`WorkSource::Shared`],
/// while streams that can not share work (e.g. because they must preserve file
/// order) use [`WorkSource::Local`].
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// order) use [`WorkSource::Local`].
/// order) use [`WorkSource::Local`].

@Dandandan
Copy link
Copy Markdown
Contributor

run benchmark tpch_csv tpch_csv10 h2o_medium

@adriangbot
Copy link
Copy Markdown

🤖 Criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4250669500-1279-llwxm 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing alamb/reschedule_io (5287210) to 961c5fc (merge-base) diff
BENCH_NAME=tpch_csv10
BENCH_COMMAND=cargo bench --features=parquet --bench tpch_csv10
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
    struct_query_sql
    substr
    substr_index
    substring
    sum
    to_char
    to_hex
    to_local_time
    to_time
    to_timestamp
    topk_aggregate
    topk_repartition
    translate
    trim
    trunc
    unhex
    upper
    uuid
    window_query_sql
    with_hashes

File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4250669500-1278-wkd76 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing alamb/reschedule_io (5287210) to 961c5fc (merge-base) diff
BENCH_NAME=tpch_csv
BENCH_COMMAND=cargo bench --features=parquet --bench tpch_csv
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
    struct_query_sql
    substr
    substr_index
    substring
    sum
    to_char
    to_hex
    to_local_time
    to_time
    to_timestamp
    topk_aggregate
    topk_repartition
    translate
    trim
    trunc
    unhex
    upper
    uuid
    window_query_sql
    with_hashes

File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

🤖 Criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4250669500-1280-5cb2d 6.12.55+ #1 SMP Sun Feb 1 08:59:41 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing alamb/reschedule_io (5287210) to 961c5fc (merge-base) diff
BENCH_NAME=h2o_medium
BENCH_COMMAND=cargo bench --features=parquet --bench h2o_medium
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot
Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
    struct_query_sql
    substr
    substr_index
    substring
    sum
    to_char
    to_hex
    to_local_time
    to_time
    to_timestamp
    topk_aggregate
    topk_repartition
    translate
    trim
    trunc
    unhex
    upper
    uuid
    window_query_sql
    with_hashes

File an issue against this benchmark runner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

datasource Changes to the datasource crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Introduce morsel-driven Parquet scan

5 participants