Re: Prioritizing QUIC DATAGRAMs (was: Re: [Masque] Prioritizing HTTP DATAGRAMs)

Patrick Meenan <patmeenan@gmail.com> Wed, 23 June 2021 13:14 UTC

Return-Path: <ietf-http-wg-request+bounce-httpbisa-archive-bis2juki=lists.ie@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 051C73A37A0 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 23 Jun 2021 06:14:33 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.749
X-Spam-Level:
X-Spam-Status: No, score=-2.749 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.248, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Pic9IyUFtSBw for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 23 Jun 2021 06:14:29 -0700 (PDT)
Received: from lyra.w3.org (lyra.w3.org [128.30.52.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7C1953A379E for <httpbisa-archive-bis2Juki@lists.ietf.org>; Wed, 23 Jun 2021 06:14:29 -0700 (PDT)
Received: from lists by lyra.w3.org with local (Exim 4.92) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1lw2fL-0002Xb-OJ for ietf-http-wg-dist@listhub.w3.org; Wed, 23 Jun 2021 13:11:42 +0000
Resent-Date: Wed, 23 Jun 2021 13:11:39 +0000
Resent-Message-Id: <E1lw2fL-0002Xb-OJ@lyra.w3.org>
Received: from mimas.w3.org ([128.30.52.79]) by lyra.w3.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <patmeenan@gmail.com>) id 1lw2f8-0002Wq-9P for ietf-http-wg@listhub.w3.org; Wed, 23 Jun 2021 13:11:28 +0000
Received: from mail-il1-x12e.google.com ([2607:f8b0:4864:20::12e]) by mimas.w3.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from <patmeenan@gmail.com>) id 1lw2f3-0008SP-7o for ietf-http-wg@w3.org; Wed, 23 Jun 2021 13:11:26 +0000
Received: by mail-il1-x12e.google.com with SMTP id a11so2541802ilf.2 for <ietf-http-wg@w3.org>; Wed, 23 Jun 2021 06:11:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=4VVHGBVAsXNL9KAVXT3W3W4WN7g1XWBGrcMkb1Czloo=; b=suJNCku0eLRAVsbszfp/2XsJCfEetiJXoA02KED10tUSkC8DWTzaDiIGI/nLHhhHgQ KcgHMajC4P+HenxHzVWBnbkqG+NIOCCRxI3BopSbaKGQFpux4CQt3qPm4Yhl9rgSMxcJ hnCnmwAvgmYilqrLY7EA/IGo5CiXqi8iw4v2unwDJF/jwleV7W++Fy/CbZLFcDkLsePO SQcIq78363jEXEzkGS0YJKL1guEIUXRZY9m7gewRJkaoVQVqIEyWa91ZitLYb7sHAnzp DtH6fXklPd7UjViujTQcw1cFQLq1Ai/1kLQ+ItfKo6N2I9Vt1OMH/DtnQKGBRTWqm07K Dx+w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=4VVHGBVAsXNL9KAVXT3W3W4WN7g1XWBGrcMkb1Czloo=; b=kcYrFUrUQBClGkay7sTRQy8wadQuHkCInHxai90lTVvc6b0f5WuLO/90fui+mocrZ+ 0bUd2pVEmTfg72pk3z1yS+DW2jQXMOyK1oiX1CY2TckfV8mbSxJo2RC2beFAhY0bDLik pa9AON9Hq/GKUxIGhpcSl1TEFVbME3SRD5PBkCIEp0ntfNbajhciVIcbiSRj6R19ZVbQ LuGqkuVUcb6AhRr/Lu9Op5ZzU09G4oocf6zZNlTrOPUwWA5aT0LilN3x5Z/RLB7dF8o1 8Iu3TzF1ndVGxy8lB4V4YNVEHjuCMUdsckmoCdvDzpxL2P9nQxZSGbDCQ3pcbRoOtbHc YSbQ==
X-Gm-Message-State: AOAM531kPT0h6/n/NW+TV1sa8JXidj0Hctub6GthAJDs0rmBWJemuppr nxQeLd6DQcBILEHBekoFqcQfMvaMbJoOgPK47Gs=
X-Google-Smtp-Source: ABdhPJxNhJ6nRnFXv0Pwm7lbLbiSVzTpR8UPqWtrSZkZCHfaeMO2dlTCc0cLMfs1D7rIZc7cH0wpsM7+6nssatv4uYM=
X-Received: by 2002:a05:6e02:2197:: with SMTP id j23mr2864104ila.159.1624453870040; Wed, 23 Jun 2021 06:11:10 -0700 (PDT)
MIME-Version: 1.0
References: <CALGR9ob=3CywgYvLJpSba6xCGwDEBzdJbuco28BMk9ayMcFe6Q@mail.gmail.com> <CAKKJt-d0srxhm==cxyXuJuDiqUk0sEgOAJRY+6ejq21LQVPsgQ@mail.gmail.com> <CALGR9oZOp5YWMWx61Etq42McOi02LOjxtRLL+xHhDpHKS94ukA@mail.gmail.com> <b9d7e589-df4a-0440-b5d4-847cca5a6908@rd.bbc.co.uk> <CALGR9oYRE0hBap+=VEr-KPD7Qp6gZZ_gg_0bcaDoquthKikMJg@mail.gmail.com>
In-Reply-To: <CALGR9oYRE0hBap+=VEr-KPD7Qp6gZZ_gg_0bcaDoquthKikMJg@mail.gmail.com>
From: Patrick Meenan <patmeenan@gmail.com>
Date: Wed, 23 Jun 2021 09:10:58 -0400
Message-ID: <CAJV+MGz=sszxnUn-oSrGbd_az7QPATLB_3VeaHmC4R1Gj0ua8g@mail.gmail.com>
To: Lucas Pardue <lucaspardue.24.7@gmail.com>
Cc: Samuel Hurst <samuelh@rd.bbc.co.uk>, Spencer Dawkins at IETF <spencerdawkins.ietf@gmail.com>, QUIC WG <quic@ietf.org>, David Schinazi <dschinazi.ietf@gmail.com>, Kazuho Oku <kazuhooku@gmail.com>, HTTP Working Group <ietf-http-wg@w3.org>, MASQUE <masque@ietf.org>
Content-Type: multipart/alternative; boundary="000000000000e0bc9505c56ea3f7"
Received-SPF: pass client-ip=2607:f8b0:4864:20::12e; envelope-from=patmeenan@gmail.com; helo=mail-il1-x12e.google.com
X-W3C-Hub-DKIM-Status: validation passed: (address=patmeenan@gmail.com domain=gmail.com), signature is good
X-W3C-Hub-Spam-Status: No, score=-4.1
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, W3C_AA=-1, W3C_WL=-1
X-W3C-Scan-Sig: mimas.w3.org 1lw2f3-0008SP-7o 6f72ab5582db5b996159f5315cb8b4f0
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Prioritizing QUIC DATAGRAMs (was: Re: [Masque] Prioritizing HTTP DATAGRAMs)
Archived-At: <https://www.w3.org/mid/CAJV+MGz=sszxnUn-oSrGbd_az7QPATLB_3VeaHmC4R1Gj0ua8g@mail.gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/38939
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <https://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

Using multiple connections should be strictly worse than streams sharing a
connection, otherwise we probably have a gap that needs to be filled.
Multiple connections kicks the can down to the congestion control
algorithms for each of the separate connections to play nicely with each
other and hopefully result in a decent experience. With a single connection
we should have better knowledge over the overall transport and make better
decisions.

That said, I'd hate for us to end up going down the same road that we did
for HTTP/2 and designing a complex scheme for something without practical
experience deploying it first. Is there enough flexibility in the
extensions to allow for an entity that controls both ends of the tunnel to
do experimentation before evolving a standard (on the tunnel side of
things)?

There are a lot of moving parts that likely need specs and I'm not sure if
this is the right place to sort through all of them but this is sort of the
mental model I have of the problem space:

Client Application (A) <===> LAN Aggregation (B) <------------------------>
WAN Aggregation (C) <======> Remote Application (D)

A & B can be:
- within the same application (browser using data reduction proxy or IP
anonymization).
- on the same device (software VPN, Cloudflare Warp, etc)
- on the same LAN (hardware VPN, ISP internal tunneling, eero->some Amazon
service, etc)

I'm assuming C <=> D is plain IP on the Internet with no assumptions of the
software at D and no expectations that D will be able to influence the
prioritization from it's side directly (maybe by application-specific info
sent to A to adjust from the client side).

I think most of this discussion is around the B <-> C connection where the
traffic is tunneled over QUIC (and that's usually the constrained link
anyway). It's assuming B has some knowledge of how to prioritize the
tunneled traffic. In a lot of early cases, the same company likely controls
B & C and should be able to experiment. There are cases where the B/C
tunnel should use a standard (allowing Chrome to select IP anonymization
services from multiple providers for example) but if we have prioritization
as an optional extension that interops well, that case could fall back to
unprioritized until we have enough field experience to see what works well
before standardizing it.

Where it feels like we have a gap is between A & B. Within an application
we can build proprietary interfaces but once you're at a machine or network
level I don't think there's a SOCKS-level equivalent for QOS so it mostly
comes down to inferring which isn't great.

"Prioritization" might be a bit overloaded when we move beyond simple
request/response streams. Game data, RTC, video streaming have different
characteristics where latency/jitter can be critical up to a minimum
threshold but you might not want to give the stream highest priority for it
to do whatever it wants with (a 720p RTC video stream while allowing a
parallel 4K video stream and software download is more useful than a 4K RTC
video stream with the video rebuffering for example). I don't know if that
level of specificity would help more than basic prioritization schemes
though (except starvation is more of a problem in the tunneld case).

To me, it feels like where we are today is roughly:
- make sure MASQUE allows for extensions for someone who controls A, B & C
to experiment with prioritization
- make sure it is interoperable with a C endpoint that has not implemented
QOS/Prioritization
- wait for experience and field data from experiments with MASQUE
QOS/prioritization before standardizing something

On Wed, Jun 23, 2021 at 7:05 AM Lucas Pardue <lucaspardue.24.7@gmail.com>
wrote:

> Hey Sam,
>
> On Wed, 23 Jun 2021, 09:36 Samuel Hurst, <samuelh@rd.bbc.co.uk> wrote:
>
>>
>> The primary issue that I can see with this is that it potentially leads
>> to the inability to use DATAGRAMs for multiple application protocols in
>> an interoperable way. While it's fully possible for one application to
>> de/multiplex it's own traffic on the DATAGRAM channel, multiple
>> applications sharing the same tunnel might have different (and
>> incompatible) ideas on how to use an identifier that multiplexes
>> traffic, or may use different mechanisms entirely.
>>
>
> Right. But having an identifier in the transport doesn't help much here.
> Streams have such an identifier (split into 4 types) and don't solve the
> problem you describe IIUC.
>
> To give an example, an application mapping like HTTP/3 makes use of 3
> types, using the up to the entirety of the values permitted. There isn't
> currently a way for multiple completely independent HTTP/3 connections to
> share a QUIC connection. HTTP/3 connection coalescing achieves sharing to
> some degree, it relies on the demultiplexing occurring in the HTTP
> messages. Similarly, CONNECT and CONNECT-UDP methods use HTTP to signal the
> intent of streams or HTTP/3 datagrams, and applications can build context
> state around this to decide how to dispatch received data.
>
>
>> It's this danger of lack of interoperability that I don't like. I don't
>> like the idea of having to write lots of application notes saying "you
>> can do A but not with B, but B and C can coexist", which leads to
>> applications exploding when someone does something unexpected with
>> option D down the line, that I didn't foresee.
>>
>> Of course, I don't know exactly how much call there is for doing this.
>> For example, with regards to my RTP Tunnelling draft [1] that Spencer
>> linked to above I haven't encountered a need to run something alongside
>> RTP/RTCP in DATAGRAMs yet, but that's not to say that it isn't a
>> possibility.
>>
>
> The challenge is that if you want to mix usage intents for a shared
> transport resource, you probably need some way to signal that. Since QUIC
> delegates using streams and DATAGRAMs to upper layers applications, it's
> very tricky to design anything at the lower layer to accommodate this.
>
> One approach to allow general purpose indiscriminate resource sharing
> would be to design a virtualization layer that sits just below actual
> mappings. Such a thing would fool upper layers into thinking they had
> access to native QUIC. The layer of indirection would probably require a
> "hypervisor" to manage things properly. MASQUE is vaguely an instantion of
> this design that relies on HTTP. WebTransport is vaguely another example,
> we used to have a QuicTransport protocol but pivoted away from it back to
> HTTP.
>
> The potential solution space is large. However, I'm not sure the problem
> space you describe is broad enough to activate building something else. It
> would be interesting to hear otherwise. At the end of the day, there needs
> to be strong motivation for building complexity and/or runtime overhead in
> order to share QUIC connection resources. Otherwise, isn't it just easier
> to use multiple separate connections?
>
>
>>
>> I'm certainly interested in some form of prioritisation for my RTP
>> Tunnelling draft [1], as protocols like RTP run in real-time and other
>> things getting in the way can easily cause poor quality of service. This
>> could be by making the application use longer receive buffers than
>> necessarily to ensure smooth audio and video playback at the receiver,
>> or random pauses and glitches in the stream.
>>
>
> Makes sense. Would you design that into your RTP tunneling mapping?
>
> Cheers
> Lucas
>
>>
>>