mozilla
neqo
BlogDocsChangelog

perf(qlog): introduce outer `Option`

#3129
Comparing
mxinden:qlog-option
(
032cd27
) with
main
(
b9c32c7
)
CodSpeed Performance Gauge
-5%
Improvements
1
Regressions
2
Untouched
20

Benchmarks

Failed

wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1000-streams/each-1-bytes
Regression
CodSpeed Performance Gauge
-5%
32 ms33.6 ms
decode 4096 bytes, mask ff
neqo-common/benches/decoder.rs::benches::benchmark_decoder
Regression
CodSpeed Performance Gauge
-3%
17.8 µs18.4 µs

Improved

client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-100mb-resp (aka. Download)
CodSpeed Performance Gauge
+11%
852.3 ms769 ms

Passed

wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1000-streams/each-1000-bytes
CodSpeed Performance Gauge
+1%
121 ms119.5 ms
client
neqo-bin/benches/main.rs::benches::transfer::1-conn/1-100mb-req (aka. Upload)
CodSpeed Performance Gauge
+1%
845.7 ms837.9 ms
decode 4096 bytes, mask 7f
neqo-common/benches/decoder.rs::benches::benchmark_decoder
CodSpeed Performance Gauge
0%
35.2 µs35.1 µs
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
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 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
take_ranges
neqo-transport/benches/sent_packets.rs::benches::take_ranges::sent::Packets
CodSpeed Performance Gauge
0%
30.1 µs30.1 µs
coalesce_acked_from_zero 1+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
0%
2.8 µs2.8 µs
coalesce_acked_from_zero 3+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
0%
3 µs3 µs
coalesce_acked_from_zero 10+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
0%
3 µs3 µs
coalesce_acked_from_zero 1000+1 entries
neqo-transport/benches/range_tracker.rs::benches::benchmark_coalesce
CodSpeed Performance Gauge
0%
2.6 µs2.6 µs
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_fixed::transfer/pacing-true/same-seed/wallclock-time
CodSpeed Performance Gauge
0%
167.8 ms168.1 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_fixed::transfer/pacing-false/same-seed/wallclock-time
CodSpeed Performance Gauge
0%
160.8 ms161.2 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
-1%
379.9 ms382.4 ms
wallclock-time
neqo-http3/benches/streams.rs::benches::criterion_benchmark::1-streams/each-1000-bytes
CodSpeed Performance Gauge
-1%
1.1 ms1.1 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_variable::transfer/pacing-false/varying-seeds/wallclock-time
CodSpeed Performance Gauge
-2%
168.9 ms173.1 ms
run
neqo-transport/benches/transfer.rs::transfer::benchmark_transfer_variable::transfer/pacing-true/varying-seeds/wallclock-time
CodSpeed Performance Gauge
-3%
162.5 ms167.3 ms

Commits

Click on a commit to change the comparison range
Base
main
b9c32c7
-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 day ago
by mxinden
© 2025 CodSpeed Technology
Home Terms Privacy Docs