-
Notifications
You must be signed in to change notification settings - Fork 961
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
Quic attempt 4 #2801
Quic attempt 4 #2801
Conversation
@kpp any chance you can also post benchmarks for tcp on the same setup? would be interesting to see how things compare |
Sure. Posted in the PR description. |
Adding to this: do you have benchmarks from the latest implementation in #2289 for comparison? As discussed in #2289 (comment), we have thus far not switched to using |
The quinn PRs cited above are mainly blocked on feedback. If they're useful to you, please post on them! I'm particularly interested in hearing which futures are useful to have nameable, and which ones should be In the meantime, I've rebased quinn-rs/quinn#1357 to expose the latest features from main. |
Hey, let me drop some related info that might help. So, after months working on my own implementation of QUIC/TLS13 for Rust I came across this https://github.com/aws/s2n-quic repository. The design looks pretty much identical to my own concept thus I believe they took the correct path and it's worth checking. The overall interface approache is pretty much how things should be designed in Rust. |
Hey, thanks. I saw their project and it worth trying to implement libp2p-quic over s2n-quic to benchmark the solutions. |
A comparative analysis should probably also include Cloudflare's and Mozilla's implementations. Rust has a lot of QUICs these days! |
Yeah, Mozilla's implementation ( |
Let me know if you need any assistance in using or benchmarking s2n-quic. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is nice too see how small the implementation could be if we used quinn
.
Left some thoughts as I read through the code!
} | ||
|
||
/// Poll for a next If Event. | ||
fn poll_if_addr(&mut self, cx: &mut Context<'_>) -> Option<<Self as Stream>::Item> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any reason this can't return a Poll
? You could use ready!
then.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know =) I will port the code from attempt N3.
Re: boxing and cancellation-safety: now that GATs are possible, traits can include lifetime-bearing associated futures, so it's possible to abstract over futures like |
I think the issue here is more that we would need self-referential structs because we would store the future in the same type as |
The associated types can be |
Unless I am missing something, I don't think that would work in our case? |
You could refactor the traits that must be implemented to propagate |
Thanks! Most of our APIs are designed around |
Description
Yep... This time it's written over quinn, not quinn-proto. Feature: implemented with 600 lines of code in quic/src/lib.rs.
TODO:
test
endpoint_reuse
was broken in eca5328.Links to any relevant issues
Attempt N3: #2289
Perf: https://github.com/kpp/libp2p-perf/tree/quic-attempt-4
Open Questions
Benchmarks:
QUIC with libp2p-perf
TCP with libp2p-perf