-
-
Notifications
You must be signed in to change notification settings - Fork 394
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
Suggestions for quinn-udp #1749
Comments
This would be a straightforward extension. Any thoughts on how this should be exposed to the application layer by a QUIC impl?
Is this relevant to QUIC? We've been reluctant to let quinn-udp scope-creep into a generic UDP library.
Pacing offload be cool to have, but seems pretty niche because it requires manual configuration of the kernel to be effective, so won't be useful for end users/unsophisticated deployments. Is there an easy way to automatically detect when it's available? Also, you say "via GSO", but it looks to me like this entire GSO batch is sent with a single txtime there? |
Doh. Of course.
"It depends." Some DSCPs such as LE have straightforward semantics for an entire connection. Others may be better used for streams or individual QUIC datagrams (modulo the overall uncertainty if the network is equipped to deal with intra-flow DSCP changes.) My main motivation here is to enable experimentation with DSCP and QUIC, which obviously needs the UDP I/O to allow this. IMO DSCP on the Internet was held back for decades because it is difficult to use from an application. (Same is true for the IPv6 flow label. I didn't include it in the list in the first post, but if I ask for a pony, why not ask for a pink one...)
Understood. I really wish for a generic UDP I/O crate though :-) One use of TTL in QUIC would be to take a TTL change on a path as an indication of a path (routing) change, an possibly do something congestion-control-related. Again, this would be for experimentation at this time, but again, the UDP I/O layer needs to support it to enable this kind of experimentation.
I might have misunderstood what quiche is actually doing, I just took a cursory glance. I had assumed that some of the concepts in this talk were available now in Linux and should hence be used. But I didn't actually check on the merge status of the associated PRs. |
I think I'd be open to some scope creep assuming there's not too much complexity, and I think we'll probably only passively maintain that stuff (that is, review incoming PRs). It seems wasteful if we're maintaining something that is the best UDP crate to require others to fork it on account of adding some (presumably small things)? |
The recent change to just rip out |
How does (For reference: #1729.) |
Well, "feature" as in "provides a moderate performance benefit on POSIX platforms". |
quinn-udp is expressly focused on Quinn's requirements, and on things useful to QUIC implementations in general insofar as that Quinn might plausibly benefit from them in the future. As djc mentioned in #1749 (comment) there's some wiggle room around stuff that would impose insignificant runtime and maintenance overhead, which we can evaluate on a case by case basis. I think features of interest to neqo/Firefox are likely to align well with our interests, so we'd be happy to hear feedback about changes that affect you. |
I don't think GSO support is prevalent enough on the platforms/versions we need to support that we can solely rely on it. |
Which of those platforms/versions don't support GSO? Some incremental work in quinn-udp may be needed in places (e.g. #1554, and I think we need to relax the max GSO segment limit for *BSD) but I think every tier 1 kernel and most tier 2 have the capability. Not sure which Windows/macOS versions first introduced support. |
Following up on the removal of Long story short, I don't think As far as I can tell, Firefox roughly creates one UDP socket per QUIC connection. GSO/GRO is widely available on Linux and Windows.
Given one UDP socket per connection, each write and read would use the same 5 tuple. Using the same 5 tuple allows the write and read to happen via GSO/GRO, no need for With the above, let me summarize the relevant APIs per Firefox tier 1 build target:
|
Thanks for the analysis! That matches my understanding well.
As a minor aside, we do actually do this, but only because it's easy, both in terms of API and to use in a way that could conceivably yield multiple batches on a socket shared between connections. |
OBE |
A few suggestions that would IMO make quinn-udp more useful, in no particular order:
EcnCodepoint
intou8
.u8
conversion for the whole field and the ECN/DSCP components individually.(NB: Rust newbie here, so some of these things might be doable already, but I couldn't quite figure out how).
The text was updated successfully, but these errors were encountered: