Skip to main content

Last Call Review of draft-ietf-wish-whip-09
review-ietf-wish-whip-09-tsvart-lc-aboba-2023-07-25-00

Request Review of draft-ietf-wish-whip
Requested revision No specific revision (document currently at 16)
Type Last Call Review
Team Transport Area Review Team (tsvart)
Deadline 2023-08-08
Requested 2023-07-25
Authors Sergio Garcia Murillo , Dr. Alex Gouaillard
I-D last updated 2023-07-25
Completed reviews Secdir Last Call review of -09 by Russ Housley (diff)
Artart Last Call review of -09 by Barry Leiba (diff)
Genart Last Call review of -09 by Dale R. Worley (diff)
Secdir Telechat review of -14 by Russ Housley (diff)
Tsvart Last Call review of -09 by Dr. Bernard D. Aboba (diff)
Httpdir Last Call review of -09 by Darrel Miller (diff)
Artart Early review of -08 by Barry Leiba (diff)
Secdir Last Call review of -13 by Russ Housley (diff)
Assignment Reviewer Dr. Bernard D. Aboba
State Completed
Request Last Call review on draft-ietf-wish-whip by Transport Area Review Team Assigned
Reviewed revision 09 (document currently at 16)
Result Ready w/issues
Completed 2023-07-25
review-ietf-wish-whip-09-tsvart-lc-aboba-2023-07-25-00
This document has been reviewed as part of the transport area review team's
ongoing effort to review key IETF documents. These comments were written
primarily for the transport area directors, but are copied to the document's
authors and WG to allow them to address any issues raised and also to the IETF
discussion list for information.

When done at the time of IETF Last Call, the authors should consider this
review as part of the last-call comments they receive. Please always CC
tsv-art@ietf.org if you reply to or forward this review.

During WGLC, I reviewed the WHIP protocol document:
https://mailarchive.ietf.org/arch/msg/wish/-ia_-FrZyJh8TRuD64hlvyfNoB0/

The comments described there have subsequently been addressed, so I have no
further feedback to add on the topics of my original review.

However, there is an "Elephant in the Room" issue that was not brought up in my
original review, but which has come up in implementations.  So I feel it needs
to be at least mentioned in the document.

The issue relates to the congestion control algorithms applicable to ingestion
scenarios.  Currently, libwebrtc implements Google Congestion Control (gcc),
which makes sense for WebRTC's primary use case (browser-based communications,
including simulcast).  So when WHIP is implemented in a browser this is the cc
algorithm that will be used.  In such a scenario gcc has some unique
capabilities (simulcast layer add/drop) but also some downsides.

For example, where WebRTC has been used for ingestion in mobile applications
such as Youtube, the congestion control has been more tuned toward maximizing
throughput rather than minimizing latency. For example, the following video by
Ying Yin of Youtube, describes how Google handled the tradeoff between quality
and latency in the design of their WebRTC ingestion system:
https://www.youtube.com/watch?v=htN-gIPOkP0

There is another data point that suggests that simple single a/v stream
ingestion use cases may benefit from alternatives to the cc approach
implemented in libwebrtc. The MoQ WG has been developing protocols for both
ingestion and distribution.  On the ingestion side, initial implementations
(e.g. Meta's RUSH) have relied on the algorithms implemented in QUIC stacks
(e.g. typically Qubic or BBRv2), and appear to be able to deliver high quality
media within the constraints applied (e.g. only a single audio and video stream
ingested).

Given that ingestion implementations in mobile applications appear to prefer
alternatives to the gcc algorithms implemented in libwebrtc, I think there
needs to be some discussion of CC algorithms in the document, if only to point
out avenues for further investigation (e.g. L4S, BBRv3, etc.).

I understand that it is probably not feasible to come up with a definitive
recommendation at this time. One complicating factor is that WHIP supports more
complex ingestion use cases, such as simulcast ingestion.  Simulcast is
something that gcc excels at (e.g. how it decides to add or drop layers), due
to the built-in probing functionality.  Since simulcast support is not likely
to be a mainstream ingestion feature (e.g. it is not supported in RUSH) this
probably didn't carry much weight in the designs cited earlier. Handling
simulcast congestion control within a QUIC stack is quite tricky because it may
require integration with the application (e.g. libwebrtc uses RTX probes, which
is specific to RTP).