mozilla
neqo
BlogDocsChangelog

perf(qlog): introduce outer `Option`

#3129
Comparing
mxinden:qlog-option
(
bcfe9db
) with
main
(
d070393
)
CodSpeed Performance Gauge
-4%
Improvements
1
Regressions
1
Untouched
21

Benchmarks

Failed

wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1-streams/each-1000-bytes
Regression
CodSpeed Performance Gauge
-4%
1 ms1.1 ms

Improved

client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-100mb-req (aka. Upload)
CodSpeed Performance Gauge
+4%
897.1 ms866 ms

Passed

run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_fixed::transfer/pacing-true/same-seed/wallclock-time
CodSpeed Performance Gauge
+1%
163.1 ms161.6 ms
decode 4096 bytes, mask 7f
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
+1%
35.4 µs35 µs
wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1000-streams/each-1-bytes
CodSpeed Performance Gauge
0%
32.9 ms32.8 ms
decode 1048576 bytes, mask 7f
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
0%
8.9 ms8.9 ms
client
neqo-bin/benches/main.rs::benches::transfer::1-conn/10_000-parallel-1b-resp (aka. RPS)
CodSpeed Performance Gauge
0%
369.4 ms369 ms
take_ranges
neqo-transport/benches/sent_packets.rs::benches::take_ranges::sent::Packets
CodSpeed Performance Gauge
0%
30.1 µs30.1 µs
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
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 ff
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
0%
4.5 ms4.5 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_fixed::transfer/pacing-false/same-seed/wallclock-time
CodSpeed Performance Gauge
0%
161.5 ms161.6 ms
client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-1b-resp (aka. HPS)
CodSpeed Performance Gauge
0%
15.3 ms15.3 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_variable::transfer/pacing-false/varying-seeds/wallclock-time
CodSpeed Performance Gauge
0%
166.8 ms167.6 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
decode 4096 bytes, mask ff
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
-1%
18.3 µs18.6 µs
client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-100mb-resp (aka. Download)
CodSpeed Performance Gauge
-2%
706.6 ms718.8 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_variable::transfer/pacing-true/varying-seeds/wallclock-time
CodSpeed Performance Gauge
-2%
158.5 ms161.4 ms
wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1000-streams/each-1000-bytes
CodSpeed Performance Gauge
-3%
119.4 ms122.6 ms

Commits

Click on a commit to change the comparison range
Base
main
d070393
-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
24 days ago
by mxinden
+8.63%
Merge branch 'main' into qlog-option Signed-off-by: Lars Eggert <lars@eggert.org>
8bdce3f
4 days ago
by larseggert
-12.26%
@martinthomson's suggestion
897552e
2 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
17 hours ago
by larseggert
© 2025 CodSpeed Technology
Home Terms Privacy Docs