[R-C] Why not TFRC?

Randell Jesup randell-ietf at jesup.org
Tue Nov 8 19:52:26 CET 2011


On 11/8/2011 12:53 PM, Piers O'Hanlon wrote:
> I thought it would be useful to understand what people consider are
> the problems with TFRC, and why they mean a new congestion protocol
> would be better for RTCweb?

In addition to the below, I'll note that the requirements when you have 
multiple streams between endpoints and the ability to adjust the split 
of bandwidth between them, and to adjust the parameters of the streams 
directly (resolution, framerate, etc) give more degrees of freedom and a 
more complex set of incoming data than TFRC was designed for.  You could 
run each stream as an independent TFRC stream, but that would result in 
a bunch of sub-optimal use-cases (and they'd fight, which my memory 
indicates tends towards oscillation).

> Clearly TFRC does have some issues though it would be useful for the
> community to understand why TFRC needs to be superseded? Given that it
> is probably the most widely cited standard for real-time media flows
> and appears to have a growing number of 'TFRC based' deployments: e.g.
> GoogleTalk says it is 'based upon TFRC'

My understanding is that Google Talk (and Hangouts) are based on the 
algorithm laid out in Harald's draft, which uses TFRC-equivalent as an 
upper bound more or less, but does not actually implement TFRC.

I personally have seen no uses of TFRC, though on the other hand I 
haven't really looked outside of hardware/software videophones and VoIP 
devices.

> Gnome's Empathy IM/videoconf
> client has recently put TFRC support into their Farsight library, and
> others (Magor etc) who mentioned their use of it on RTCweb.

I've implemented videophones and associated congestion-control regimes 
in the past, and followed the definition of TFRC in the IETF (and 
early-on decided it was not of any utility for my old company).  TFRC, 
as with all loss-based solutions, fails miserably in bufferbloat 
situations, as *seconds* of delay can build up before any loss occurs. 
The problem is probably worse now than when I first ran into it in early 
2004.  I do not consider TFRC a viable candidate for robust realtime 
communication.  Many proprietary solutions have been created in the 
meantime like the one I came up with in 2004, what GIPS (now Google) 
came up with a short while later I believe, what Radvision has recently 
laid out, etc.  Until recently everyone considered these delay-based 
solutions a proprietary value-add; they've only recently "come out of 
the closet".

Also, the 1/RTT reporting requirement was a stumbling block, though 
perhaps a solvable one.  In reality, algorithms need *up to* 1/RTT 
reporting depending on the situation (and sometimes faster than 1/RTT is 
helpful), but at other times (stability) need very little feedback. 
This requires active support at both ends, not just the sender.

> I guess I can start with a few well known issues with TFRC:
> - Problems with clocking the packets out for TFRC
> - Issues with using variable packet sizes

Which is the norm for video.

> - "Very low video bitrates at moderate loss rates" 3GPP tr26.114

A real issue for TFRC I imagine - though delay-based algorithms should 
avoid almost any congestion-based loss except on extreme swings with 
low-buffer devices.

> - 'Oscillatory behaviour'

Also a major issue as my memory indicates, though some oscillation 
(below significant effect on user-noticeable quality) is ok.

But honestly, none of those matter if TFRC doesn't deal with bufferbloat 
and minimize delay, and it doesn't.  It's TCP-friendly UDP, it's not 
delay-sensitive.

-- 
Randell Jesup
randell-ietf at jesup.org


More information about the Rtp-congestion mailing list