On 7/19/2021 11:22 PM, Lucas Pardue wrote:
Hi Christian,
On Tue, 20 Jul 2021, 02:10 Christian Huitema, <[email protected]> wrote:
In first order, you can split the multipath issue in two. On one hand,
the mechanics of setting up paths, acknowledging path specific data,
etc. On the other hand, the fine art of setting path at the right time,
scheduling the right amount of packets on these paths, sensing the
properties of the paths, etc.
I think that the mechanics of multipath are well covered in
https://datatracker.ietf.org/doc/draft-liu-multipath-quic/, and I think
we know enough about the problem to adopt that in the WG and drive it to
publication.
As an individual: could you qualify a bit more about what you mean by "know
enough"? For instance, the draft contains things like path priority and QoE
control signals. I'm unsure if those are the solution to put on a standards
track document, it seems like we are still figuring things out. Placing
those aside, the proposal in the I-D does seem like it would allow
interoperable experimentation of multipath QUIC, which is a good way to
flush out the things we don't know. In the past, we've seen other
proposals, like draft-deconinck, that seem like they allow similar
experimentation too. Has there been any progress on aligning/combining
proposals?
Good question. I much prefer draft-liu, because it is defines fewer new
frames and concepts and is easier to implement -- I did implement it in
picoquic. There is possibly an argument that some of the extensions in
draft-deconinck should be integrated in draft-liu, or maybe that some of
the content of draft-liu should be moved out. I think adopting draft-liu
would be force these discussions.
I also think that we have ample opportunities to learn more about the
fine arts of multipath scheduling. I love the idea of sharing as much of
that experience as possible between implementers, and I appreciate that
the Ali Baba team has been doing just that. But we probably are still
going to learn more about all that for several years.
Agree. Thanks for sharing the results. As above, do the findings help
towards defining what interoperable QoE signals might be needed?
The QoE signals carry preferences from one application end to the other,
such as "my video buffer is nearly empty, please do something to prevent
a stall." Such signals are largely application dependent, and there will
always be a discussion between making that a common transport frame that
may carry application specific data versus just make it part of the
application. I like having the QoE frame, because it is a good place to
hook a QoE API, as in "dear application, transport just received this
QoE frame; should it change some of what it is doing?"
Draft-liu also includes a PATH-STATUS frame, which provides generic
controls with two parameters, a "status" and a "priority". In my
implementation, the status field is only used to distinguish between
path that should be dropped (status=abandon) and other paths. The
priority field is used in the scheduling algorithm. Packets are only
sent over the paths with high priority, unless those paths are marked as
"suspect", for example because high packet loss has been observed.
The priority field can be used in the common scenario in which a client
has established both a Wi-Fi and a cellular path, but would rather not
use the cellular path if that can be avoided.
If we really need to publish something, we might be able to publish some
kind of basic scheduling algorithm, with known limitations and known
applicability. A bit like we published a Reno specification for QUIC
and pretended that was good enough.
One important thing there was to provide a default congestion controller
that was known to be safe on the Internet. That way, QUIC implementations
could bootstrap everything else they needed. Are there such safety concerns
with multipath scheduling?
Define "safety"? I think there is common agreement that each path should
be subject to its own congestion control, as specified in the base
transport spec. Using congestion control addresses the main network
safety concern, i.e., not causing undue congestion to other network
users. There have been discussions in MP-TCP of "overall fairness", in
which multipath transports would be subject to stricter congestion
control than single path transports. For example, transports that have
access to a good path should try not compete for capacity with
single-path users of the other paths. Something like using Cubic or BBR
on the main path, LEDBAT on the other paths. That could be done, with
some extra work when the status of paths changes. But then, in QUIC,
such restrictions would be almost impossible to enforce.
The basic algorithm for multipath scheduling is simple: consider all the
available paths; send the next packet on a given path if congestion
control allows it on that path. After that, transport need to take into
account path priority and also some "health" indicator, for example
whether high losses or high delays were observed recently. Sending data
on a path with dubious health is likely to cause losses and delays, so
it should either not be done at all, or only for redundant
transmissions. Then of course there is a need for probing traffic to
assess when paths are healthy, which can be either redundant traffic, or
just made up traffic (picoquic just uses ping+pad). I think the baseline
specification should stop there. After that, there are per-application
issues, for example dealing with applications in which some traffic is
higher priority than other -- which is what the QoE discussion is about.
-- Christian Huitema