RE: [External] New Version Notification for draft-chen-quic-quicu-01.txt

"Shihang(Vincent)" <shihang9@huawei.com> Fri, 30 September 2022 08:32 UTC

Return-Path: <shihang9@huawei.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id C0212C1527B7 for <quic@ietfa.amsl.com>; Fri, 30 Sep 2022 01:32:58 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.905
X-Spam-Level:
X-Spam-Status: No, score=-1.905 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H2=-0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=unavailable autolearn_force=no
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S9HZQdc7LCcm for <quic@ietfa.amsl.com>; Fri, 30 Sep 2022 01:32:55 -0700 (PDT)
Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 2713EC147920 for <quic@ietf.org>; Fri, 30 Sep 2022 01:32:54 -0700 (PDT)
Received: from fraeml701-chm.china.huawei.com (unknown [172.18.147.201]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4Mf3Nk4f9hz687Jl for <quic@ietf.org>; Fri, 30 Sep 2022 16:31:34 +0800 (CST)
Received: from dggpemm500019.china.huawei.com (7.185.36.180) by fraeml701-chm.china.huawei.com (10.206.15.50) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2375.31; Fri, 30 Sep 2022 10:32:50 +0200
Received: from dggpemm500017.china.huawei.com (7.185.36.178) by dggpemm500019.china.huawei.com (7.185.36.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 30 Sep 2022 16:32:48 +0800
Received: from dggpemm500017.china.huawei.com ([7.185.36.178]) by dggpemm500017.china.huawei.com ([7.185.36.178]) with mapi id 15.01.2375.031; Fri, 30 Sep 2022 16:32:48 +0800
From: "Shihang(Vincent)" <shihang9@huawei.com>
To: Yongyi Yu <yuyongyi.yyy@bytedance.com>, Konstantin Tsoy <ktsoy@fb.com>
CC: "Lubashev, Igor" <ilubashe=40akamai.com@dmarc.ietf.org>, Tommy Pauly <tpauly@apple.com>, Ryan Hamilton <rch=40google.com@dmarc.ietf.org>, "quic@ietf.org" <quic@ietf.org>, 陈鉴平 <chenjianping.ireader@bytedance.com>, 景君羡 <jingjunxian@bytedance.com>, 刘天一 <liutianyi.lty@bytedance.com>
Subject: RE: [External] New Version Notification for draft-chen-quic-quicu-01.txt
Thread-Topic: [External] New Version Notification for draft-chen-quic-quicu-01.txt
Thread-Index: AQHY0qt/Xe6q8Vh8hUStvjx/bv7H5633Dz6AgACISWA=
Date: Fri, 30 Sep 2022 08:32:48 +0000
Message-ID: <929c7e97c323439a931d67ba9248fe8c@huawei.com>
References: <166359205152.6422.10161941398731313578@ietfa.amsl.com> <CAGAnozYePCwo5S-EUTN4X=-EixNFVgF+1MwiD60-GDogw7ojnA@mail.gmail.com> <CAJ_4DfS8n5sZXEk0=Eojq_DEK6QGvgG6-KjOiVnHv8etxzCSkQ@mail.gmail.com> <AE5493E8-DFAD-42F2-A41C-4B924B8602EF@apple.com> <CAGAnozZHFChVbK2MNkxVm5XbF3msGyHuRy1er7OjAGPzE_EMLQ@mail.gmail.com> <d0f85f1306c94e8d92ad4ad706e9f48f@akamai.com> <CAGAnozaGaYNPFFcv3SXM9wqWJ+NWUh_+bTKFcp_D0_fuQUd0Aw@mail.gmail.com> <5f9517bfd0a34301b33a80c2dc90a984@akamai.com> <9FC125F7-C2A0-49DA-B3D6-2288E8142ADF@fb.com> <CAGAnozZMEbiMWse9h0jjSeTJB0xTnQyFYOupnkXYtQJBoGkVeg@mail.gmail.com>
In-Reply-To: <CAGAnozZMEbiMWse9h0jjSeTJB0xTnQyFYOupnkXYtQJBoGkVeg@mail.gmail.com>
Accept-Language: zh-CN, en-US
Content-Language: zh-CN
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.112.41.128]
Content-Type: multipart/alternative; boundary="_000_929c7e97c323439a931d67ba9248fe8chuaweicom_"
MIME-Version: 1.0
X-CFilter-Loop: Reflected
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/CTpnOXOzblkU0aORsGB294TS-C0>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Sep 2022 08:32:58 -0000

Hi Yongyi,
I think the design choice of one stream per data block or multiple block is about the tradeoff between the flexibility of treating each block independently vs the complexity/overhead it brings.
Please see my detailed comments inline.

Best,
Hang Shi

From: QUIC <quic-bounces@ietf.org> On Behalf Of Yongyi Yu
Sent: Friday, September 30, 2022 3:22 PM
To: Konstantin Tsoy <ktsoy@fb.com>
Cc: Lubashev, Igor <ilubashe=40akamai.com@dmarc.ietf.org>; Tommy Pauly <tpauly@apple.com>; Ryan Hamilton <rch=40google.com@dmarc.ietf.org>; quic@ietf.org; 陈鉴平 <chenjianping.ireader@bytedance.com>; 景君羡 <jingjunxian@bytedance.com>; 刘天一 <liutianyi.lty@bytedance.com>
Subject: Re: [External] New Version Notification for draft-chen-quic-quicu-01.txt

Hi Konstantin,

Thanks for your reply. We think there are still some scenarios using HTTP to deliver streaming data, such as delivering the uncompleted media segment in low latency DASH, where one segment would be split into multiple chunks. Would it be helpful if we try to come up with some mechanisms to enable partial reliability feature for those scenarios without heavy impact on caching infrastructure?

Back to the discussion about how to achieve partial reliability, we still have some doubts about using one stream per data block.

1. Additional information and application logic are needed to manage order and to achieve multiplexing. This do increase the complexity of the application, and introduce unnecessary overheads.

[HS] Increase complexity, yes. Unnecessary, not exactly. By using one stream per block, you get the flexibility to drop/cancel any block without causing head of line blocking. And it reuse the QUIC stream management frame. No need to invent a new type of CANCEL-TILL-THIS-POINT frame.

2. When transmitting data in order, like media data, an application may want to first retransmit the lost data that were sent most early. Since all the streams are independent from each other, the transport layer may not correctly decide whose lost data should be retransmitted first. Although this problem might be resolved by indicating priority for each stream, the behavior of transport layer is still implementation-dependent.

[HS] By using one stream for multiple blocks, you basically leverage the FIFO scheduling *inside* the stream. While using one stream per data block, you can rely on FIFO scheduler *between* streams. AFAIK, FIFO scheduler is widely implemented as the default scheduler for many QUIC implementations. What do you mean by “the behavior of transport layer is still implementation-dependent?” Depending on different QUIC implementations? Then FIFO scheduler is usually the default behavior. If an application want to do more optimizations, they are free to change the scheduler both at the application layer *and* QUIC layer. I think this is the main benefit of QUIC running in the user space, right? The approach to implement the scheduling (Application gives hint to QUIC or directly modify the QUIC scheduler) can be discussed.

3. Creating, terminating and monitoring too many streams may cause performance issues, depending on the implementation.

[HS] I would argue that multiplexing without HoL blocking(one type of performance impact) is the core advantage of the QUIC comparing to TCP. And QUIC stream id space is quite large(62bit) which indicates the confidence of low overhead to support many concurrent streams. For the media transport use case(especially live streaming which need the partial reliability most), the concurrency is actually small because the video frame is generated/encoded one by one in real time. And to reduce the latency, a video frame is sent immediately right after it is generated.

4. In order to properly cancel the streams which are expired, the application may need to create many timers. It might be more graceful to track the deadlines in the transport layer instead, since there are already some timers for sending packets, retransmitting and so on.

[HS] That is exactly how our proposal(DTP: https://datatracker.ietf.org/doc/draft-shi-quic-dtp/ ) works! DTP will decide stream expiration when the scheduler is running, no additional timer needed. As for cancelling implemented at the application layer, maybe it is not necessary to use per block timer by leveraging the application layer event such as sending frame every 1/25 seconds(suppose video FPS = 25)? Looking forward to discuss the approach further. The responsibility splitting between different layer is constantly debatable:)

Since our proposal aims at low latency transmission with partial reliability, it should be compatible with other drafts which share the similar target, like RUSH. With the features introduced in our proposal, we believe an application will be able to achieve low latency transmission while avoiding boosting its complexity too much.

The stream group approach you mentioned seems great, since we do realize the importance for the application to combine multiple streams. And that is exactly the reason we introduce the Correlation Frame. Looking forward to discussing this approach further.

[HS] Agree. Stream group is a useful abstraction. In addition to simply gather multiple streams together, the relationship between streams inside the same group can be expressed. For example, in video use case P frame depends on I frame and they belong to the same Group of Pictures(GOP). The dependency can be expressed as an attribute inside the same stream group and help the scheduler algorithm.

Thanks,
Yongyi.

From: "Konstantin Tsoy"<ktsoy@fb.com<mailto:ktsoy@fb.com>>
Date: Wed, Sep 28, 2022, 03:56
Subject: Re: [External] New Version Notification for draft-chen-quic-quicu-01.txt
To: "Lubashev, Igor"<ilubashe=40akamai.com@dmarc.ietf.org<mailto:ilubashe=40akamai.com@dmarc.ietf.org>>
Cc: "Yongyi Yu"<yuyongyi.yyy@bytedance.com<mailto:yuyongyi.yyy@bytedance.com>>, "Tommy Pauly"<tpauly@apple.com<mailto:tpauly@apple.com>>, "Ryan Hamilton"<rch=40google.com@dmarc.ietf.org<mailto:rch=40google.com@dmarc.ietf.org>>, "quic@ietf.org<mailto:quic@ietf.org>"<quic@ietf.org<mailto:quic@ietf.org>>, "陈鉴平"<chenjianping.ireader@bytedance.com<mailto:chenjianping.ireader@bytedance.com>>, "景君羡"<jingjunxian@bytedance.com<mailto:jingjunxian@bytedance.com>>, "刘天一"<liutianyi.lty@bytedance.com<mailto:liutianyi.lty@bytedance.com>>
Yongyi,

As Matt described it below, we have experimented with a similar approach in the past at Meta but did not ship it to production given the complexity it brought. If you are using HTTP to deliver streaming data (I presume you do), you are probably using some kind of caching mechanism(s) to not melt your infrastructure. And this approach, while doable, presents certain challenges for caching infrastructure as well - just to keep that in mind.

We’re experimenting with something called stream groups to achieve partial reliability for variable latency streaming in a different way.
Basically we’re trying to use a QUIC stream abstraction for what you describe as blocks - e.g. one block goes into separate stream. It could be a video frame, video segment or some metadata. QUIC streams are a great generic abstraction and a lot of partial reliability concepts could be laid on top of it, instead of within - at least this is out current thinking after having experimented with a few approaches.

You mentioned that ordering is what you lose with using this approach which is true, however IMO it should be trivial to instrument the application itself to manage order using either QUIC stream ids or by adding a few bytes at the beginning of each stream for application to parse and manage order (e.g. some kind of app space ever incrementing id defining each “block” order).

Stream groups would allow application to bundle logical streams of data together, and one could enforce stream order within a group if we make stream id space scoped down to a group. We did not officially propose stream groups to the community yet, but planning on doing so going forward.

Konstantin Tsoy


On Sep 27, 2022, at 9:10 AM, Lubashev, Igor <ilubashe=40akamai.com@dmarc.ietf.org<mailto:ilubashe=40akamai.com@dmarc.ietf.org>> wrote:

This Message Is From an External Sender
Yongyi,
Without going into the question of whether partially reliable streams are necessary (as Matt said, Meta implemented them but is not using that implementation in production), here are a few comments I have.

  1.  Have you thought about the interaction of you draft with stream and connection flow control?  95% of the time I spent on my design was spent on thinking of ways to augment flow control to avoid extra round trips just to open a flow control window, while still ensuring that the resulting protocol is resilient against an adversarial endpoint forcing the peer to commit an unreasonable amount of resources (memory) to the connection.

  *   1. Our proposal splits a QUIC stream into many data blocks by Boundary Frame. The receiver would provide data to the application layer only when a data block is completely received. Therefore, the application layer needn't be aware of the gap at the expiration point or discard data already read.
  *   2. Because the stream is split into blocks, the sender could send or expire data by data blocks. Then the transport layer could track the message boundaries instead of the application layer.

  1.  Section 4.4 Data Receiving of your draft is saying the same.  It seems wrong to have the transport protocol specify the behavior of the QUIC library APIs so precisely.  It is ok to try to enable a particular library API, but the transport protocol’s specification ought to limit itself to the semantics of bytes on the wire.
Very best,

  *   Igor
From: Yongyi Yu <yuyongyi.yyy@bytedance.com<mailto:yuyongyi.yyy@bytedance.com>>
Sent: Tuesday, September 27, 2022 11:04 AM
Hi Igor,

Thanks for your replying. Our proposal indeed shares similar ideas with yours, but there are also some difference. We'd like to update our draft to clarify the difference in detail, and to briefly summary here, there are three major points.

1. Our proposal splits a QUIC stream into many data blocks by Boundary Frame. The receiver would provide data to the application layer only when a data block is completely received. Therefore, the application layer needn't be aware of the gap at the expiration point or discard data already read.

2. Because the stream is split into blocks, the sender could send or expire data by data blocks. Then the transport layer could track the message boundaries instead of the application layer.

3. With the introduction of Correlation Frame, we can combine multiple QUIC streams into single data stream while avoiding head of line blocking. This feature could be quite useful in many scenarios, e.g., transmitting both video and audio data through single HTTP response.

Please do let me know if you have any further advice, and please do not hesitate to point out if I make any mistakes.

Thanks,
Yongyi.
From: "Lubashev, Igor"<ilubashe@akamai.com<mailto:ilubashe@akamai.com>>
Date: Mon, Sep 26, 2022, 00:29
Subject: RE: [External] New Version Notification for draft-chen-quic-quicu-01.txt
To: "Yongyi Yu"<yuyongyi.yyy@bytedance.com<mailto:yuyongyi.yyy@bytedance.com>>, "Tommy Pauly"<tpauly@apple.com<mailto:tpauly@apple.com>>
Cc: "Ryan Hamilton"<rch=40google.com@dmarc.ietf.org<mailto:rch=40google.com@dmarc.ietf.org>>, "quic@ietf.org<mailto:quic@ietf.org>"<quic@ietf.org<mailto:quic@ietf.org>>, "陈鉴平"<chenjianping.ireader@bytedance.com<mailto:chenjianping.ireader@bytedance.com>>, "景君羡"<jingjunxian@bytedance.com<mailto:jingjunxian@bytedance.com>>, "刘天一"<liutianyi.lty@bytedance.com<mailto:liutianyi.lty@bytedance.com>>
Are you trying to implement something like https://datatracker.ietf.org/doc/html/draft-lubashev-quic-partial-reliability-02 or https://datatracker.ietf.org/doc/html/draft-lubashev-quic-partial-reliability-03?  (The -02 and -3 versions have somewhat different properties, and some people prefer -02 version.)

  *   Igor
From: Yongyi Yu <yuyongyi.yyy@bytedance.com<mailto:yuyongyi.yyy@bytedance.com>>
Sent: Friday, September 23, 2022 1:11 AM
To: Tommy Pauly <tpauly@apple.com<mailto:tpauly@apple.com>>
Cc: Ryan Hamilton <rch=40google.com@dmarc.ietf.org<mailto:rch=40google.com@dmarc.ietf.org>>; quic@ietf.org<mailto:quic@ietf.org>; 陈鉴平<chenjianping.ireader@bytedance.com<mailto:chenjianping.ireader@bytedance.com>>; 景君羡 <jingjunxian@bytedance.com<mailto:jingjunxian@bytedance.com>>; 刘天一<liutianyi.lty@bytedance.com<mailto:liutianyi.lty@bytedance.com>>
Subject: Re: [External] New Version Notification for draft-chen-quic-quicu-01.txt
Thanks for your replying. I agree "partial reliability" fits our draft better, since we do retransmit lost data and provide in-order transmission. And, our proposal could be compatible with H3, should we clarify the behavior in the draft? Please do let me know if you have any further advice.

Thanks,
Yongyi.
From: "Tommy Pauly"<tpauly@apple.com<mailto:tpauly@apple.com>>
Date: Thu, Sep 22, 2022, 11:32
Subject: Re: [External] New Version Notification for draft-chen-quic-quicu-01.txt
To: "Ryan Hamilton"<rch=40google.com@dmarc.ietf.org<mailto:rch=40google.com@dmarc.ietf.org>>
Cc: "于涌溢"<yuyongyi.yyy@bytedance.com<mailto:yuyongyi.yyy@bytedance.com>>, "quic@ietf.org<mailto:quic@ietf.org>"<quic@ietf.org<mailto:quic@ietf.org>>, "陈鉴平"<chenjianping.ireader@bytedance.com<mailto:chenjianping.ireader@bytedance.com>>, "景君羡"<jingjunxian@bytedance.com<mailto:jingjunxian@bytedance.com>>, "刘天一"<liutianyi.lty@bytedance.com<mailto:liutianyi.lty@bytedance.com>>
I noticed that this draft does reference RFC 9221, and DATAGRAM frames.
If I’m understanding correctly, it seems like this is trying to define an approach for what’s more commonly referred to as “partial reliability”, which was something DATAGRAM explicitly didn’t try to include.
If this is the case, I think it would be useful to reframe the document in terms of that, since the heavy use of “unreliable” is quite confusing. It also isn’t clear to me how this proposal would work with specific application protocols on top of QUIC — is this something that’s meant to be compatible with H3, or is it for entirely separate use cases?
Best,
Tommy
On Sep 21, 2022, at 3:17 PM, Ryan Hamilton <rch=40google.com@dmarc.ietf.org<mailto:rch=40google.com@dmarc.ietf.org>> wrote:
QUIC has support for unreliable data via the DATAGRAM frame, RFC 9221<https://www.rfc-editor.org/info/rfc9221>. It seems that this new proposal attempts to add unreliable data support not to QUIC, but to QUIC *streams*. QUIC streams, of course, offer a reliable, in-order, sequence of bytes. Did you consider starting with DATAGRAMs, and building from there instead?

Cheers,

Ryan
On Wed, Sep 21, 2022 at 1:14 AM 于涌溢 <yuyongyi.yyy@bytedance.com<mailto:yuyongyi.yyy@bytedance.com>> wrote:
Deal all,
We would like to introduce an extension of the QUIC protocol for unreliable data transmission called QUIC Unreliable (QUICU) . The following draft is submitted for your consideration and comments. We would also like to present this at IETF 115 to discuss further.
To summarize on this draft: it describes an extension of the QUIC protocol for unreliable data transmission called QUIC Unreliable (QUICU), which mainly through the definition and use of three new types of frames, namely the Expire Offset Frame, Boundary Frame, and Correlation Frame. The main purpose of this extension is to reduce data delivery delay. Through controlling the timing and scope of packet losses, QUICU reduces useless transmission to improve transmission efficiency, reduces head-of-line blocking to improve transmission timeliness, which are beneficial to delay-sensitive applications, especially audio and video applications. This document describes the motivation, the operations, and the wire formats of the three new types of frames.
Link to html: https://datatracker.ietf.org/doc/html/draft-chen-quic-quicu-01
Please feel free to reach us for any comments or questions on this.
Thanks,
Yongyi.

---------- Forwarded message ---------
From: internet-drafts@ietf.org<mailto:internet-drafts@ietf.org>
Date: Mon, Sep 19, 2022, 20:54
Subject: [External] New Version Notification for draft-chen-quic-quicu-01.txt
To: "Jianping Chen"<chenjianping.ireader@bytedance.com<mailto:chenjianping.ireader@bytedance.com>>, "Junxian Jing"<jingjunxian@bytedance.com<mailto:jingjunxian@bytedance.com>>, "Tianyi Liu"<liutianyi.lty@bytedance.com<mailto:liutianyi.lty@bytedance.com>>, "Yongyi Yu"<yuyongyi.yyy@bytedance.com<mailto:yuyongyi.yyy@bytedance.com>>
A new version of I-D, draft-chen-quic-quicu-01.txt
has been successfully submitted by Yongyi Yu and posted to the
IETF repository.
Name:                draft-chen-quic-quicu
Revision:        01
Title:                An Unreliable Extension to QUIC
Document date:        2022-09-19
Group:                Individual Submission
Pages:                10
URL:            https://www.ietf.org/archive/id/draft-chen-quic-quicu-01.txt
Status:         https://datatracker.ietf.org/doc/draft-chen-quic-quicu/
Htmlized:       https://datatracker.ietf.org/doc/html/draft-chen-quic-quicu
Diff:           https://www.ietf.org/rfcdiff?url2=draft-chen-quic-quicu-01
Abstract:
  QUIC Unreliable (QUICU) is an extension of the QUIC protocol for
  unreliable data transmission, mainly through the definition and use
  of three new types of frames, namely the Expire Offset Frame,
  Boundary Frame, and Correlation Frame. The main purpose of this
  extension is to reduce data delivery delay. Through controlling the
  timing and scope of packet losses, QUICU reduces useless transmission
  to improve transmission efficiency, reduces head-of-line blocking to
  improve transmission timeliness, which are beneficial to delay-
  sensitive applications, especially audio and video applications.
  This document describes the motivation, the operations, and the wire
  formats of the three new types of frames.
The IETF Secretariat