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