[R-C] One congestion control to bind them all!
Michael Welzl
michawe at ifi.uio.no
Mon Apr 9 18:04:50 CEST 2012
On Apr 9, 2012, at 5:10 AM, Randell Jesup wrote:
> On 4/8/2012 10:41 PM, Justin Uberti wrote:
>>
>>
>> On Sun, Apr 8, 2012 at 1:59 PM, Michael Welzl <michawe at ifi.uio.no
>> <mailto:michawe at ifi.uio.no>> wrote:
>>
>> > Justin replied:
>>
>> I think we agree - to avoid the exact problems you
>> mention, the plan
>> has been to replace the SCTP CC module with a CC
>> that is
>> common across
>> media and data.
>>
>>
>> Oh, cool! I wasn't aware of that - is that documented
>> somewhere? Sorry
>> if I missed it! I'm a bit new to the whole forest of
>> RTCWEB
>> documents...
>>
>>
>> If you read the early archives of this list (and discussions
>> predating it on rtcweb), you'll find that goal articulated a
>> number of times.
>>
>>
>> I think I have seen and heard about the wish to let the user
>> prioritize flows, and somehow avoid that the flows would be
>> totally
>> ignorant about each other - but this is not the same as what I'm
>> suggesting: a *single* congestion control instance for everything.
>>
>> Now I'm not sure if I get this right:
>> 1) Justin's statement above means that there is a plan to have one
>> single SCTP CC module for everything in the "data channel", but
>> there will still be different congestion control for RTP/UDP
>> transfer => then this is not what I mean, you still won't get the
>> same efficiency as if you use one CC instance for *everything*, by
>> which I really mean *everything*.
>>
>> 2) Justin's statement above means what I say here (one CC instance
>> for *everything*) => then I have missed that and misunderstood the
>> discussion, and just think it's good.
>>
>>
>> #2 is what I think we've had in mind - given that this is fairly
>> greenfield territory, we should be able to have a mechanism that can
>> handle both media and data. Said mechanism will still have to guess
>> at
>> non-RTP/SCTP flows, of course.
>
> Correct - that was the stated goal, but thus far we don't have a
> definitive answer about how to do so. Note that harald's draft
> generates available bandwidth estimates for all channels together if
> you let it include bytes received by the SCTP connection in the
> period in question. This would at minimum allow the sender side to
> decide (at the application layer) on a media/data split, and then
> use that to enforce an upper limit for the SCTP connection.
Justin said that too (that #2 was the goal); good! Sorry for having
misunderstood this.
> Even if we run everything in one congestion algorithm, we still need
> to have a mechanism for splitting the bandwidth between media and
> data channels; "normal" SCTP mechanisms would not suffice for media
> streams (see some of Justin's recent comments on send timing for
> examples of why).
... but it's really only a scheduling function... that can always do a
better job than giving priorities to a CC. algorithm.
>> We will very likely be doing that application-level reporting,
>> and probably allowing the application to adjust the
>> distribution. My proposal on the API for that is outstanding
>> in
>> the W3 side of this standardization effort.
>>
>> I spoke more directly to this at the rtcweb Interim meeting in
>> Febuary; my slides are at:
>> http://www.ietf.org/__proceedings/interim/2012/01/__31/rtcweb/slides/rtcweb-1.pdf
>> <http://www.ietf.org/proceedings/interim/2012/01/31/rtcweb/slides/rtcweb-1.pdf
>> >
>> The relevant slides are 10-13. While not stated on the
>> slides,
>> this discussion emanates from the goal to in some manner merge
>> them or make them work together (and not fight), and this
>> was I
>> think re-iterated from the podium there.
>>
>>
>> I saw that presentation, but I had interpreted it as being only
>> about the SCTP data channel, which would be case 1) above. Even if
>> you extend that to incorporate other streams with cross-
>> reporting as
>> you describe above, it sounds like a complicated vehicle that
>> will,
>> I think, never be as efficient as simply having a single
>> congestion
>> control instance for everything.
>
> Perhaps true - but efficiency isn't necessarily the primary goal
> here; a quality experience for the user given the available
> bandwidth is, including "appropriate" splits of data and media. And
> the reporting is because the application has knowledge of state we
> can't have - for example if the 2nd channel of video is important,
> or to decide if any video at all is important, or that when extra
> bits are available they should go to higher resolution instead of
> faster data transfer, or higher-quality audio, etc. As discussed,
> the WebRTC system will apply an automatic distribution of available
> bandwidth according to static priorities given to it, but the app is
> given the choice to intervene.
>
> This activity by the app should not cause significant issues for the
> congestion control algorithm as mostly it's just redistributing the
> pie.
Sure. I understand that this won't be easy, but again I'm sure that
it's much easier to achieve when the thing you have to manipulate is
just a scheduler that decides how the currently available rate has to
be divided among application streams.
Cheers,
Michael
More information about the Rtp-congestion
mailing list