mozilla / neqo

Neqo, the Mozilla Firefox implementation of QUIC in Rust

Home Page:https://firefox-source-docs.mozilla.org/networking/http/http3.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Address new CPU bottlenecks

larseggert opened this issue · comments

For the server, core::iter::traits::iterator::Iterator::fold called from neqo_transport::connection::Connection::input_path takes ~15% of cycles. I guess this is related to the SentPackets data structure. We should work on that.

neqo-neqo-reno-pacing.server.svg
neqo-neqo-reno-pacing server

For the client, no clear new bottleneck emerges. That's not really surprising, because our server is the bottleneck. The client only uses 50-66% of a core when the server maxes it's core out.

neqo-neqo-reno-pacing.client.svg
neqo-neqo-reno-pacing client

Running the neqo client against the msquic server (which makes our client the bottleneck), shows input_path taking quite a bit more time than above. More surprisingly, the graphs appear quite different overall.

neqo-msquic-cubic-nopacing.client.svg
neqo-msquic-cubic-nopacing client