[rmcat] Notes on CC-Feedback from the Hackathon

Jonathan Lennox <jonathan@vidyo.com> Sun, 04 November 2018 08:31 UTC

Return-Path: <jonathan@vidyo.com>
X-Original-To: rmcat@ietfa.amsl.com
Delivered-To: rmcat@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 09E12130DD5 for <rmcat@ietfa.amsl.com>; Sun, 4 Nov 2018 01:31:07 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.001
X-Spam-Level:
X-Spam-Status: No, score=-2.001 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=vidyo.com
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 vCddSDRPIIhb for <rmcat@ietfa.amsl.com>; Sun, 4 Nov 2018 01:31:04 -0700 (PDT)
Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0:4864:20::62d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7D182127133 for <rmcat@ietf.org>; Sun, 4 Nov 2018 01:31:04 -0700 (PDT)
Received: by mail-pl1-x62d.google.com with SMTP id f12-v6so1782874plo.1 for <rmcat@ietf.org>; Sun, 04 Nov 2018 01:31:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vidyo.com; s=google; h=from:content-transfer-encoding:mime-version:subject:message-id:date :to; bh=uXE622bMxpp23XVcG8cYr+mASd4gAgCzzuIkU8It+mQ=; b=bXjJbWteajRbEilLktvu1ejGw/YV615fZbQMU/TGk/N3vYBWHAYdKbNxMcJeLqN/1W SRbwiun1FB5Ed5MQryaGsecdX4nrzqy7kgMWwdfyHc/C2sV+fV++2P405n8ws7qZt1hh HHghlNvCSWDYH3FKNMk9IRRtT0k0c84Z1wzV8M2rv0n3e39gGJfZkMHpJfUkGwmtf0oF lhltR5Sf1xlzP051Qrjb3sp77lZcPInoPGFL+SYr+4QZPf1Rt7sX4sIJJiwD9qGo/BBY L+YcLb1ZHKBl0+auzGwLPkiITA0yyV42Ctr6R8otps+A/VrX/+Z3kTKPJNdyJ+LIULJr obxQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:message-id:date:to; bh=uXE622bMxpp23XVcG8cYr+mASd4gAgCzzuIkU8It+mQ=; b=FCe615koz/Alr0QGKVoF73V9gbjn4q05kxG8SvyYOMRqrhmb3WHZy9YjdiTw47Op50 oathWvVv/pLHEsd3/XW8DZJboP1RjY57+KcwodzohY7QjOH3N3INK9d5d+5veXsLe4W+ F0mhWpYiKutEprvw2vIWRtNG+h6cWUxlYVrpfwJlR9/L1r5ixcIASyCq+LXS+1s95MK6 CwGOGIeStq+iTiiZgTEfTOn2hBFicD1FUng3AukFBKKbK+QPY5W0h4cis74+NgQ811oN AgrDHWN7oCoHcFfUWP6+ByAPCPzY0reAlWSrxVy2f0TQjpO3SQWXqCByAGDnxRbPbF8l EZIg==
X-Gm-Message-State: AGRZ1gLkGJyK2MoswFuvzBztHF97oIgFF++BZrLzmgZ4vL/bJZ65+VPq DuYBKDVuELXLOMyFE+MOBA8LwQ==
X-Google-Smtp-Source: AJdET5cGEifNBJ64PDefUf8UeVTGydaPRd9bQ61RYke1cL1R0uqSDLoFuaiU8SCSMRGwkfN0CnNgGg==
X-Received: by 2002:a17:902:8302:: with SMTP id bd2-v6mr10409596plb.100.1541320263775; Sun, 04 Nov 2018 01:31:03 -0700 (PDT)
Received: from ?IPv6:2001:67c:370:128:9e0:45c9:3074:f505? ([2001:67c:370:128:9e0:45c9:3074:f505]) by smtp.gmail.com with ESMTPSA id 22-v6sm3725056pfs.108.2018.11.04.01.31.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 04 Nov 2018 01:31:03 -0700 (PDT)
From: Jonathan Lennox <jonathan@vidyo.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\))
Message-Id: <8B5AD149-911B-4489-B694-E63DEE40267A@vidyo.com>
Date: Sun, 04 Nov 2018 15:31:00 +0700
To: avtcore@ietf.org, rmcat@ietf.org
X-Mailer: Apple Mail (2.3445.9.1)
Archived-At: <https://mailarchive.ietf.org/arch/msg/rmcat/yBg8HeFOOSfQyM6KZ-BNZ9_Bjwg>
Subject: [rmcat] Notes on CC-Feedback from the Hackathon
X-BeenThere: rmcat@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "RTP Media Congestion Avoidance Techniques \(RMCAT\) Working Group discussion list." <rmcat.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rmcat>, <mailto:rmcat-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rmcat/>
List-Post: <mailto:rmcat@ietf.org>
List-Help: <mailto:rmcat-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rmcat>, <mailto:rmcat-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 04 Nov 2018 08:31:07 -0000

Nils Ohlmeier, Sergio Mena (remotely), and I worked on implementing CC-Feedback during the Hackathon.  Sergio and Nils worked on implementing it in libwebrtc, specifically as used in Firefox; I worked on adding it to Vidyo’s proprietary codebase.

We each got as far as sending the feedback messages, but unfortunately Sergio had implemented a slightly older version of the draft (-01 vs. -02, lastSeq vs. lastSeq+1) so we weren’t able to interop.

We also weren’t able to get so far as to actually act on the messages as received, and thus hook up our congestion control algorithms.


What follows are my (somewhat disorganized) notes on the CC-Feedback draft, as an implementor.

Parsing CC-Feedback packets is a bit odd — the way you tell there are no more streams in a feedback packet is that there are only four remaining bytes in the packet, for the report timestamp.  This is unambiguous, but perhaps non-obvious.

It should be made more clear that the arrival time offsets indicate time *before* the report timestamp.

I think that having the report timestamp be “derived from the same wallclock used to generate the NTP timestamp field in RTCP Sender Report (SR) packets” (presumably meaning SR reports from the packet sender?) is unfortunate.  SR NTP timestamps often use the real system wall-clock, i.e. actual NTP time-of-day, which is subject to clock adjustments.  For CC feedback, however, I think we want a clock that’s more stable than that.  I’d suggest that report timestamps from a given sender must always use the same clock, which SHOULD be stable, but otherwise can be unrelated to any other clock on the system.

It’s not also clear what precise semantics "the time instant when the report packet was generated” has.  In particular, this isn’t the time the report packet was *sent*, so it can’t be used for RTT calculations, right?  Additionally, if you need to generate multiple report packets to prevent arrival time offsets from being out of range, at least one of the reports’ report timestamps will *not* be the generation time.

What value should be used for arrival time offsets for packets that arrived after the report timestamp?  (If you have consecutive packets that were reordered by more than the maximum arrival time offset, this might be unavoidable.). I think they should be reported as “not received", because they hadn’t arrived as of the report timestamp, but this should perhaps be clarified.

The sentence "If overlapping reports are sent, the information in the later report updates that in any previous reports for packets included in both reports” should be clarified to include the fact that later feedback messages MUST NOT indicate loss for packets that earlier feedback messages reported on.  This has the consequence that feedback senders can’t just purge all data about received packets once feedback has been sent for them, if it’s possible that sequentially earlier, reordered packets might still arrive later.

There should probably be guidance on what a feedback sender should do if it receives duplicate copies of the same packet.  Should the arrival time be that of the first or last copy?

The document says "RTCP congestion control feedback packets SHOULD include a report block for each SSRC that is being congestion controlled”, but it’s not clear how a receiver can know which sources are being congestion controlled.  Moreover, if you’re in a situation where there could be lots of SSRCs (e.g., media coming from an SFU) it’s not clear to me that you want to include reports for SSRCs that have been inactive for a long time. It’s probably better to say SHOULD be sent for every active source (i.e. source for which you will send a report block in your next SR/RR).

The document says “The sequence number ranges reported on in consecutive reports for an SSRC SHOULD be consecutive and SHOULD NOT overlap (i.e., begin_seq for a report is expected to be one greater, modulo 65535, than end_seq of the previous report for that SSRC).”  Should this be limited in some way?  E.g., if a source’s sequence numbers reset after an outage, how far back should the loss reports go?  I think that we don’t want to be sending reports for thousands of sequence numbers.  Additionally, if you had packet reordering around the time a feedback message was sent, you probably want to go back and report earlier packets that arrived after the feedback message went out, even if this results in a sequence number overlap.

What is the point of having the report timestamp have higher precision than the arrival time offsets?  The report timestamp is measured in 1/65536 of a second, but the arrival time offset is only in 1/1024 of a second.

The rtcp-fb SDP negotiation mechanism supports limiting a feedback message to a specific subset of the payload types.  Should this be allowed for CCFB negotiation?  Why would you want it? What does it mean?

The reference in the SDP syntax is wrong; it should be [RFC4585] , not [RFC4584].