-
Notifications
You must be signed in to change notification settings - Fork 121
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(client): remove needless process_output in process_input #1922
base: main
Are you sure you want to change the base?
Conversation
…ultiple_input There is no need to call `process_output` within `process_multiple_input` after each GRO datagram batch. Instead, process all available incoming datagrams in `process_multiple_input` and then move on to the top of the `loop`, calling `handler.handle` and then process_output` as usual.
Failed Interop TestsQUIC Interop Runner, client vs. server
All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server
Unsupported Interop TestsQUIC Interop Runner, client vs. server
|
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #1922 +/- ##
==========================================
- Coverage 94.79% 94.79% -0.01%
==========================================
Files 110 110
Lines 35722 35722
==========================================
- Hits 33864 33863 -1
- Misses 1858 1859 +1 ☔ View full report in Codecov by Sentry. |
Let's wait for a benchmark run before merging here. Just to make sure nothing depends on the additional calls to |
@mxinden the RPS bench seems to just sit there idle. |
@mxinden anything I can do to help land this? |
I suggest we land #1929 first. Might resolve the RPS benchmark stall. |
Pulled in from |
Benchmark resultsPerformance differences relative to 2e1f92e. coalesce_acked_from_zero 1+1 entries: No change in performance detected.time: [188.05 ns 188.55 ns 189.08 ns] change: [-0.3809% -0.0131% +0.4056%] (p = 0.95 > 0.05) coalesce_acked_from_zero 3+1 entries: No change in performance detected.time: [230.54 ns 231.12 ns 231.74 ns] change: [-1.3710% -0.4687% +0.1724%] (p = 0.28 > 0.05) coalesce_acked_from_zero 10+1 entries: No change in performance detected.time: [230.66 ns 231.49 ns 232.48 ns] change: [-0.2900% +0.0933% +0.4979%] (p = 0.64 > 0.05) coalesce_acked_from_zero 1000+1 entries: No change in performance detected.time: [214.26 ns 214.65 ns 215.13 ns] change: [-0.3166% +0.3603% +1.0440%] (p = 0.32 > 0.05) RxStreamOrderer::inbound_frame(): Change within noise threshold.time: [119.10 ms 119.18 ms 119.25 ms] change: [+0.4647% +0.5535% +0.6293%] (p = 0.00 < 0.05) transfer/Run multiple transfers with varying seeds: Change within noise threshold.time: [121.27 ms 121.56 ms 121.86 ms] thrpt: [32.825 MiB/s 32.905 MiB/s 32.985 MiB/s] change: time: [-0.7320% -0.4144% -0.0564%] (p = 0.02 < 0.05) thrpt: [+0.0564% +0.4161% +0.7374%] transfer/Run multiple transfers with the same seed: Change within noise threshold.time: [121.94 ms 122.12 ms 122.30 ms] thrpt: [32.706 MiB/s 32.755 MiB/s 32.804 MiB/s] change: time: [-0.5968% -0.3944% -0.1917%] (p = 0.00 < 0.05) thrpt: [+0.1921% +0.3959% +0.6004%] 1-conn/1-100mb-resp (aka. Download)/client: 💔 Performance has regressed.time: [1.7535 s 1.8771 s 1.9494 s] thrpt: [51.297 MiB/s 53.273 MiB/s 57.028 MiB/s] change: time: [+52.443% +65.455% +73.749%] (p = 0.00 < 0.05) thrpt: [-42.446% -39.561% -34.402%] 1-conn/10_000-parallel-1b-resp (aka. RPS)/client: 💔 Performance has regressed.time: [459.08 ms 461.92 ms 464.81 ms] thrpt: [21.514 Kelem/s 21.649 Kelem/s 21.783 Kelem/s] change: time: [+3.7751% +4.6991% +5.5965%] (p = 0.00 < 0.05) thrpt: [-5.2999% -4.4882% -3.6378%] 1-conn/1-1b-resp (aka. HPS)/client: No change in performance detected.time: [45.022 ms 45.273 ms 45.524 ms] thrpt: [21.966 elem/s 22.088 elem/s 22.211 elem/s] change: time: [-1.0955% -0.3266% +0.4472%] (p = 0.42 > 0.05) thrpt: [-0.4453% +0.3277% +1.1076%] Client/server transfer resultsTransfer of 33554432 bytes over loopback.
|
All green. Good news 😮💨 |
Let's hold off merging for now. |
OK, making this a draft PR for now. |
There is no need to call
process_output
withinprocess_multiple_input
after each GRO datagram batch. Instead, process all available incoming datagrams inprocess_multiple_input
and then move on to the top of theloop
, callinghandler.handle
and then process_output` as usual.