On 3/26/2026 2:41 AM, Kazuho Oku wrote:
...
That brings me back to QMux records.
QMux records do not prohibit receivers from processing a STREAM frame
incrementally. Blocking is a non-concern for such receivers. At the
same time, if a sender aligns TLS record boundaries and QMux record
boundaries — which I think there are good reasons to do [2] — then
blocking due to partial delivery is also avoided for any type of
receiver, including ones that block for a complete QMux record.
Moreover, the defaults are specified such that these boundaries are
likely to align naturally.
Therefore, the problematic case is narrowed to one in which a sender
chooses not to preserve that alignment, while a receiver also waits
for a complete STREAM frame before making progress.
Given that QMux is itself a fallback from QUIC, and considering that
there are so many ways for implementations to hurt performance, I am
not sure how much change to QUIC v1 we should force on every stack to
avoid this bad outcome, when the problematic case seems like a corner
case.
Let me second that. This discussion shows a tension between "QMUX is a
fallback when UDP is not available" and "QMUX is designed for maximum
performance, relieving the limitations imposed by UDP encapsulation".
The arguments for unlimited stream frame size are based on performance.
The arguments for having a record layer are based on ease of
implementation, which fits well with the "fallback" design.
I wonder how many QUIC implementations do the "incremental stream frame
processing" that Martin describes. They process UDP datagrams, which are
received maybe 1500 bytes at a time, and contain a set of whole frames.
Incremental processing would be quite a change.
I am also very worried about the idea of not negotiating the maximum
size of either records of frames. That may be good for batch
performance, but it is dubious for real time application that have to
constantly evaluate the relative priority of streams. And it is really
not natural for small devices.
My first priority is to have that negotiation. Implementations that
focus on performance may want to negotiate a very large record or frame
limit, up to 2^62 - 1 if they care, but I need to be able to negotiate a
smaller limit than that.
Because my focus is to have "a robust way to cross UDP blocking
firewalls", and also to have as much commonality between QUIC and QMUX
as possible.
-- Christian Huitema