mozilla
neqo
BlogDocsChangelog

perf(qlog): introduce outer `Option`

#3129Merged
Comparing
mxinden:qlog-option
(
2b8ca27
) with
main
(
431eee4
)
CodSpeed Performance Gauge
-18%
Improvements
3
Regressions
1
Untouched
19

Benchmarks

Failed

client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-100mb-resp (aka. Download)
Regression
CodSpeed Performance Gauge
-18%
705.8 ms856.2 ms

Improved

client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-100mb-req (aka. Upload)
CodSpeed Performance Gauge
+4%
919.8 ms882.3 ms
wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1000-streams/each-1-bytes
CodSpeed Performance Gauge
+4%
33.7 ms32.5 ms
wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1-streams/each-1000-bytes
CodSpeed Performance Gauge
+3%
1.1 ms1.1 ms

Passed

decode 4096 bytes, mask ff
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
+3%
18.5 µs18 µs
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_variable::transfer/pacing-true/varying-seeds/wallclock-time
CodSpeed Performance Gauge
+2%
164.9 ms161.8 ms
wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1000-streams/each-1000-bytes
CodSpeed Performance Gauge
+2%
122.4 ms120.3 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_variable::transfer/pacing-false/varying-seeds/wallclock-time
CodSpeed Performance Gauge
+1%
164.8 ms162.9 ms
decode 4096 bytes, mask 7f
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
+1%
35.3 µs35 µs
take_ranges
neqo-transport/benches/sent_packets.rs::benches::take_ranges::sent::Packets
CodSpeed Performance Gauge
0%
30.1 µs30.1 µs
client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-1b-resp (aka. HPS)
CodSpeed Performance Gauge
0%
15.1 ms15.1 ms
decode 1048576 bytes, mask 7f
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
0%
8.9 ms8.9 ms
inbound_frame()
neqo-transport/benches/rx_stream_orderer.rs::benches::criterion_benchmark::RxStreamOrderer
CodSpeed Performance Gauge
0%
125.8 ms125.8 ms
decode 1048576 bytes, mask 3f
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
0%
11.5 ms11.5 ms
decode 4096 bytes, mask 3f
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
0%
45.4 µs45.4 µs
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_fixed::transfer/pacing-false/same-seed/wallclock-time
CodSpeed Performance Gauge
0%
161.4 ms161.5 ms
decode 1048576 bytes, mask ff
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
0%
4.5 ms4.5 ms
client
neqo-bin/benches/main.rs::benches::transfer::1-conn/10_000-parallel-1b-resp (aka. RPS)
CodSpeed Performance Gauge
0%
368.5 ms369 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_fixed::transfer/pacing-true/same-seed/wallclock-time
CodSpeed Performance Gauge
0%
161.5 ms162 ms
coalesce_acked_from_zero 10+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
-1%
2.9 µs3 µs
coalesce_acked_from_zero 3+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
-1%
2.9 µs3 µs
coalesce_acked_from_zero 1+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
-1%
2.8 µs2.8 µs
coalesce_acked_from_zero 1000+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
-1%
2.6 µs2.6 µs

Commits

Click on a commit to change the comparison range
Base
main
431eee4
-4.88%
perf(qlog): change to Option<Rc<RefCell<Option<SharedStreamer>>>> Currently qlog is defined as: ```rust pub struct Qlog { inner: Rc<RefCell<Option<SharedStreamer>>>, } ``` https://github.com/mozilla/neqo/issues/1894 documents our finding, that dereferencing the `Rc<RefCell<_>>` is costly, i.e. showing up in our CPU profiles. When writing to the qlog fails, we set the (inner) `Option` to `None`. Thus on each consecutive logging atttempt we dereference the `Rc<RefCell<_>>` only to find out that logging is disabled. This patch still sets the inner `Option` to `None` to inform all other clones of the `Rc` that logging is disabled. In addition, it introduces an outer `Option`, which as well is set to `None`, thus avoiding the dereferencing of the `Rc<RefCell<_>>` on each logging attempt once logging has failed. --- Fixes https://github.com/mozilla/neqo/issues/1894. Alternative for https://github.com/mozilla/neqo/pull/3005.
032cd27
1 month ago
by mxinden
+8.63%
Merge branch 'main' into qlog-option Signed-off-by: Lars Eggert <lars@eggert.org>
8bdce3f
24 days ago
by larseggert
-12.26%
@martinthomson's suggestion
897552e
22 days ago
by larseggert
+4.98%
Update qlog.rs Co-authored-by: Max Inden <mail@max-inden.de> Signed-off-by: Lars Eggert <lars@eggert.org>
bcfe9db
21 days ago
by larseggert
-17.17%
Suggestion from @mxinden
27624c5
18 days ago
by larseggert
+3.13%
Update neqo-common/src/qlog.rs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Lars Eggert <lars@eggert.org>
2b8ca27
18 days ago
by larseggert
© 2025 CodSpeed Technology
Home Terms Privacy Docs