On Thu, Feb 6, 2025 at 6:53 PM Neal Cardwell <ncardw...@google.com> wrote:
> > Given how modern implementations work, reordering at the link-layer is > almost always harmful. > > For modern implementations of the RACK style or newer, that sounds true. > But I would have guessed there is a large installed base of TCP senders out > there with pre-RACK TCP stacks. And for those, presumably, as Greg noted, > "older TCP implementations that don't support RACK would have problems with > reordering." So AFAICT there may be some tricky trade-offs. > You're absolutely right that there is a nontrivial base of TCP senders out there that don't have RACK and could benefit from link-layer reordering. That said, I don't think anyone cares about the performance of those senders. Anyone who cares about performance is motivated to use a recent-enough TCP implementation. I'm sure there's a small number of counter-examples out there, but in general we should optimize for the main case. I have embedded devices with minimal TCP stacks, but I really don't care if my temperature reading is slightly slower than it could be. This isn't a case of "you need to be a large tech company to have fast TCP", this is just a "update your open source code to something from this decade". To me the tradeoff is very easy: let's disable the link-layer reordering. Anyone who cares enough to notice a performance regression will be able to upgrade their TCP. And of course, this isn't a concern at all for QUIC since there's no pre-RACK legacy device problem. David If most 5G link-layer retransmissions can be completed in X milliseconds (X > less than, say, 10ms), then it may be worth the user's 5G cell phone modem > buffering received packets for X milliseconds to try to deliver in-order > data to the receiver if this can be done in a low-latency manner. AFAIK > various layers of networking software (and humans using it) already need to > tolerate ~10ms of jitter due to various link layer effects for the most > common last mile link-layer technologies (wifi, cellular, DOCSIS) and CPU > scheduling effects for networking stacks (especially in user space). But > I'm sure there are other factors I'm not taking into account... :-) > > neal > > > On Thu, Feb 6, 2025 at 5:15 PM David Schinazi <dschinazi.i...@gmail.com> > wrote: > >> Having the link-layer delay packets to provide them in-order to the >> transport layer was helpful multiple decades ago when TCP implementations >> had more naive algorithms and were very resource-constrained. Given how >> modern implementations work, reordering at the link-layer is almost always >> harmful. TCP and QUIC stacks can handle reordering well, thanks to both >> protocol features and implementations having more memory to work with. The >> delay induced by this reordering will generally cause more harm than good. >> Furthermore, one of the biggest motivators for QUIC was to break >> head-of-line blocking and allow out-of-order delivery to the application >> layer. We have large bodies of data showing that this improves performance. >> Please disable reordering at the 5G layer. >> >> David >> >> On Thu, Feb 6, 2025 at 2:15 PM Christian Huitema <huit...@huitema.net> >> wrote: >> >>> >>> On 2/6/2025 12:55 PM, Martin Thomson wrote: >>> > >>> > On Fri, Feb 7, 2025, at 04:59, Greg White wrote: >>> >> This is an important topic relating to the expectations and >>> >> requirements that transport protocols place on layer 2 protocols. In >>> >> layer 2 standards bodies that I've been involved in, it has been >>> >> understood that "the upper layers" expect in-order delivery, >>> > As far as QUIC goes, it is sensitive to reordering in the network. >>> Some reordering will be interpreted as damage (Christian cited the relevant >>> parts) and performance suffers in a few minor way when things arrive out of >>> order (ACKs are less efficient, data needs to be held, memory accesses are >>> less likely to be contiguous, etc...). >>> > >>> > However, the idea that the network might seek to "fix" these problems, >>> when doing so necessarily involves extra work and delays, is not a good >>> trade. Stuff that is delayed to "fix" a reordering that happened might >>> delay signals that the QUIC stack could use, even if some data needs to be >>> held at the endpoint. QUIC packets contain many things, some of which >>> don't need to be strictly ordered to be useful. >>> >>> Applications that are sensitive to delays will break their traffic into >>> multiple QUIC streams. In case of packet loss, only one of those streams >>> will be blocked, the others will be delivered without "head of queue >>> blocking". Implementing L2 correction will make the response worse, not >>> better, because all the streams will be delayed for the duration of the >>> L2 correction instead of just one. >>> >>> -- Christian Huitema >>> >>>