Re: [tsvwg] WGLC on FECFRAME RLC FEC

Gorry Fairhurst <gorry@erg.abdn.ac.uk> Fri, 04 May 2018 15:05 UTC

Return-Path: <gorry@erg.abdn.ac.uk>
X-Original-To: tsvwg@ietfa.amsl.com
Delivered-To: tsvwg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7327612D878 for <tsvwg@ietfa.amsl.com>; Fri, 4 May 2018 08:05:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9] autolearn=unavailable autolearn_force=no
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 FeurjXbcveXe for <tsvwg@ietfa.amsl.com>; Fri, 4 May 2018 08:05:07 -0700 (PDT)
Received: from pegasus.erg.abdn.ac.uk (pegasus.erg.abdn.ac.uk [IPv6:2001:630:241:204::f0f0]) by ietfa.amsl.com (Postfix) with ESMTP id A0EBD12D7F1 for <tsvwg@ietf.org>; Fri, 4 May 2018 08:05:07 -0700 (PDT)
Received: from Gs-MacBook-Pro.local (fgrpf.plus.com [212.159.18.54]) by pegasus.erg.abdn.ac.uk (Postfix) with ESMTPA id C59D11B00151; Fri, 4 May 2018 16:05:00 +0100 (BST)
Message-ID: <5AEC769C.50806@erg.abdn.ac.uk>
Date: Fri, 04 May 2018 16:05:00 +0100
From: Gorry Fairhurst <gorry@erg.abdn.ac.uk>
Reply-To: gorry@erg.abdn.ac.uk
Organization: University of Aberdeen
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:12.0) Gecko/20120428 Thunderbird/12.0.1
MIME-Version: 1.0
To: Vincent Roca <vincent.roca@inria.fr>
CC: Wesley Eddy <wes@mti-systems.com>, "tsvwg@ietf.org" <tsvwg@ietf.org>, nwcrg@irtf.org
References: <53be4942-bb4f-94a9-b7db-cf023717257c@mti-systems.com> <b4d1e70b-74c4-f5c6-e158-5f0c8ba75747@erg.abdn.ac.uk> <F548278F-7656-4D54-8B7D-874969EC2A00@inria.fr>
In-Reply-To: <F548278F-7656-4D54-8B7D-874969EC2A00@inria.fr>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/tsvwg/DGhpgE9KocottEMgP1y96a53DIY>
Subject: Re: [tsvwg] WGLC on FECFRAME RLC FEC
X-BeenThere: tsvwg@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Transport Area Working Group <tsvwg.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tsvwg/>
List-Post: <mailto:tsvwg@ietf.org>
List-Help: <mailto:tsvwg-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tsvwg>, <mailto:tsvwg-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 04 May 2018 15:05:13 -0000

Thanks these corrections seem like what I expected, thanks for doing them.

Maybe you chekc that youcheck that change /untill/until/.

Best wishes,
Gorry

On 04/05/2018, 15:30, Vincent Roca wrote:
> Hello Gorry,
>
>> I have the read draft-ietf-tsvwg-rlc-fec-scheme-02 during WGLC and 
>> have the following comments (as an individual).
>> These comments are all on the text and the standards requirements 
>> being stated, they do not request changes to the method.
>> Gorry
>>
>
> Thanks a lot for this very detailed review. It’s sometimes challenging 
> and really helpful.
> Here are my answers. Basically I agree with everything and updated the 
> I-D accordingly.
>
> I'll send the updated version of the I-D next week since we have 
> spotted a few more things that need
> to be fixed. More to come soon...
>
>
> Cheers,
>
>   Vincent and Belkacem
>
>
>> ---
>> /  They are meant to
>>   protect arbitrary media streams along the lines defined by FECFRAME
>>   extended to sliding window FEC codes./
>> - I think the word /meant/ reads a little weird. Rather as if they 
>> maybe do not do this. I suggest something like /They can provide 
>> protection to/ may be better?
>
> VR: Fixed.
>
> NEW:
>
>     They can protect arbitrary media streams...
>
>
>
>> ---
>> Just to be sure, I would add /packet/ or something to /erasure 
>> recovery capabilities/ to be clear that this is not a bit-level FEC. 
>> Perhaps the first use of /FEC/ could also be better as 
>> /Application-Lyer FEC/ for the same purpose?
>
> VR: Very good point. We now mention "packet erasure recovery 
> capabilities » in the abstract to avoid mis-understanding.
> We also expend FEC acronym in the abstract (it was only the case in 
> the title and Introduction).
>
>
>> ---
>> /in case of reliable file transfers/
>> could be clearer as:
>> /when used for reliable file transfers/
>
> VR: Done.
>
>
>> ---
>> /Defining this block size requires to find an/
>> could be easier as:
>> /To define the block size, it is required to find an/
>
> VR: Done.
>
>> ---
>> In 1.2 it states:
>> /This choice will impact all receivers./
>> - Maybe I misunderstand, but does it impact a receiver that sees no 
>> loss, because that could (in theory) act on the data as it arrives?
>
> VR: A perfect receiver will receive source data first and should not 
> be impacted in any way. But that’s an exception. All the other receivers,
> even those who experience a tiny (but not zero) loss rate, need to 
> wait the same time on average: the time needed to receive repair packets
> for that block, which directly depends on the block size chosen for 
> the worst receiver. I’ve clarified the sentence.
>
> OLD:
>
>     This choice will impact all receivers.
>
>
> NEW:
>
>     This choice then impacts the
>     FEC-related latency of all receivers, even those experiencing a good
>     communication quality, since no FEC encoding can happen untill all
>     the source data of the block is available at the sender, which
>     directly depends on the block size.
>
>
>> ---
>> /are extremely efficient/
>> - This seems like a value judgment. I'd be content with saying 
>> /efficient/, but to say more I feel really needs a strong evidence 
>> that has consensus. RFCs must not be used to market techniques.
>
> VR: Sure, you’re right. I propose the following sentence:
>
> OLD:
> These FEC Schemes are extremely efficient for instance with media that
> feature real-time constraints sent within a multicast/broadcast session.
>
> NEW:
> These FEC Schemes, and more generally sliding window FEC codes, are 
> recommended
> for instance with media that feature real-time constraints sent within 
> a multicast/broadcast
> session [Roca17].
>
>
>> ----
>> /latency close to zero/
>> - same comment, but perhaps this could be stated as /of the order of 
>> the time to transmit a packet/ our similar?
>
> VR: Similarly I have changed for something more objective:
>
> OLD:
> However the receivers experiencing a good to medium communication 
> quality will observe
> a FEC-related latency close to zero [Roca17] since...
>
> NEW:
> However the receivers experiencing a good to medium communication 
> quality will observe
> a reduced FEC-related latency compared to block codes [Roca17] since...
>
>
>> ---
>> /waiting the end of the block for the first repair packet to arrive./
>> - perhaps clearer as:
>> /waiting for the first repair packet to arrive at the end of the block./
>
> VR: Done.
>
>
>> ---
>> /sliding window codes achieve more easily a target/
>> - perhaps clearer as:
>> /sliding window codes can more achieve more efficiently achieve a target/
>
> VR: Done.
>
> NEW:
> … sliding window codes can more efficiently achieve a target 
> transmission quality...
>
>
>> ---
>> /The Sliding Window RLC FEC Scheme is designed so as to reduce the 
>> transmission overhead/
>> - perhaps clearer as:
>> /The Sliding Window RLC FEC Scheme is designed to reduce transmission 
>> overhead/
>> -> however I note the next phrases talk about /minimize packet 
>> overhead/, which could be seen as header bytes, is the distinction 
>> intended, then please explain - if not please use the same term.
>
> VR: Yes, the term « overhead » is misleading here.
>
> NEW:
> The Sliding Window RLC FEC Scheme is designed to limit the packet 
> header overhead.
>
>
>> ----
>> /receiver to easily reconstruct/
>> - remove /easily/, or say they are /sufficient to allow a receiver to 
>> reconstruct/ or whatever, but avoid the value statement.
>
> VR: Done.
>
>
>> ---
>> This strikes me as a little odd:
>> /In all situations, we MUST have:/
>> - If this is an actual RFC2119 requirement, then you need to state it 
>> terms of what the message contains. Although here I am unsure this is 
>> a protocol requirement, and if that is the case, it could be better 
>> to state the /method needs to ensure:/?
>
> VR: Since RFC2119 recommends to use these terms sparingly, I’ve 
> changed for:
>
> OLD:
> In all situations, we MUST have:
>          ew_size <= ew_max_size
>
> NEW:
> At session start, the encoding window will probably be small and then 
> progressively increase until it reaches its maximum value.
> At any time:
> ew_size <= ew_max_size
>
>
>> ---
>> This seems an off phrase in a specification:
>> /     In practice they
>>      will usually be fixed, especially with multicast/broadcast
>>      transmissions. /
>> - could it instead be true to say something like /An implementation 
>> at a sender and receiver can fix these values/... or something like.
>
> VR: I have clarified this part.
>
> NEW:
>       An implementation
>       at a sender can fix the E parameter and communicate it as part of
>       the FEC Scheme-Specific Information (Section 4.1.1.2).  There is
>       no need to communicate the cr parameter per see (it's not required
>       to process a repair packet at a receiver).  This cr parameter can
>       be fixed, however, in specific use-cases and in particular with
>       unicast transmissions in presence of a feedback mechanism that
>       estimates the communication quality (out-of-scope of FECFRAME),
>       the code rate may be adjusted dynamically.
>
>
>> ---
>> /Let us assume that the/ and /Let us also assume/
>> - seems rather like a paper, than a specification. Could this be 
>> reworded as /In the case when the code rate is .../etc.?
>
> VR: Reworded.
>
>
>> ---
>> /It means that the source flow bitrate needs to be/
>> May be easier as:
>> /This requires the source flow bitrate to be/
>
> VR: Reworded.
>
>
>> ---
>> Similarly:
>> /It means that the transmission bitrate/ as /This requires the 
>> transmission bitrate/
>> -> but I have a question. of whether the /flow bitrate/ or /the 
>> transmission bitrate/ are actually different, and if not=, then why 
>> use two terms? Do we need either term as a /rate/ since this appears 
>> to be about volume of data and not rate?
>
> VR: We are dealing here with bitrates in bits/s, not volume. We use 
> source (resp. repair) flow bitrates and transmission bitrate to denote
> the bitrate at the FECFRAME sender output.
> There was a additional term, « input bitrate », that I have replaced 
> with source flow bitrate.
>
>
>> ---
>> /Finding the optimal value/
>> - I am unsure how you would define /optimal/ here, is it possible to 
>> say suitable/acceptable tradeoff or something like that without 
>> implying a need for optimal?
>> /and should be determined after simulations or field trials.  This is 
>> of course out of scope of this document.
>> /
>> - and finished like it is a report, rather than a specification. Is 
>> it therefore possible to simply say something like /An appropriate 
>> tradeoff needs to be determined depending on the use case…./
>
> VR: Removed « optimal » as suggested, and tried to have it less like a 
> report.
>
>
>> ---
>> In section 3.2
>> /An ADU, coming from the application/
>> - is this at the sender? - just to be sure?
>
> VR: Yes, added « At a sender ».
>
>
>> ---
>> / Indeed, a lost ADU recovered at a receiver must
>>   contain enough information to be assigned to the right application
>>   flow (UDP port numbers and IP addresses cannot be used to that
>>   purpose as they are not protected by FEC encoding).
>> /
>> - I could not parse this. Are the UDP port numbers and IP addresses 
>> not protected by the link integrity check and IP/transport checksum?
>> - If they were corrupted they would cause the packet to be delivered 
>> to another endpoint??? what is this about?
>
> VR: I admit this is a complex paragraph (the technic is from FECFRAME, 
> it’s not something added here for the pleasure).
> It’s not a matter of corruption. I’ve tried to improve the 
> explanation. Here it is:
>
> NEW:
>    At a sender, an ADU coming from the application cannot directly be
>    mapped to source symbols.  When multiple source flows (e.g., media
>    streams) are mapped onto the same FECFRAME instance, each flow is
>    assigned its own Flow ID value (see below).  At a sender, this
>    identifier is prepended to each ADU before FEC encoding.  This way,
>    FEC decoding at a receiver also recovers this Flow ID and a recovered
>    ADU can be assigned to the right source flow (note that UDP port
>    numbers and IP addresses cannot be used to that purpose as they are
>    not recovered during FEC decoding).
>
>
>> ---
>> There seems to be no requirements language at all in section 3.1. Is 
>> this intended?
>
> VR: I guess you mean 3.2. No, it’s not intentional. I’ve added a MUST:
>
> NEW:
> For each incoming ADU, an ADUI MUST created as follows.
>
>
>> ---
>> Section 3.2 speaks of /UDP/ datagrams. I am not sure this is correct, 
>> surely this applied to any type of datagram - DCCP, UDP, or anything 
>> else that could in the future carry FECFRAME.
>
> VR: Right! Fixed.
>
>
>> ---
>> / Yet, any other
>>   implementation of the PRNG algorithm that matches the above
>>   validation criteria, like the ones detailed in [PM88], is
>>   appropriate.
>> /
>> - is that actually saying an implementation MAY use any PRNG 
>> algorithm that matches …/
>
> VR: Any implementation of the multiplicative congruential algorithm 
> with the constants defined, that
> additionally matches the validation criteria could be used.
> Look at http://www.firstpr.com.au/dsp/rand31/ to get an idea of how 
> prolific the topic is. It’s impressive.
>
> That being said, I’ve removed this sentence to avoid confusion since I 
> already explain that the PM88
> algorithm MUST be used. No need to say more.
>
>
>> ---
>> /  The FEC Framework Configuration Information (or FFCI) includes
>>   information that MUST be communicated between the sender and
>>   receiver(s)./
>> - This confuses me about what are the specific requirements, can you 
>> please ensure that all the fields in this subsection carry an 
>> appropriate RFC2119 keyword (in upper case), to say which are 
>> OPTIONAL, REQUIRED, etc and what they MUST/MAY etc specify.
>
> VR: You’re right, the current sentence can be confusing.
> We follow here FECFRAME requirements (RFC 6363 section 5.6) that 
> explains what MUST be
> detailed in a FEC Scheme specification in terms of signalling (which 
> we actually provide).
> I’ve changed text to avoid this confusion (no MUST any more).
>
> NEW:
>
> 4.1.1.  FEC Framework Configuration Information
>
>    Following the guidelines of [RFC6363], section 5.6, this section
>    provides the FEC Framework Configuration Information (or FFCI).  This
>    FCCI needs to be shared (e.g., using SDP) between the FECFRAME sender
>    and receiver instances in order to synchronize them.  It includes a
>    FEC Encoding ID, mandatory for any FEC Scheme specification, plus
>    scheme-specific elements.
>
> 4.1.1.1.  FEC Encoding ID
> […]
>
> And the same applies to section 5.1.1. (but without any explanatory text).
>
>
>> ---
>> /A FEC Repair Packet can contain one or more repair symbols./
>> - is that a statement, or a permission? e.g.,
>> /A FEC Repair Packet MAY contain one or more repair symbols./
>
> VR: Good catch. That’s a technical possibility. Changed for MAY as 
> suggested.
>
>
>> ---
>> /integer carried the Density Threshold/
>> - is this /carries/
>
> VR: Fixed.
>
>> ---
>> Is this discussion OK, or do you think we need to define the protocol 
>> actions using RFC2119 keywords:
>> / The only constraint is to increment by
>>   1 the repair key for each of them, keeping the same ew_size source
>>   symbols, since only the first repair key will be carried in the
>>   Repair FEC Payload ID.  The FEC Repair Packet can then be sent./
>
> VR: You’re right.
>
> NEW:
>    In that case the repair key for each of
>    them MUST be incremented by 1, keeping…
>
>
>> - /sent/ probably should be /passed to the transport layer for 
>> transmission./
>
> VR: Yes, as in the FECFRAME I-D. Done. There’s also another instance 
> where « sent » has been replaced.
>
>
>> ---
>> / containing an ADU, can be passed to the application either
>>   immediately or after some time to guaranty an ordered delivery to the
>>   application. /
>> - This reads like it could be /MAY be passed/
>
> VR: Done. I’ll try to be more careful with RFC2119 keywords in the future.
>
>> ---
>> /  received after this delay should not be passed to
>>   the application./
>> - I am unsure whether this needs to be read as /ought/ or /SHOULD/ 
>> could you use one of these instead of /should/?
>
> VR: it’s a matter of deciding what component is responsible of 
> detecting late ADUs.
> All things considered, I’d prefer to relax the requirement to do that 
> within FECFRAME. It’s an implementation decision,
> we just explain (section 3.1.  Parameters Derivation) how to reduce 
> the risk to lead to late decodings.
>
> NEW:
>    With real-time flows, a lost ADU that is decoded after the maximum
>    latency or an ADU received after this delay has no value to the
>    application.  This raises the question of deciding whether or not an
>    ADU is late.  This decision MAY be taken within the FECFRAME receiver
>    (e.g., using the decoding window, see Section 3.1) or within the
>    application (e.g., using RTP timestamps within the ADU).  Deciding
>    which option to follow and whether or not to pass all ADUs, including
>    those assumed late, to the application are operational decisions that
>    depend on the application and are therefore out of scope of this
>    document.
>
>> ---
>> In addition some standard transport comments that ought to be fine tuned:
>> / Repair packets (symbols) are generated and sent on-the-fly/
>> - seems to perhaps be possibly to read as avoids CC, which it should 
>> not. Please be careful to indicate that packets are /passed to the 
>> transport layer for transmission/, if you think that these may be 
>> sent with higher priority than other messages, then please explicitly 
>> say this.
>
> VR: Changed.
>
> NEW:
>    Repair packets (symbols) are generated on-the-fly, computing a 
> random linear
>    combination of the source symbols present in the current encoding 
> window, and
>    passed to the transport layer.
>
>
>> ---
>> /where packets are sent with a fixed period/
>> - I think a word of caution here is needed with respect to CC. So 
>> this probably needs to be carefully worded, or at least say /are 
>> passed to the transport layer each fixed period/.
>
> VR: the CBR assumption was needed to derive parameters, but I agree it 
> gives the
> impression CC is bypassed (in fact in our 3GPP use-case there’s no CC).
> At the light of our discussions (and also with Belkacem) I’m not 
> satisfied with
> section 3.1.  Parameters Derivation
> and will come back with a brand new version.
>
>
>> ---
>> /The FEC Repair Packet can then be sent./
>> .... maybe:
>> /passed to the transport layer for transmission/
>
> VR: Done.
>
>