Real-work production flow, public traces through the real brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗, and simulations with explicit limits. The latest studies test stronger baselines, isolate agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗, and show where the original conclusions needed to narrow.
Summary
At a glance
−26%mean latency vs FIFOquiet laptop re-run
−31%mean latency vs FIFOAWS
−6% to −7%mean latency vs FIFO30-minute run with long backlogs
4 of 6real-broker trace cells passed with weights + pausing0 of 6 with default-aging routing
Every benchmark and how it came out
Benchmark
Where
Outcome
Headline
Production flow
Laptop, quiet re-run
Passed
MeanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −25.6% vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗
Production flow, replicated
AWS
Passed
MeanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −30.8% vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗
30-minute run, brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ on its own host
AWS
3 of 8 checks failed
MeanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −6% to −7% vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗
Level weightsLevel weightsInstead of always serving the highest level first, each level gets a share of worker time (for example 8 : 3 : 1). Lower levels still make steady progress. + pausing agingPausing agingAging that holds off promoting a message while the level above is still working through earlier promoted messages. It stops a long backlog from pushing everything to the top., production flow
Laptop + AWS
Not passed
AWS meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −57.5% vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗; P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ interval exceeds the guardrailGuardrailA metric that must not get much worse, even if the main metric improves. Tail latency and lost work are guardrails here.
Size-binned keysKeyWhat Harbinger groups messages by when learning: the producer, optionally plus a job_type label (and size). Each key gets its own duration history.
Laptop + AWS
Not passed
AWS meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −1.5% vs job-type keysKeyWhat Harbinger groups messages by when learning: the producer, optionally plus a job_type label (and size). Each key gets its own duration history.; no measurable gain
Azure FunctionsServerlessA cloud style where you upload small functions and the provider runs them on demand. The Azure Functions trace records one such platform's invocations.Learn more ↗ 2021 trace
Real-brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ replay
Weights: 2 of 3
Default-agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ routing: 0 of 3; weighted meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −8% to −17%
Huawei 2025 R5 trace
Real-brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ replay
Weights: 2 of 3
Default-agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ routing: 0 of 3; weighted meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −2% to −47%
Huawei, agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ off
Real-brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ replay
2 of 2
MeanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −37% / −45% vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗, with tail and long-wait costs
Stronger baselines and ablations
AWS production flow
Descriptive
Per-type fair queueing beats predictive meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗, with worse P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗
CPU-work simulator validation
Laptop + AWS
Not passed
Simulated effects overstate measured gains by 11–12 points
Parameter sensitivity
Simulation
Incomplete
Variant confirmation through the real brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ was triggered but not run
LPC-EGEE 2004 job log
Simulation
0 of 6
PredictorPredictorThe part of the broker that estimates how long a message will take, using what earlier messages with the same key took. gave a prediction for 21% of jobs
DAS2-fs2 2003 job log
Simulation
0 of 6
Overload design made the meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ worse (+72% to +89%)
Against RabbitMQ and Redis
AWS
Passed
MeanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ −21.7% and −25.5% vs their FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗
BrokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ cost, empty handlers
AWS
No gate
Harbinger is the slowest of the three brokers
A gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. pass means every applicable criterion passed. Descriptive studies have no overall gate, and incomplete registrations are labeled separately. Raw artifacts are hashed, but not all per-message files are committed.
Method
How we measured
Three evidence types. Production flow runs a real gRPCgRPCA fast way for programs to call each other over a network. Harbinger's producers and consumers talk to the broker with it.Learn more ↗brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ and CPU-work handlers on nine synthetic job types, a flash sale and a cost shift. Real-broker trace replay uses public durations with sleeping handlers. Simulations run scheduling code on simulated time; HPC results and parameter sensitivity remain simulation-only. These are different tests, not interchangeable replications.
Laptop
CPU
Intel Core i7-11800H, 8 cores / 16 threads
Settings
Turbo off, 2.3 GHz cap, performance profile
Machine
14 GB RAM, Ubuntu 26.04.1, on AC power
Conditions
Sampled every 30 s: median load 1.04 on 16 threads
Job sizes and arrival rates are fixed, so a slower CPU means a heavier load. The original laptop run had a CPU 1.6–1.8× faster than the quiet re-run, and AWS is faster again.
Image resize kernel (ms per megapixel, lower is faster)
AWS
6.60
Original laptop run
8.11
Quiet laptop re-run
13.15
FIFO mean latency on the same workload (s)
Original laptop run
8.0 s
Quiet laptop re-run
13.1 s
Benchmark 1
Production flow: laptop and AWS
Seven arms, five seedsSeedA starting number for a random generator. Same seed, same random-looking data, so a run can be repeated exactly.Learn more ↗, about 35,000 messages per run. The gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. needs every criterion to pass, with intervals paired by seed.
Mean latency reduction vs FIFO
Original laptop run
−27.9%
Quiet laptop re-run
−25.6%
AWS
−30.8%
Predictive routing against FIFO. The AWS point is the independent replication.
Every v2 criterion, laptop re-run against AWS. All ten passed on both.
Criterion
Laptop re-run
AWS
P1 meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ (≤ −15%)
−25.6% [−29.4, −21.8]
−30.8% [−35.3, −27.1]
P2 short-job medianMedianThe middle value: half the jobs are faster, half slower. It describes a typical job and ignores rare outliers.Learn more ↗ vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ (≤ −30%)
−57.7% [−70.0, −45.3]
−94.8% [−99.0, −86.5]
G1 all-message P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ (≤ 1.25×)
1.02× [1.00, 1.05]
1.03× [1.02, 1.05]
G2 export max wait vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ (≤ 2.0×)
0.99× [0.95, 1.03]
0.99× [0.90, 1.05]
G3 no lost work
Pass
Pass
G4 throughputThroughputHow many messages get finished per second.Learn more ↗ vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ (≥ 0.98×)
1.00×
1.00× [1.00, 1.00]
S1 vs hand-tuned static mapStatic priorityA hand-written rule that fixes each job type's priority in advance and never changes with what's observed. (≤ +10%)
−11.1%
−14.4%
S2 vs misconfigured static mapStatic priorityA hand-written rule that fixes each job type's priority in advance and never changes with what's observed.
−30.1%
−36.8%
S3 shadowShadow modeThe predictor runs and learns, but its guesses are only recorded, never used. Safe way to try it on real traffic.-mode overhead (±5%)
+0.1%
−0.1%
S4 producerProducerA program that creates messages and sends them to the queue.Learn more ↗-only keysKeyWhat Harbinger groups messages by when learning: the producer, optionally plus a job_type label (and size). Each key gets its own duration history. vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ (≤ −5%)
−10.5%
−15.7%
What it shows
Every verdict reproduced on a quiet machine and again on separate cloud hardware.
MeanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗latencyLatencyHow long a message takes from being sent to being finished, including time spent waiting in the queue.Learn more ↗ gains were 26–31% in every environment, and the tuned static mapStatic priorityA hand-written rule that fixes each job type's priority in advance and never changes with what's observed. was beaten by 11–14%.
The predictorPredictorThe part of the broker that estimates how long a message will take, using what earlier messages with the same key took. is close to its ceiling. On AWS the oracleOracleA reference that cheats by knowing each job's true cost in advance. It shows what perfect knowledge would give, not what's achievable. was 32% below FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ and predictive 29%.
ShadowShadow modeThe predictor runs and learns, but its guesses are only recorded, never used. Safe way to try it on real traffic.-mode overhead was not measurable in this benchmark: ±0.1% against FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗.
The tail did not improve. All-message P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ was 1.02–1.03× FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗, so the claim is about the meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ and the medianMedianThe middle value: half the jobs are faster, half slower. It describes a typical job and ignores rare outliers.Learn more ↗, not the tail.
AWS, brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ on its own host, two repetitions with a flash sale lasting six minutes. This run had no gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes., only eight checks that had to hold in both repetitions. Three failed.
Predictive routing vs FIFO, mean latency by phase
Steady
−23%
Ramp
−54%
Flash sale
−7%
Recovery
−4%
Shifted
−18%
← better than FIFOworse than FIFO →
Mean latency by phase in milliseconds, median of two repetitions
Phase
FIFO
Static, tuned
Shadow
Predictive
Change
Steady (0–6 min)
59
50
59
46
−23%
Ramp (6–9)
471
284
466
215
−54%
Flash sale (9–15)
67,720
64,867
67,733
62,897
−7%
Recovery (15–21)
91,573
89,178
91,274
87,678
−4%
Shifted (21–30)
12,593
10,908
12,367
10,325
−18%
No guardrailGuardrailA metric that must not get much worse, even if the main metric improves. Tail latency and lost work are guardrails here. moved: P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ and the export max wait match FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗.
ShadowShadow modeThe predictor runs and learns, but its guesses are only recorded, never used. Safe way to try it on real traffic.-mode overhead was not measurable, and predictive stayed ahead of the hand-tuned static mapStatic priorityA hand-written rule that fixes each job type's priority in advance and never changes with what's observed. in this run.
After the mid-run cost shift, predictive was 15–23% ahead of FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ with no drift alerts.
Benchmark 3 · v4
Real traces through the real broker
Azure FunctionsServerlessA cloud style where you upload small functions and the provider runs them on demand. The Azure Functions trace records one such platform's invocations.Learn more ↗ 2021 and Huawei Cloud 2025 R5, at three loads, on AWS. GateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. A uses default-agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ predictive routing; gate B adds level weightsLevel weightsInstead of always serving the highest level first, each level gets a share of worker time (for example 8 : 3 : 1). Lower levels still make steady progress. and pausing agingPausing agingAging that holds off promoting a message while the level above is still working through earlier promoted messages. It stops a long backlog from pushing everything to the top.. Gate A passes 0 of 6 cells; gate B passes 4 of 6. All three Huawei repeats agree on every verdict.
v4 real-broker replay: window-average mean-latency change vs FIFO, with 95% intervals
Trace · load
Default-aging routing
Gate A
Weights + pausing
Gate B
Huawei R5 · 0.50
−2.5% [−4.6, +0.0]
Fail
−2.4% [−4.4, +0.0]
Fail
Huawei R5 · 0.80
−10.9% [−14.8, −1.6]
Fail
−37.0% [−66.0, −4.0]
Pass
Huawei R5 · 0.95
−8.4% [−11.5, −3.2]
Fail
−47.1% [−74.8, −17.9]
Pass
Azure 2021 · 0.50
−0.9% [−1.9, −0.2]
Fail
−8.0% [−11.5, −4.3]
Fail
Azure 2021 · 0.80
−1.6% [−3.0, −0.6]
Fail
−15.3% [−23.9, −9.0]
Pass
Azure 2021 · 0.95
−2.2% [−3.9, −1.1]
Fail
−17.2% [−25.8, −11.6]
Pass
28 equal-trace-time windows; moving-block bootstrapBootstrapA statistics method that re-samples your own results many times to see how much they could vary by chance.Learn more ↗, block length 4, 10,000 resamples. Huawei pools three repeats; Azure has one run per cell. P1 requires a point estimate ≤ −15% and an interval below zero, not an entire interval below −15%. G1 and G2 require interval upper bounds ≤ 2.0× FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ for P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ and long-class maximum wait. Valid runs also require all messages completed, no DLQDead-letter queue (DLQ)Where messages go after they fail too many times or expire, so they can be inspected instead of retried forever.Learn more ↗ or lease expiry, and producerProducerA program that creates messages and sends them to the queue.Learn more ↗ P99 lateness ≤ 10 ms in real time. GateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. B's point ratios are at most 1.12× for P99 and 1.14× for long-class maximum wait across these cells.
The original v3 serverlessServerlessA cloud style where you upload small functions and the provider runs them on demand. The Azure Functions trace records one such platform's invocations.Learn more ↗ simulation passed 1/6 routing cells and 5/6 weighted cells. Re-estimating with 28 windows and block bootstrapBootstrapA statistics method that re-samples your own results many times to see how much they could vary by chance.Learn more ↗ changes Huawei routing at 0.8 and Azure weighted at 0.5 to failures, yielding 0/6 and 4/6—the same verdicts as real-brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ replay. The HPC logs below were not replayed through the real broker and are not pooled with those six cells.
Historical v3 simulation: mean latency vs FIFO under the original seven-window analysis. Filled cells passed then; serverless verdicts were revised in v4.
Trace
Arm
Load 0.5
Load 0.8
Load 0.95
Azure Functions 2021
Routing alone
−0.7%
−0.9%
−1.2%
+ weights, pausing aging
−15.4%
−22.8%
−25.3%
Perfect predictions + weights
−26.5%
−33.3%
−36.7%
Huawei 2025
Routing alone
−4.8%
−15.0%
−7.9%
+ weights, pausing aging
−4.3%
−46.5%
−49.9%
Perfect predictions + weights
−3.2%
−37.8%
−50.0%
LPC-EGEE 2004
Routing alone
0.0%
0.0%
0.0%
+ weights, pausing aging
+1.0%
+1.9%
+8.5%
Perfect predictions + weights
−33.1%
−52.1%
−53.8%
DAS2-fs2 2003
Routing alone
0.0%
0.0%
0.0%
+ weights, pausing aging
+2.7%
+88.8%
+72.2%
Perfect predictions + weights
−6.0%
−30.1%
−49.2%
This grid preserves the original v3 analysis, not the latest serverlessServerlessA cloud style where you upload small functions and the provider runs them on demand. The Azure Functions trace records one such platform's invocations.Learn more ↗ verdicts. DAS2-fs2 also failed its tail and long-job guardrailsGuardrailA metric that must not get much worse, even if the main metric improves. Tail latency and lost work are guardrails here..
Look closer
Azure Functions 2021 · real-broker replay
On the real brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗, default-agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ routing gained only 1–2% and failed all three cells. WeightsLevel weightsInstead of always serving the highest level first, each level gets a share of worker time (for example 8 : 3 : 1). Lower levels still make steady progress. and pausing agingPausing agingAging that holds off promoting a message while the level above is still working through earlier promoted messages. It stops a long backlog from pushing everything to the top. passed at loads 0.8 and 0.95, not 0.5.
The load-0.8 pass is narrow: −15.3% against a −15% point-estimate bar. Azure ran once per cell, so repeat-based stability is unknown.
The gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. averages equal-time windows. Whole-run weighted meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ gains are only −7.9% and −9.3% at loads 0.8 and 0.95, because the final day's backlogBacklogMessages that have arrived but are still waiting because workers can't keep up. holds most of the work.
Eleven arms, ten seedsSeedA starting number for a random generator. Same seed, same random-looking data, so a run can be repeated exactly.Learn more ↗, 110 production-flow runs; all messages completed. This is a descriptive study, with no overall pass gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes.. Predictive routing lowered meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗latencyLatencyHow long a message takes from being sent to being finished, including time spent waiting in the queue.Learn more ↗ 32.1% [29.6, 34.4] vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ and 15.5% [13.3, 17.8] vs a tuned static mapStatic priorityA hand-written rule that fixes each job type's priority in advance and never changes with what's observed.. But per-type fair queueing did better on the mean without predicting durations.
Median run metrics on the v4 synthetic workload; milliseconds, lower is better
Arm
Mean
Short-job P50
All-message P99
FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗
6,927.7
4,965.1
21,099.4
Predictive
4,779.7
39.3
21,753.9
Per-type fair queueing
2,726.4
16.1
31,954.9
What the predictor ablations establish
Removing decay/idle forgetting, the spread gateSpread gateIf a key's slowest runs (p99) are more than 16× its typical run (median), its cost is too erratic to trust, so it takes the default tier., staleness, or minimum observations changes the overall meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ by only 0.0–0.4%; each interval is within ±3%. This workload does not demonstrate an overall benefit from those components.
Shifted-phase results are inconclusive, not proof that adaptation never helps. Censored-share handling was not ablated.
The medianMedianThe middle value: half the jobs are faster, half slower. It describes a typical job and ignores rare outliers.Learn more ↗ remains the better tested summary: the meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ estimator is +3.6% [+1.4, +6.1] worse and P75 +3.8% [+1.6, +6.3] worse than default predictive routing.
Turning agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ off is a separate intervention from adding weightsLevel weightsInstead of always serving the highest level first, each level gets a share of worker time (for example 8 : 3 : 1). Lower levels still make steady progress. with pausing agingPausing agingAging that holds off promoting a message while the level above is still working through earlier promoted messages. It stops a long backlog from pushing everything to the top.. Both can preserve the predicted order, but neither removes the trade-off between short jobs and long waits.
Separate Huawei aging-off replay: window metrics vs each run's own FIFO, with 95% intervals
Metric
Load 0.8
Load 0.95
Default-agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ change
−11.0% [−15.1, −1.7] · fail
−8.5% [−11.7, −3.2] · fail
AgingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗-off meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ change
−37.4% [−66.0, −4.4] · pass
−45.4% [−73.6, −16.2] · pass
AgingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗-off P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ ratio
1.07× [1.01, 1.15]
1.12× [1.02, 1.18]
AgingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗-off long max-wait ratio
1.16× [1.02, 1.23]
1.14× [1.03, 1.21]
All three repeats agree at each load; all 18 runs completed without DLQDead-letter queue (DLQ)Where messages go after they fail too many times or expire, so they can be inspected instead of retried forever.Learn more ↗, submit errors or lost leases. AgingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ off also improves meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ vs default-aging predictive by 34.1% and 41.8%. These runs use their own controlsControlA test case designed so the thing being measured shouldn't help. If it still shows a gain, something is wrong.Learn more ↗ and different host sizes from the main replay. Runs of roughly 20–25 minutes do not establish starvation freedom over hours.
Synthetic production-flow isolation
Across ten seedsSeedA starting number for a random generator. Same seed, same random-looking data, so a run can be repeated exactly.Learn more ↗, agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ off lowers meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗latencyLatencyHow long a message takes from being sent to being finished, including time spent waiting in the queue.Learn more ↗ another 37.4% [35.1, 39.8] vs predictive and 57.6% [57.1, 58.1] vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗. Against FIFO, P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ rises 13.6% [12.6, 14.6] and long-class maximum wait 13.6% [12.0, 14.7]. Against predictive, those costs are 10.1% and 12.2%. The mechanism is measured; the cost is measured too.
AWS repeats the weighted-aging and size-bin misses
WeightsLevel weightsInstead of always serving the highest level first, each level gets a share of worker time (for example 8 : 3 : 1). Lower levels still make steady progress. with pausing agingPausing agingAging that holds off promoting a message while the level above is still working through earlier promoted messages. It stops a long backlog from pushing everything to the top. lower meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗latencyLatencyHow long a message takes from being sent to being finished, including time spent waiting in the queue.Learn more ↗ 57.5% vs FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ and 38.4% [34.7, 41.9] vs predictive. But P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ vs predictive is 1.100× [1.091, 1.107]; its upper bound exceeds the 1.10× limit, so the gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. fails despite the rounded point estimate.
Size bins change meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗latencyLatencyHow long a message takes from being sent to being finished, including time spent waiting in the queue.Learn more ↗ −1.5% [−4.5, +0.4] vs job-type keysKeyWhat Harbinger groups messages by when learning: the producer, optionally plus a job_type label (and size). Each key gets its own duration history., failing the −3% criterion. Invoice mean rises 9.5% [4.4, 15.9]; resize intervals are too wide for a directional conclusion. Better prediction is not automatically better end-to-end latency.
CPU-work production-flow validation: predictive mean change vs FIFO
Environment
Measured
Simulated
Effect gap
Quiet laptop
−25.6%
−37.0%
11.4 points · fail
AWS
−30.8%
−42.7%
11.8 points · fail
Both fail the 10-percentage-point effect-agreement criterion, though phase directions and policy-group order pass. Simulated absolute latencies are only 0.31–0.41× measured. Production-flow conversion also omits failed-attempt work for 64 retried local messages. The simulation does not faithfully model CPU contention.
Parameter sensitivity is still simulation-only
At load 0.8 under the original seven-window rule, P1 passes across 18 tested configurations (including default): Azure routing 0, weighted 16; Huawei routing 10, weighted 18. Azure weighted fails with min_samples=100 and with two levels. These are P1 sensitivity results, not full-gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. robustness counts.
Huawei routing is sensitive to agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗: thresholds of 1 s, 5 s and 30 s yield −3.3%, −15.0% and −40.7% meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ changes. A parameter setting can change the verdict.
Using 28 windows and block bootstrapBootstrapA statistics method that re-samples your own results many times to see how much they could vary by chance.Learn more ↗ changes two original simulation passes to failures. The registered Part C—real-brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ replay of verdict-flipping variants—was triggered but not run. Main replay of the default configuration does not substitute for that missing confirmation.
On the tested synthetic production flow, predictive routing beats FIFOFIFOFirst in, first out. Messages are served strictly in arrival order, like a single supermarket line.Learn more ↗ and the hand-tuned map on meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ and short-job latencyLatencyHow long a message takes from being sent to being finished, including time spent waiting in the queue.Learn more ↗, without a per-endpoint priority map.
The original production-flow result replicates: laptop, quiet laptop re-run and AWS agree on every v2 gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. verdict.
Shadow modeShadow modeThe predictor runs and learns, but its guesses are only recorded, never used. Safe way to try it on real traffic. changes no routing and had no measurable overhead in those runs.
The idea is not tied to Harbinger's brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗. It also works beside RabbitMQ.
Holds with conditions
KeysKeyWhat Harbinger groups messages by when learning: the producer, optionally plus a job_type label (and size). Each key gets its own duration history. must recur and predict well. They do on serverlessServerlessA cloud style where you upload small functions and the provider runs them on demand. The Azure Functions trace records one such platform's invocations.Learn more ↗ traces and mostly do not on the two HPC logs.
Default-agingAgingA message that has waited too long is moved up one priority level, so low-priority work is delayed but never stuck forever.Learn more ↗ routing passes 0/6 real-brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗serverlessServerlessA cloud style where you upload small functions and the provider runs them on demand. The Azure Functions trace records one such platform's invocations.Learn more ↗ cells. WeightsLevel weightsInstead of always serving the highest level first, each level gets a share of worker time (for example 8 : 3 : 1). Lower levels still make steady progress. with pausing agingPausing agingAging that holds off promoting a message while the level above is still working through earlier promoted messages. It stops a long backlog from pushing everything to the top. pass 4/6; aging off also restores gains on Huawei, with tail and long-wait costs.
Predictive is not universally better: per-type fair queueing beats its meanMeanThe ordinary average. It is pulled up by a few very slow items, so it shows the overall experience better than the median does.Learn more ↗ on the synthetic workload, and a history-built static mapStatic priorityA hand-written rule that fixes each job type's priority in advance and never changes with what's observed. matches or beats it on Huawei.
Effect sizes depend on load relative to CPU speed.
Not claimed
Better tail latencyLatencyHow long a message takes from being sent to being finished, including time spent waiting in the queue.Learn more ↗ or hours-long starvation freedom. Short-job gains can increase P99P95 / P99 (tail latency)P99 is the time that 99% of messages beat. It describes the slowest 1%, the "tail", which matters because users notice the slow ones.Learn more ↗ and long-job waits.
Production readiness. All evidence is synthetic or trace-driven, and the brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ is in-memory with no durability.
That learned models never help. The workloads tested had little for one to find.
Anything about other clouds, wide-area networks or durable queue modes.
When to turn it on
Start in shadow mode. It records predictions without changing routing. Measure its overhead on your workload.
Check that keys predict. Run a per-key predictability check on your own history. If most jobs sit on recurring keys with stable durations, move on.
Replay your workload against meaningful baselines. Include FIFO, a history-built static map and an appropriate fair scheduler. Predictability alone does not guarantee a gain.
Set tail and long-job budgets before enabling a policy. Compare default aging, weights with pausing, and aging off where relevant; use measured benefits and costs, not a blanket recommendation.
This sequence is our reading of the results, not a pre-registeredPre-registrationWriting down the hypotheses, setup and pass/fail rules before running the experiment, so results can't be quietly reinterpreted afterwards.Learn more ↗ result. The predictability check as a deployment guideline comes from the HPC-log findings, and an automatic safeguard is future work.
Limits of the evidence
The production flow is one scenario that we wrote. ServerlessServerlessA cloud style where you upload small functions and the provider runs them on demand. The Azure Functions trace records one such platform's invocations.Learn more ↗ replay uses sleeping handlers and some reconstructed arrivals; HPC and sensitivity variants remain simulation-only.
One cloud provider and region, with experiment-specific host layouts. Results do not establish behaviour on other infrastructure.
Azure has one run per replay cell; two Huawei brokerBrokerThe server in the middle. Producers hand messages to it, and consumers pull messages from it.Learn more ↗ deaths remain unexplained. Roughly 5.8 GB of raw replay artifacts are hashed but not committed; run summaries are available.
The 30-minute run has two repetitions, so its checks carry no intervals.
The budgets of the first experiment were set after seeing earlier data, so that gateGateA pass/fail test agreed before running an experiment. Predictive routing is only allowed if every gate passes. is less independent than the later ones.