fix: Replace qpack::Data with trait#3013
Conversation
There was a problem hiding this comment.
Pull Request Overview
This PR refactors the QPACK implementation by replacing the custom qpack::Data struct with a trait-based approach. The main purpose is to eliminate code duplication and leverage the existing neqo_common::Encoder functionality for QPACK encoding operations.
Key changes:
- Introduces
QpackEncodertrait with QPACK-specific encoding methods - Implements the trait for
neqo_common::Encoder<B>whereB: Buffer - Updates all usage sites to use
neqo_common::Encoderdirectly instead of customDatastruct
Reviewed Changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| neqo-qpack/src/qpack_send_buf.rs | Replaces Data struct with QpackEncoder trait and implementation |
| neqo-qpack/src/lib.rs | Exports the new QpackEncoder trait |
| neqo-qpack/src/header_block.rs | Updates HeaderEncoder to use neqo_common::Encoder |
| neqo-qpack/src/encoder_instructions.rs | Updates instruction marshaling to use trait-based approach |
| neqo-qpack/src/encoder.rs | Replaces Data usage with neqo_common::Encoder |
| neqo-qpack/src/decoder_instructions.rs | Updates decoder instruction marshaling |
| neqo-qpack/src/decoder.rs | Replaces Data buffer with neqo_common::Encoder and updates buffer management |
| neqo-common/src/codec.rs | Adds new_with_vec constructor for Encoder |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #3013 +/- ##
==========================================
- Coverage 93.49% 93.47% -0.03%
==========================================
Files 125 125
Lines 36635 36672 +37
Branches 36635 36672 +37
==========================================
+ Hits 34253 34280 +27
- Misses 1537 1546 +9
- Partials 845 846 +1
|
|
| Branch | fix-2754 |
| Testbed | On-prem |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result nanoseconds (ns) (Result Δ%) | Upper Boundary nanoseconds (ns) (Limit %) |
|---|---|---|---|
| 1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client | 📈 view plot 🚷 view threshold | 207,670,000.00 ns(+0.03%)Baseline: 207,598,774.19 ns | 216,986,973.93 ns (95.71%) |
| 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client | 📈 view plot 🚷 view threshold | 199,250,000.00 ns(-1.27%)Baseline: 201,807,419.35 ns | 211,771,059.64 ns (94.09%) |
| 1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client | 📈 view plot 🚷 view threshold | 38,786,000.00 ns(+15.88%)Baseline: 33,470,711.83 ns | 45,520,216.60 ns (85.21%) |
| 1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client | 📈 view plot 🚷 view threshold | 286,590,000.00 ns(-1.07%)Baseline: 289,694,215.05 ns | 302,885,529.80 ns (94.62%) |
| 1-streams/each-1000-bytes/simulated-time | 📈 view plot 🚷 view threshold | 119,260,000.00 ns(+0.41%)Baseline: 118,777,935.48 ns | 120,583,291.95 ns (98.90%) |
| 1-streams/each-1000-bytes/wallclock-time | 📈 view plot 🚷 view threshold | 583,320.00 ns(-1.23%)Baseline: 590,561.29 ns | 612,134.00 ns (95.29%) |
| 1000-streams/each-1-bytes/simulated-time | 📈 view plot 🚷 view threshold | 2,331,400,000.00 ns(-78.03%)Baseline: 10,611,516,774.19 ns | 24,675,479,358.68 ns (9.45%) |
| 1000-streams/each-1-bytes/wallclock-time | 📈 view plot 🚷 view threshold | 12,399,000.00 ns(-8.21%)Baseline: 13,507,668.82 ns | 15,216,153.93 ns (81.49%) |
| 1000-streams/each-1000-bytes/simulated-time | 📈 view plot 🚷 view threshold | 16,392,000,000.00 ns(-9.26%)Baseline: 18,065,079,569.89 ns | 20,963,297,942.79 ns (78.19%) |
| 1000-streams/each-1000-bytes/wallclock-time | 📈 view plot 🚷 view threshold | 49,691,000.00 ns(-1.83%)Baseline: 50,616,086.02 ns | 56,171,436.00 ns (88.46%) |
| RxStreamOrderer::inbound_frame() | 📈 view plot 🚷 view threshold | 108,550,000.00 ns(-1.06%)Baseline: 109,709,698.92 ns | 111,433,327.91 ns (97.41%) |
| coalesce_acked_from_zero 1+1 entries | 📈 view plot 🚷 view threshold | 89.35 ns(+0.35%)Baseline: 89.04 ns | 90.34 ns (98.90%) |
| coalesce_acked_from_zero 10+1 entries | 📈 view plot 🚷 view threshold | 105.68 ns(-0.34%)Baseline: 106.04 ns | 107.13 ns (98.65%) |
| coalesce_acked_from_zero 1000+1 entries | 📈 view plot 🚷 view threshold | 91.54 ns(+0.89%)Baseline: 90.73 ns | 95.16 ns (96.20%) |
| coalesce_acked_from_zero 3+1 entries | 📈 view plot 🚷 view threshold | 106.35 ns(-0.18%)Baseline: 106.54 ns | 107.57 ns (98.87%) |
| decode 1048576 bytes, mask 3f | 📈 view plot 🚷 view threshold | 1,759,700.00 ns(+5.40%)Baseline: 1,669,470.97 ns | 1,873,606.48 ns (93.92%) |
| decode 1048576 bytes, mask 7f | 📈 view plot 🚷 view threshold | 5,066,100.00 ns(+0.10%)Baseline: 5,061,240.43 ns | 5,107,419.06 ns (99.19%) |
| decode 1048576 bytes, mask ff | 📈 view plot 🚷 view threshold | 3,000,900.00 ns(-0.72%)Baseline: 3,022,815.27 ns | 3,056,742.79 ns (98.17%) |
| decode 4096 bytes, mask 3f | 📈 view plot 🚷 view threshold | 6,213.20 ns(-12.13%)Baseline: 7,070.89 ns | 9,911.44 ns (62.69%) |
| decode 4096 bytes, mask 7f | 📈 view plot 🚷 view threshold | 19,608.00 ns(-0.77%)Baseline: 19,760.50 ns | 20,356.95 ns (96.32%) |
| decode 4096 bytes, mask ff | 📈 view plot 🚷 view threshold | 11,363.00 ns(-0.01%)Baseline: 11,364.29 ns | 12,360.19 ns (91.93%) |
| sent::Packets::take_ranges | 📈 view plot 🚷 view threshold | 4,573.30 ns(-2.53%)Baseline: 4,691.96 ns | 4,938.68 ns (92.60%) |
| transfer/pacing-false/same-seed/simulated-time/run | 📈 view plot 🚷 view threshold | 25,234,000,000.00 ns(-0.51%)Baseline: 25,364,533,477.32 ns | 25,926,320,852.70 ns (97.33%) |
| transfer/pacing-false/same-seed/wallclock-time/run | 📈 view plot 🚷 view threshold | 25,711,000.00 ns(+0.96%)Baseline: 25,465,593.95 ns | 27,008,456.39 ns (95.20%) |
| transfer/pacing-false/varying-seeds/simulated-time/run | 📈 view plot 🚷 view threshold | 25,172,000,000.00 ns(-0.03%)Baseline: 25,180,246,220.30 ns | 25,231,976,704.33 ns (99.76%) |
| transfer/pacing-false/varying-seeds/wallclock-time/run | 📈 view plot 🚷 view threshold | 25,505,000.00 ns(-0.40%)Baseline: 25,607,412.53 ns | 27,191,224.55 ns (93.80%) |
| transfer/pacing-true/same-seed/simulated-time/run | 📈 view plot 🚷 view threshold | 25,069,000,000.00 ns(-1.51%)Baseline: 25,452,710,583.15 ns | 26,018,173,667.35 ns (96.35%) |
| transfer/pacing-true/same-seed/wallclock-time/run | 📈 view plot 🚷 view threshold | 26,487,000.00 ns(-0.87%)Baseline: 26,719,701.94 ns | 28,613,277.93 ns (92.57%) |
| transfer/pacing-true/varying-seeds/simulated-time/run | 📈 view plot 🚷 view threshold | 24,978,000,000.00 ns(-0.08%)Baseline: 24,997,159,827.21 ns | 25,045,791,138.16 ns (99.73%) |
| transfer/pacing-true/varying-seeds/wallclock-time/run | 📈 view plot 🚷 view threshold | 26,186,000.00 ns(+0.22%)Baseline: 26,127,609.07 ns | 27,751,458.19 ns (94.36%) |
- Add efficient drain method to Encoder<Vec<u8>> following Rust semantics - Replace inefficient buffer management in QPACK decoder that was converting Encoder to Vec and back with direct drain() call - Improve documentation for new_with_vec method to clarify behavior with existing buffer data Eliminates unnecessary allocations and follows idiomatic Rust patterns.
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
mxinden
left a comment
There was a problem hiding this comment.
In favor of the extension trait pattern. Seems more ergonomic.
Co-authored-by: Max Inden <[email protected]> Signed-off-by: Lars Eggert <[email protected]>
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 2 comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Co-authored-by: Max Inden <[email protected]> Signed-off-by: Lars Eggert <[email protected]>
Co-authored-by: Copilot <[email protected]> Signed-off-by: Lars Eggert <[email protected]>
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Co-authored-by: Copilot <[email protected]> Signed-off-by: Lars Eggert <[email protected]>
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Co-authored-by: Copilot <[email protected]> Signed-off-by: Lars Eggert <[email protected]>
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated no new comments.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
There was a problem hiding this comment.
Pull Request Overview
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Signed-off-by: Lars Eggert <[email protected]>
CodSpeed Performance ReportMerging #3013 will improve performances by 10.94%Comparing Summary
Benchmarks breakdown
|
Signed-off-by: Lars Eggert <[email protected]>
| impl Clone for Encoder { | ||
| fn clone(&self) -> Self { | ||
| Self { | ||
| buf: self.as_ref().to_vec(), | ||
| start: 0, | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
The Clone implementation behavior (not cloning skipped bytes and resetting start to 0) is subtle and should be documented. Add a doc comment explaining that cloning produces a new encoder containing only the visible (non-skipped) portion of the buffer, with the start offset reset to 0.
| impl<B: Buffer> PartialEq for Encoder<B> { | ||
| fn eq(&self, other: &Self) -> bool { | ||
| self.as_ref() == other.as_ref() | ||
| } | ||
| } |
There was a problem hiding this comment.
The PartialEq implementation compares only the visible bytes (respecting skip). This semantic change from the original derived implementation should be documented. Add a doc comment explaining that equality is based on the logical view of the buffer after accounting for skipped bytes.
| /// Skip the first `n` bytes from the encoder buffer without copying. | ||
| /// This advances the internal offset, making those bytes inaccessible. | ||
| /// | ||
| /// # Panics | ||
| /// | ||
| /// Panics if `n` is greater than the current length of the encoder. | ||
| pub fn skip(&mut self, n: usize) { | ||
| assert!(n <= self.len(), "Cannot skip beyond buffer length"); | ||
| self.start += n; | ||
| } |
There was a problem hiding this comment.
The documentation for skip() should clarify that this method is only available for Encoder<Vec<u8>>, not for generic Encoder<B> where B: Buffer. This is important because the method is defined in an impl Encoder<Vec<u8>> block, not impl<B: Buffer> Encoder<B>.
Failed Interop TestsQUIC Interop Runner, client vs. server, differences relative to 126b1df. All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
|
Client/server transfer resultsPerformance differences relative to d0a5a51. Transfer of 33554432 bytes over loopback, 1504-byte MTU, min. 100 runs. All unit-less numbers are in milliseconds.
Table above only shows statistically significant changes. See all results below. All resultsTransfer of 33554432 bytes over loopback, 1504-byte MTU, min. 100 runs. All unit-less numbers are in milliseconds.
Download data for |
Benchmark resultsSignificant performance differences relative to d0a5a51. RxStreamOrderer::inbound_frame(): 💚 Performance has improved by -1.6156%. time: [108.49 ms 108.55 ms 108.62 ms]
change: [-1.8839% -1.6156% -1.4385] (p = 0.00 < 0.05)
Performance has improved.
Found 23 outliers among 100 measurements (23.00%)
5 (5.00%) low severe
7 (7.00%) low mild
7 (7.00%) high mild
4 (4.00%) high severetransfer/pacing-false/same-seed/wallclock-time/run: 💔 Performance has regressed by +3.2960%. time: [25.675 ms 25.711 ms 25.763 ms]
change: [+3.0921% +3.2960% +3.5251] (p = 0.00 < 0.05)
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/pacing-true/same-seed/wallclock-time/run: 💔 Performance has regressed by +3.6718%. time: [26.464 ms 26.487 ms 26.510 ms]
change: [+3.5007% +3.6718% +3.8243] (p = 0.00 < 0.05)
Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
2 (2.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severeAll results1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: No change in performance detected. time: [198.88 ms 199.25 ms 199.63 ms]
thrpt: [500.94 MiB/s 501.89 MiB/s 502.82 MiB/s]
change:
time: [-0.4089% -0.0506% +0.2859] (p = 0.78 > 0.05)
thrpt: [-0.2851% +0.0506% +0.4105]
No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected. time: [284.85 ms 286.59 ms 288.33 ms]
thrpt: [34.683 Kelem/s 34.893 Kelem/s 35.107 Kelem/s]
change:
time: [-0.1659% +0.7532% +1.5898] (p = 0.11 > 0.05)
thrpt: [-1.5649% -0.7476% +0.1662]
No change in performance detected.1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected. time: [38.638 ms 38.786 ms 38.965 ms]
thrpt: [25.664 B/s 25.782 B/s 25.881 B/s]
change:
time: [-1.4233% -0.7072% +0.0362] (p = 0.06 > 0.05)
thrpt: [-0.0362% +0.7122% +1.4439]
No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high severe1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: Change within noise threshold. time: [207.32 ms 207.67 ms 208.08 ms]
thrpt: [480.58 MiB/s 481.52 MiB/s 482.34 MiB/s]
change:
time: [-0.7944% -0.4659% -0.1670] (p = 0.00 < 0.05)
thrpt: [+0.1673% +0.4681% +0.8008]
Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severedecode 4096 bytes, mask ff: No change in performance detected. time: [11.325 µs 11.363 µs 11.409 µs]
change: [-0.3998% +0.0384% +0.4978] (p = 0.86 > 0.05)
No change in performance detected.
Found 16 outliers among 100 measurements (16.00%)
1 (1.00%) low severe
3 (3.00%) low mild
12 (12.00%) high severedecode 1048576 bytes, mask ff: No change in performance detected. time: [2.9915 ms 3.0009 ms 3.0120 ms]
change: [-0.7569% -0.2517% +0.2570] (p = 0.34 > 0.05)
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) low mild
1 (1.00%) high mild
8 (8.00%) high severedecode 4096 bytes, mask 7f: No change in performance detected. time: [19.561 µs 19.608 µs 19.662 µs]
change: [-0.3682% +0.1912% +1.0585] (p = 0.66 > 0.05)
No change in performance detected.
Found 18 outliers among 100 measurements (18.00%)
1 (1.00%) low severe
5 (5.00%) low mild
2 (2.00%) high mild
10 (10.00%) high severedecode 1048576 bytes, mask 7f: No change in performance detected. time: [5.0337 ms 5.0661 ms 5.1198 ms]
change: [-0.3166% +0.4679% +1.5202] (p = 0.42 > 0.05)
No change in performance detected.
Found 15 outliers among 100 measurements (15.00%)
15 (15.00%) high severedecode 4096 bytes, mask 3f: No change in performance detected. time: [6.2053 µs 6.2132 µs 6.2297 µs]
change: [-1.9253% +4.5795% +15.873] (p = 0.64 > 0.05)
No change in performance detected.
Found 15 outliers among 100 measurements (15.00%)
9 (9.00%) low mild
3 (3.00%) high mild
3 (3.00%) high severedecode 1048576 bytes, mask 3f: No change in performance detected. time: [1.7582 ms 1.7597 ms 1.7626 ms]
change: [-0.7263% -0.1451% +0.2539] (p = 0.76 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) high mild
4 (4.00%) high severe1-streams/each-1000-bytes/wallclock-time: Change within noise threshold. time: [581.12 µs 583.32 µs 585.77 µs]
change: [-2.1256% -1.3365% -0.6649] (p = 0.00 < 0.05)
Change within noise threshold.
Found 9 outliers among 100 measurements (9.00%)
9 (9.00%) high severe1-streams/each-1000-bytes/simulated-time: No change in performance detected. time: [119.03 ms 119.26 ms 119.50 ms]
thrpt: [8.1724 KiB/s 8.1883 KiB/s 8.2041 KiB/s]
change:
time: [-0.0203% +0.2361% +0.4869] (p = 0.08 > 0.05)
thrpt: [-0.4845% -0.2356% +0.0203]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild1000-streams/each-1-bytes/wallclock-time: Change within noise threshold. time: [12.362 ms 12.399 ms 12.436 ms]
change: [-0.8905% -0.4448% +0.0032] (p = 0.04 < 0.05)
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild1000-streams/each-1-bytes/simulated-time: No change in performance detected. time: [2.3280 s 2.3314 s 2.3348 s]
thrpt: [428.31 B/s 428.93 B/s 429.55 B/s]
change:
time: [-0.4122% -0.1768% +0.0504] (p = 0.14 > 0.05)
thrpt: [-0.0504% +0.1771% +0.4139]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild1000-streams/each-1000-bytes/wallclock-time: Change within noise threshold. time: [49.580 ms 49.691 ms 49.800 ms]
change: [-1.2591% -0.9410% -0.6178] (p = 0.00 < 0.05)
Change within noise threshold.1000-streams/each-1000-bytes/simulated-time: No change in performance detected. time: [16.140 s 16.392 s 16.650 s]
thrpt: [58.653 KiB/s 59.574 KiB/s 60.506 KiB/s]
change:
time: [-1.3342% +0.7584% +2.9843] (p = 0.50 > 0.05)
thrpt: [-2.8978% -0.7527% +1.3523]
No change in performance detected.coalesce_acked_from_zero 1+1 entries: No change in performance detected. time: [89.090 ns 89.348 ns 89.604 ns]
change: [-0.4063% -0.0351% +0.3374] (p = 0.86 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
6 (6.00%) high mild
2 (2.00%) high severecoalesce_acked_from_zero 3+1 entries: No change in performance detected. time: [105.99 ns 106.35 ns 106.74 ns]
change: [-0.3251% +0.1064% +0.5465] (p = 0.65 > 0.05)
No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
13 (13.00%) high severecoalesce_acked_from_zero 10+1 entries: No change in performance detected. time: [105.28 ns 105.68 ns 106.16 ns]
change: [-0.8377% +0.7389% +3.6013] (p = 0.65 > 0.05)
No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
2 (2.00%) low severe
2 (2.00%) low mild
8 (8.00%) high severecoalesce_acked_from_zero 1000+1 entries: No change in performance detected. time: [91.421 ns 91.539 ns 91.669 ns]
change: [-6.8481% -2.3249% +0.3928] (p = 0.35 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
3 (3.00%) high mild
5 (5.00%) high severeRxStreamOrderer::inbound_frame(): 💚 Performance has improved by -1.6156%. time: [108.49 ms 108.55 ms 108.62 ms]
change: [-1.8839% -1.6156% -1.4385] (p = 0.00 < 0.05)
Performance has improved.
Found 23 outliers among 100 measurements (23.00%)
5 (5.00%) low severe
7 (7.00%) low mild
7 (7.00%) high mild
4 (4.00%) high severesent::Packets::take_ranges: No change in performance detected. time: [4.4855 µs 4.5733 µs 4.6539 µs]
change: [-2.1915% +6.5395% +21.160] (p = 0.42 > 0.05)
No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severetransfer/pacing-false/varying-seeds/wallclock-time/run: Change within noise threshold. time: [25.456 ms 25.505 ms 25.562 ms]
change: [+0.4535% +0.7072% +0.9809] (p = 0.00 < 0.05)
Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
2 (2.00%) high mild
1 (1.00%) high severetransfer/pacing-false/varying-seeds/simulated-time/run: No change in performance detected. time: [25.140 s 25.172 s 25.204 s]
thrpt: [162.51 KiB/s 162.72 KiB/s 162.93 KiB/s]
change:
time: [-0.3591% -0.1534% +0.0421] (p = 0.13 > 0.05)
thrpt: [-0.0421% +0.1536% +0.3604]
No change in performance detected.transfer/pacing-true/varying-seeds/wallclock-time/run: Change within noise threshold. time: [26.129 ms 26.186 ms 26.245 ms]
change: [+2.3218% +2.6805% +3.0390] (p = 0.00 < 0.05)
Change within noise threshold.
Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) low mild
4 (4.00%) high mildtransfer/pacing-true/varying-seeds/simulated-time/run: No change in performance detected. time: [24.936 s 24.978 s 25.020 s]
thrpt: [163.71 KiB/s 163.99 KiB/s 164.26 KiB/s]
change:
time: [-0.4446% -0.2106% +0.0277] (p = 0.08 > 0.05)
thrpt: [-0.0276% +0.2111% +0.4466]
No change in performance detected.transfer/pacing-false/same-seed/wallclock-time/run: 💔 Performance has regressed by +3.2960%. time: [25.675 ms 25.711 ms 25.763 ms]
change: [+3.0921% +3.2960% +3.5251] (p = 0.00 < 0.05)
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/pacing-false/same-seed/simulated-time/run: No change in performance detected. time: [25.234 s 25.234 s 25.234 s]
thrpt: [162.32 KiB/s 162.32 KiB/s 162.32 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000]
No change in performance detected.transfer/pacing-true/same-seed/wallclock-time/run: 💔 Performance has regressed by +3.6718%. time: [26.464 ms 26.487 ms 26.510 ms]
change: [+3.5007% +3.6718% +3.8243] (p = 0.00 < 0.05)
Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
2 (2.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severetransfer/pacing-true/same-seed/simulated-time/run: No change in performance detected. time: [25.069 s 25.069 s 25.069 s]
thrpt: [163.39 KiB/s 163.39 KiB/s 163.39 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000]
No change in performance detected.Download data for |
Fixes #2754