Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Reed-Solomon Forward Error Correction (FEC) Schemes) to Experimental RFC
Vincent Roca <vincent.roca@inrialpes.fr> Thu, 27 September 2007 13:16 UTC
Return-path: <rmt-bounces@ietf.org>
Received: from [127.0.0.1] (helo=stiedprmman1.va.neustar.com) by megatron.ietf.org with esmtp (Exim 4.43) id 1IatEL-0006Oj-Qc; Thu, 27 Sep 2007 09:16:37 -0400
Received: from rmt by megatron.ietf.org with local (Exim 4.43) id 1IatEK-0006NH-DC for rmt-confirm+ok@megatron.ietf.org; Thu, 27 Sep 2007 09:16:36 -0400
Received: from [10.90.34.44] (helo=chiedprmail1.ietf.org) by megatron.ietf.org with esmtp (Exim 4.43) id 1IatEK-0006LF-1C for rmt@ietf.org; Thu, 27 Sep 2007 09:16:36 -0400
Received: from mail4-relais-sop.national.inria.fr ([192.134.164.105]) by chiedprmail1.ietf.org with esmtp (Exim 4.43) id 1IatEF-00087n-Mi for rmt@ietf.org; Thu, 27 Sep 2007 09:16:32 -0400
X-IronPort-AV: E=Sophos;i="4.21,203,1188770400"; d="c'?scan'208";a="16864099"
Received: from ornon.inrialpes.fr (HELO [194.199.24.115]) ([194.199.24.115]) by mail4-relais-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 27 Sep 2007 15:16:30 +0200
Message-ID: <46FBAD2E.7050101@inrialpes.fr>
Date: Thu, 27 Sep 2007 15:16:30 +0200
From: Vincent Roca <vincent.roca@inrialpes.fr>
User-Agent: Thunderbird 2.0.0.6 (X11/20070829)
MIME-Version: 1.0
To: Igor Slepchin <igor@roundbox.com>
Subject: Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Reed-Solomon Forward Error Correction (FEC) Schemes) to Experimental RFC
References: <E1IYNrI-00035t-H5@stiedprstage1.ietf.org> <46F4271E.6010408@roundbox.com> <46F8C8A8.3080602@inrialpes.fr> <46F9CCBD.4090702@roundbox.com>
In-Reply-To: <46F9CCBD.4090702@roundbox.com>
X-Enigmail-Version: 0.95.2
Content-Type: multipart/mixed; boundary="------------050802080008080301060609"
X-Spam-Score: 0.0 (/)
X-Scan-Signature: fb93e867a11a29ac1dc5018706b412ac
Cc: sami.peltotalo@tut.fi, jerome.lacan@ensica.fr, Vincent Roca <vincent.roca@inrialpes.fr>, rmt@ietf.org
X-BeenThere: rmt@ietf.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Reliable Multicast Transport <rmt.ietf.org>
List-Unsubscribe: <https://www1.ietf.org/mailman/listinfo/rmt>, <mailto:rmt-request@ietf.org?subject=unsubscribe>
List-Post: <mailto:rmt@ietf.org>
List-Help: <mailto:rmt-request@ietf.org?subject=help>
List-Subscribe: <https://www1.ietf.org/mailman/listinfo/rmt>, <mailto:rmt-request@ietf.org?subject=subscribe>
Errors-To: rmt-bounces@ietf.org
Dear Igor, > I don't think the proposed change completely solves the problem, it only > lets us pass the sanity check. The proposed change _does correct the big mistake_ that you identified (thanks a lot!), i.e. the fact there was no room to produce parity symbols when following the indications given in section 6.1, which was a little bit annoying ;-) > As I briefly mentioned in my previous email, taking the two floors in > the n-algorithm will not produce the required number of repair symbols > in some situations. Let's analyze this point in detail: 1- It's perfectly normal that, because of rounding (be it with floor or ceil), the number of repair symbols produced differ from the target one, or said differently, that the actual code rate differ from the target one. We were aware of that since the beginning. 2- Is the current n-algorithm the best one, i.e. the one that guaranties the best match? We studied the question and the answer is NO. We can have a better match by using: max_n = ceil(B / rate) // proposed change instead of: max_n = floor(B / rate) // initial version A detailed analysis is provided below. The same remark applies to the LDPC I-D, section 5.4 too! > [...] However, since knowing the rate is not required for > decoding of Reed-Solomon codes, knowing the exact number of repair > symbols is not really required for decoding either. I understand that > having a reasonable estimate for that number may make memory management > on some implementations easier, but I don't think that knowing the > precise value is critical. For example, if the server sets max_n to > the maximum number of encoding symbols generated for any of the source > blocks, it gives the client a reasonable estimate for pre-allocating its > memory structures. The estimate may be off (on the plus side) by up to 2 > encoding symbols for A_small source blocks, but that doesn't sound too > bad for me. You're right, with RS codes, knowing the exact n value of any source block is not mandatory, and a reasonable over-estimate can be sufficient. But: - knowing the actual "n" value at a receiver is rather simple; - we don't say that the receiver MUST calculate it, it's optional. If he wants to reserve room for 255 symbols (if m==8), he can; - the same algorithm can be used in other FEC codes where knowing "n" is mandatory (LDPC-staircase/triangle being one of them). A "cut-and-paste" of this section is easy (and that's what we did). To summarize, we suggest: - to update the n-algorithm section with the above change (i.e. ceil instead of floor in the max_n formula) in both the RS and LDPC I-Ds. - as a result, the number of repair symbols produced will better match the target rate, with a different distribution (see the histograms below): * with ceil (new version): n is in ]k/rate -1; k/rate+1] and most of the time we produce fewer (up to 1, included) repair symbols than expected, sometimes more (but less than 1). * with floor (old version): n is in ]k/rate -2; k/rate] and we often produce fewer (up to almost 2) repair symbols. It does not seem to raise any issue (but we haven't yet updated our respective FLUTE/ALC tools). Thanks for the comment that led us to give a thought to this point once again. The authors Why is ceil() better than floor() in max_n calculation? ------------------------------------------------------- Here are some results, produced with the attached C program that tests all the code rates in the range [0.00001; 1.0] (with a 0.00001 increment), and for each code rate, all the possible k values in [1; B]. It then computes k/rate - n, i.e. the difference between the target number of repair symbols (floating point value) and the actual number (integer). These values are then analyzed with a descriptive statistics tool: http://planete.inrialpes.fr/people/roca/descr_stats/ We see that in all cases there is an interval of 2 symbols between the number of parity symbols that should be produced (k/rate) and the number actually produced (n-algo). In one case n is below the target (if floor is used), in the other case, it straddles the target (if ceil is used instead). In that latter case, most of the time the n-algo produces fewer repair symbols, but sometimes it produces more. New version: ~/work/descr_stats/descr_stats 1 results_with_ceil.txt ------------------------------------------------------ nb of samples = 12700127 mean = 0.256850 <=== NB: important point here median = 0.260329 variance = 0.129964 standard deviation = 0.360505 range = 1.995841 min = -1.000000 max = 0.995841 confidence interval around mean 0.256850: 90: ± 0.584438 95: ± 0.665684 99: ± 0.888069 confidence interval around median 0.260329: 90: ± 0.583622 95: ± 0.665245 99: ± 0.891548 ------------------------------------------------------ Old version: $ ~/work/descr_stats/descr_stats 1 results_with_floor.txt ------------------------------------------------------ nb of samples = 12700127 mean = 0.761280 <=== NB: important point here median = 0.757799 variance = 0.139688 standard deviation = 0.373748 range = 1.991292 min = 0.000000 max = 1.991292 confidence interval around mean 0.761280: 90: ± 0.611945 95: ± 0.694886 99: ± 0.888559 confidence interval around median 0.757799: 90: ± 0.611284 95: ± 0.694555 99: ± 0.892040 ------------------------------------------------------ The histograms (PDF) are available here: New version: http://planete.inrialpes.fr/~roca/doc/results_with_ceil_histogram.pdf Old version: http://planete.inrialpes.fr/~roca/doc/results_with_floor_histogram.pdf Attached is the (quick and dirty) C program that has been used to produce them if somebody wants to check by himself.
_______________________________________________ Rmt mailing list Rmt@ietf.org https://www1.ietf.org/mailman/listinfo/rmt
- [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Reed-S… The IESG
- Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Re… Igor Slepchin
- Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Re… Vincent Roca
- Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Re… Igor Slepchin
- Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Re… Vincent Roca
- Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Re… Igor Slepchin