[rtcweb] 5 tuples and rmcat-cc-requirements-01

Dave Taht <dave.taht@gmail.com> Mon, 30 December 2013 00:02 UTC

Return-Path: <dave.taht@gmail.com>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id AF89B1AE330; Sun, 29 Dec 2013 16:02:17 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0.7
X-Spam-Level:
X-Spam-Status: No, score=0.7 tagged_above=-999 required=5 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xZOc6SZSUCdZ; Sun, 29 Dec 2013 16:02:15 -0800 (PST)
Received: from mail-we0-x231.google.com (mail-we0-x231.google.com [IPv6:2a00:1450:400c:c03::231]) by ietfa.amsl.com (Postfix) with ESMTP id 052301AE0A7; Sun, 29 Dec 2013 16:02:14 -0800 (PST)
Received: by mail-we0-f177.google.com with SMTP id u56so9542371wes.22 for <multiple recipients>; Sun, 29 Dec 2013 16:02:09 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=If5vyYo9jPzxDKONGfxPPawc89EJdKaCA68e7fV5WE8=; b=JeC5hsZqy/Ab2BuKg4nYQPtBv1XZvEh0/52BrDJAr5oY4rMmSarS+jW4VgKBjE+Nov jqc1e+hCTmImedSUJpPu6qdsx+R9f+Kqg2B1gklgWq1F44imGhGSWoTyJHTd+CMBw9DR ZkIZ6bmoURNKfsVjCrpu8TRH7byJRkN3wqNZOO31A5v2uE7+bzwMFdSVaAqD9bvISYxS B27qWkmQKIpzXp/YWFgd68KMuacUktQBvZQaGxf0WgXyDR7pDAcmoGM3zPT/lL7IbOa7 7DzkOPQpr4HoNT2vUDYV80EOrRN3/can+T5k37k+T+l6S1IPEcsPY7Iu1w9oroC1GRHh I6ZQ==
MIME-Version: 1.0
X-Received: by 10.180.198.43 with SMTP id iz11mr41849974wic.0.1388361728931; Sun, 29 Dec 2013 16:02:08 -0800 (PST)
Received: by 10.217.123.69 with HTTP; Sun, 29 Dec 2013 16:02:08 -0800 (PST)
Date: Sun, 29 Dec 2013 16:02:08 -0800
Message-ID: <CAA93jw7FDddn2n23fm=rdUsDyGakNfyLkJDgNjoC43fSc4GnSA@mail.gmail.com>
From: Dave Taht <dave.taht@gmail.com>
To: "rmcat@ietf.org" <rmcat@ietf.org>, rtcweb@ietf.org
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: quoted-printable
Subject: [rtcweb] 5 tuples and rmcat-cc-requirements-01
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <rtcweb.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/rtcweb/>
List-Post: <mailto:rtcweb@ietf.org>
List-Help: <mailto:rtcweb-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 30 Dec 2013 00:02:18 -0000

I finally had a chance to read over

http://tools.ietf.org/html/draft-ietf-rmcat-cc-requirements-01

and also work at reproducing some of the difficulties present in the
current implementation of chrome in light of the two papers presented
at the last ietf on google congestion control. I went through tons of
tests and packet captures that pretty much reproduced the legion of
problems documented in

https://speakerdeck.com/vr000m/evaluating-googles-congestion-control-for-webrtc
and the other paper presented at ietf...

and also fed webrtc traffic through the fq_codel and pie queue
management systems (with pretty good results). I have tons of captures
from each experiment if anyone wants them.

So, I have some comments on this requirements document. (I'm new to
paying attention on rmcat, so a few of my questions are probably
answered by some document I haven't read yet. Steers appreciated. for
all I know I'm on the wrong mailing lists too. Sorry)

In particular, the flows I was looking at multiplexed voice and video
on the same 5 tuple. I am curious as to the justification for this, as
voice (without silence suppression) is isochronous and video is not.
(is silence suppression used in webrtc?)

To me, multiplexing these two very different flows on the same ports
is not a good idea except under extreme port pressure, and not useful
in ipv6 or in non-natted environments at all. Even in a natted
environment, saving a single port is a false savings as (for example)
dns lookups punch dozens of holes through nat on a regular basis.

Requiring that in most or all cases these two flow types be on unique
5 tuples would give smarter queue management techniques on routers
(like sfq, or sqf (deployed at FT), or fq_codel (deployed at
free.fr)), a fighting chance. In particular it gives voice much higher
probability for drop-and-delay free behavior, and analyzing the delta
in drops and delay between a separate voice tuple and video tuple
could provide insight as to the congestion in the system.

In current implementations, is it possible to force flows onto
different tuples? What are the other flaws in suggesting or requiring
a different tuple?

(note I'm not suggesting bulk data traffic get unique 5 tuples per flow)

Some comments on section 3

        A.  If possible, it should also share information and adaptation
            with other non-RTP flows between the same endpoints, such as
            a WebRTC data channel

I might argue that looking at the traffic on the whole browser would
be good. The browser deprioritizing background web page loads while a
webrtc session is active would be useful in the presence of
congestion.

        B.  The most correlated bandwidth usage would be with other
            flows on the same 5-tuple, but there may be use in
            coordinating measurement and control of the local link(s).

As I note above you can get more congestion information from a pair of
flows than one.

        C.  Use of information about previous flows, especially on the
            same 5-tuple, may be useful input to the algorithm,
            especially to startup performance of a new flow.

A 4 tuple may also provide insight, or even two (ip to ip)

        4B.  When additional input signals such as ECN are available,
            they should be utilized if possible.

I would not mind seeing an implementation that negotiated ECN, but it
is out of scope on this document. Is it discussed elsewhere, or
implemented elsewhere? Is an ipv6 version of webrtc implemented
anywhere? I am under the impression it can be made to work in
freeswitch...

   6.   Flows managed by this algorithm and flows competed against at a
        bottleneck may have different DSCP markings depending on the
        type of traffic.  A particular bottleneck or section of the
        network path may or may not honor these markings.

And in fact, may not preserve them. It would be good to be aware
if they are being preserved in both directions and mark appropriately,
and also to probe if packets with particular classifications are being
dropped
or treated weirdly. This includes detecting for e2e ECN awareness.

        A.  In WebRTC, a division of packets into 4 classes is
            envisioned in order of priority: faster-than-audio, audio,
            video, best-effort, and bulk-transfer.  Typically the flows
            managed by this algorithm would be audio or video in that
            heirarchy, and feedback flows would be faster-than-audio.

faster-than-audio? RTCP Signalling? what?

I still have to think about RTCP signalling as it's very hard to pick
out of the data I have, if it's even in there.

   10.  The algorithm should quickly adapt to initial network conditions
        at the start of a flow.  This should occur both if the initial
        bandwidth is above or below the bottleneck bandwidth.

The algorithm I looked over has particularly bad behavior on taking
back bandwidth after it has been used up by another flow, taking many
seconds to ramp up. I like the idea of periodically probing to ratchet
up to a higher rate, with a slow-start-like burst (a higher resolution
frame sent in parallel with lower rate data).  But in terms of the
requirements, adding a

        The algorithm should quickly recover from a loss in bandwidth,
recovering voice first, if possible.


-- 
Dave Täht

Fixing bufferbloat with cerowrt: http://www.teklibre.com/cerowrt/subscribe.html