News for hackers. Stuff that matters.
Re:QUIC is now RFC 9000 by skissane on Friday May 28, 2021 @12:24AM (#27311712)
> Every app has to implement it itself rather than calling a syscall and letting the OS deal with its complexities (same as for TLS, making fewer apps implement it without a lot of extra work). Which also increases context switching

Nowhere does RFC9000 say that it has to be implemented in user-space. A kernel-space implementation of QUIC would be conforming. Any OS kernel project (whether open source or proprietary) which would like to develop one is free to do so.

Re:QUIC is now RFC 9000 by amelius on Friday May 28, 2021 @03:55AM (#27312797)
And why does it have to be handled in the OS, if a library would do just fine and provide more flexibility?
Re:QUIC is now RFC 9000 by touisteur on Friday May 28, 2021 @04:16AM (#27312942)
Well you know that someone is gonna implement it in ebpf sooner than later.
Re:QUIC is now RFC 9000 by Matthias247 on Friday May 28, 2021 @02:04PM (#27318592)
As someone with experience in eBPF and QUIC I can tell you it will be a tough one. QUIC is very complicated and requires some rather sophisticated (and long running) algorithms, and eBPF is [intentionally] rather limited on what it can do.

However there are some interesting use-cases for eBPF in the context of QUIC. E.g. it can definitely be used to route packets by connection IDs.

Re:QUIC is now RFC 9000 by touisteur on Saturday May 29, 2021 @08:01AM (#27324691)
You're right. I think on the overall we'll gonna have to learn to restrain/harness ebpf somehow, since it will keep growing.

We're already starting to see some complex applications appear over tc+ebpf and I believe I've seen some tcp congestion algorithms prototyped there? Those can be somehow complex already. Crypto could be offloaded to dedicated 'nodes' (as you find in dpdk for example).

But, since you can now chain epbf programs I can imagine some kind of task-graph programming model emerging there allowing for very complex applications. Maybe even specific complex kernel modules that can only be called through ebpf...

In fact I already tried putting most of a high-throughput packet processor there and it's really fun, this feeling of being in 1998 with my first turbo pascal + asm programs. Hard to debug, though.

I hope we'll be able soon to converge on sw archs similar to tbb::flow or cudagraphs or vpp/dpdk pipelines.

The next years are going to be very, very interesting.

Re:QUIC is now RFC 9000 by throwawaaarrgh on Sunday May 30, 2021 @02:32PM (#27335363)
> I can imagine some kind of task-graph programming model emerging there allowing for very complex applications

This is why I hate technology. It doesn't need to be this complicated.

Re:QUIC is now RFC 9000 by zajio1am on Friday May 28, 2021 @04:57AM (#27313167)
It is not really question of OS vs library, but question of standardized API vs ad-hoc API. Most basic networking API is standardized (sockets in POSIX API).
Re:QUIC is now RFC 9000 by overgard on Friday May 28, 2021 @12:35PM (#27317490)
OS's defining the "standard" is very much a 1990s thing; at this point libraries and languages are much more relevant to standardizing things. If you're writing rust, or ruby, or javascript, or C#, or python, or whatever, you're going to be using what your language ecosystem provides you. OS libraries are usually only relevant to C developers writing something low level, and usually they need to write a lot of wrappers and #ifdefs to handle every platforms quirks anyway.
Re:QUIC is now RFC 9000 by Spivak on Saturday May 29, 2021 @10:18PM (#27330061)
How do you think those languages actually implement those features? Because I can assure you that they aren't bundling their own userspace TCP stacks.
Re:QUIC is now RFC 9000 by throwawaaarrgh on Sunday May 30, 2021 @02:46PM (#27335484)
What you're saying is that you personally don't need to write network code that performs socket(), bind(), listen(), accept(), send(), recv(), etc. But the programming language and library you're using is using those calls, to talk to the kernel, which is doing a lot of the work, so your language/library doesn't have to. And it does that using a standard API.

This enables less context switching, faster processing, more uniform behavior, and more portable code. It also means your language/library does not need to implement a TCP parser, which can be quite complicated, and it means the kernel can maintain the more complex network settings that affect your TCP connections, benefit from a shared buffer/cache, network filters, routing, etc. Off-loading protocols into the kernel (or even better, the network card) is a boon to the whole OS and to your individual application.

Re:QUIC is now RFC 9000 by quotemstr on Friday May 28, 2021 @09:08AM (#27314907)
Because if it's not in the OS, people are going to cheat more often on congestion control to prioritize their own streams. It's a tragedy of the commons. It's only because TCP is ossified and usually in the kernel that we haven't seen a race to the bottom already.
Re:QUIC is now RFC 9000 by BenjiWiebe on Sunday May 30, 2021 @11:33AM (#27333948)
I'm pretty sure that's not how congestion control works... My ISP doesn't honor my congestion control flags. Whatever congestion control I set up ONLY changes things on my side of the ISP connection. And yes, within my LAN, I definitely can prioritize various streams.
Re:QUIC is now RFC 9000 by quotemstr on Monday May 31, 2021 @01:33PM (#27346374)
Why do you think it is that we do congestion control at all? Why doesn't every program spam UDP packets as fast as it can write them to the NIC?
Re:QUIC is now RFC 9000 by merb on Friday May 28, 2021 @06:55PM (#27321479)
ever heard of http.sys? because they can