[R-C] Some high level requirements and discussion topics in draft-ietf-rtcweb-rtp-usage-01
Randell Jesup
randell-ietf at jesup.org
Sat Nov 5 22:52:32 CET 2011
On 11/4/2011 9:55 PM, Wesley Eddy wrote:
> I think the high-level requirements around congestion control are
> basically good, but could be tightened up or clarified a little bit
> more.
>
> Copying them from the draft, and commenting on each one below:
>
> > 1. All WebRTC media streams MUST be congestion-controlled. (The
> > same requirement apply to data streams)
>
> I would clarify this as:
> """
> 1. All WebRTC media or data streams MUST be congestion-controlled using
> an algorithm specified in an IETF Standards Track RFC.
>
> The ideal algorithm will have a body of knowledge or literature
> studying its performance in the Internet, or using testbeds,
> simulations, analytical models, or other means, whose results
> motivate its use for WebRTC media by meeting other requirements.
> """
>
> Without that clarity, just any random algorithm could meet the
> requirement, even if its properties were unknown. I think that
> would be unfortunate.
>
> At first I thought saying "Standards Track RFC" might be setting the
> bar a bit high, but when you consider that the rest of the RTCWEB
> charter includes Proposed Standard mechanisms, then using anything
> but a Standards Track congestion control protocol would seem to be
> inappropriate.
It also would mean probably years of delay in publishing an RFC, since I
believe no existing standards-track CC algorithm will cover our needs.
This standardization effort cannot afford years of delay; it can't
afford a single year of delay. If we don't standardize it first, the
vendors will go ahead anyways and we'll be stuck with having to document
whatever defacto standard they've created. (*Note - I work for one of
the vendors; I'm speaking with my contributor hat on.)
It also means that innovation and improvement cannot practically occur
within WebRTC; the algorithm will be locked in. I'll note that while
you say that it must be a Standards-Track RFC, implying the implementer
has a choice, in reality since a Standards-Track congestion control
algorithm includes not only the bandwidth estimation but also the
transmission of that to the sender and the sender's reaction, so
everything would have to be locked-down and specified up-front.
My suggestion is to specify the data available (which is mostly loss
data and arrival/delay data) and specify the mechanism (RTCP-FB packets)
to tell the sender what you need them to do, and specify the
result (it must be congestion-controlled if possible and must be
reasonably fair to TCP/TCP-like flows). Beyond that, let the rest of
the actual algorithm be a point of innovation, though a baseline
algorithm will be suggested based on a modified version of Harald's draft.
These algorithm(s) certainly can be standardized once ready, but
requiring that *first* is a problem, IMHO. And standardizing them could
take a Long Time.
> > 2. The congestion algorithms used MUST cause WebRTC streams to act
> > reasonably fairly with TCP and other congestion-controlled flows,
> > such as DCCP and TFRC, and other WebRTC flows. Note that WebRTC
> > involves multiple data flows which "normally" would be separately
> > congestion-controlled.
>
> This is good, but not quite right, and not very specific. To make it
> correct, DCCP isn't an algorithm of its own, so it shouldn't necessarily
> be mentioned without reference to an appropriate CCID, and "act
> reasonably" should be more quantitative.
>
> An improvement would be something like:
> """
> 2. The congestion control algorithms used MUST cause WebRTC streams to
> be able to detect packet losses within several RTTs and reduce their
> sending rates in accordance with the detected loss event rate.
> """
There's an inherent assumption here that the CC algorithm is loss-based,
which I'm *strongly* hoping to avoid. No loss-based algorithm can
produce good results for RT communication on the open web with
"bufferbloat" routers in the chain. Even without bufferbloat you'd end
up with sub-optimial to bad results using loss-based algorithms. (See
below about delay-sensitive algorithms)
> > 3. The congestion control mechanism MUST be possible to realize
> > between two indendently implemented WebRTC end-points.
>
> If you accept the Standards Track requirement above, then this one
> becomes unnecessary!
>
>
> > 4. The congestion control algorithm SHOULD attempt to minimize the
> > media-stream end-to-end delays between the participants, by
> > controlling bandwidth appropriately.
>
> This one is interesting, it says that we prefer congestion control with
> a delay-based component, if I understand correctly. If that's true (and
> I think it is), I think it should be elevated to a MUST, for the reason
> that we suspect concurrent delay-sensitive flows will be present, and
> any flow creating delays will impact the others. So, we should say:
> """
> 4. The congestion control algorithm MUST attempt to minimize the media-
> stream end-to-end delays between the participants, by detecting
> persistent increases in end-to-end latency and adjusting its sending
> rate in an attempt to reduce latency due to queueing or other
> contention.
> """
We absolutely do want to minimize end-to-end delay; without that this
effort is a failure. MUST is ok with me (though it's MUST attempt, so
one should take "MUST" with a grain of salt). I don't agree with your
rewording, since that starts to specify the mechanism used to achieve
the desired result. I want to require the result, and don't care how
it's achieved so long as its interoperable.
> > 5. The congestion control SHOULD allow for prioritization and
> > shifting of banwidth between media flows. In other words, if one
> > flow on the same path as another has to adjust its bit-rate the
> > other flow can perform that adjustment instead, or divided
> > between the flows.
>
> I like the intent; my suggestion is:
> """
> 5. The congestion control SHOULD allow for flow-based prioritization
> and sharing of the overall sending rate between multiple flows *between
> the same two endpoints*. In an ensemble of related flows, this is
> intended to allow more elastic flows to adjust their rates rather than
> less elastic flows, causing less disruption to the user experience while
> producing the same ensemble effect on the sending rate.
> """
>
> I'll be interested to hear what others think of these suggestions! ;)
That seems good to me.
--
Randell Jesup
randell-ietf at jesup.org
More information about the Rtp-congestion
mailing list