我想估计启用 Reed-Solomon RS(528,544) 前向纠错 (RS-FEC) 时 25 GbE 链路 (25GBASE-R) 传输特定大小的以太网有效负载的有效容量,但是,我很难就与 RS 相关的开销得出结论。
为简单起见,我们假设所有以太网帧都是 1000 字节,每个帧都有 14 字节的 MAC 头,982 字节的有效负载和 4 字节的帧校验序列。
此外,我们假设除了传输 1000 字节帧所需的额外开销之外,链路上没有其他开销。这意味着,没有流量控制或暂停帧等。
每秒 25e9 位 我假设要计数的所有内容都以每秒 25e9 位 (25 Gbps) 的速度发送到链路上。我通过将 25.78125e9 波特的链路信号速率乘以 64 位/66 位编码率得出这一点。
这是 96.97% 的基本效率。
也可以将其视为每秒 3.125e9 字节,或简称为 3.125 GBps。
NON-FEC 案例 要估计非 FEC 案例的有效以太网有效负载容量,在我看来,我们只需要考虑链路上的以下传输:
12B 包间间隙 7B 前导 1B 帧开始定界符 14B 以太网报头 982B 以太网有效载荷 4B 帧校验序列 1020B
由于以太网有效负载占总 1020 个字节中的 982 个字节,因此链路相对于有效负载的效率为 96.27% (982B/1020B)。
如果上面列出的所有项目都以每秒 25e9 位 (25 Gbps) 的速度传输,那么可能实现的最大以太网有效负载将为每秒 3.0086e9 字节 (3.01 GBps)。
REED-SOLOMON FEC 开销? IEEE 802.3by 文档说 25GBASE-R RS_FEC 使用 RS(528, 514) 编码方案。(它还说它在符号大小为 10 位的 Galois 域 GF(2^10) 上运行,但我猜这与我的问题无关。)
如果我理解正确,RS(528, 514) 最多接收 8 个 64 位数据块,重新排序这些块,然后将它们分成两组,每组四个,每组分配 1 位开销。因此,最初的 512 位数据(64 字节数据)现在由 514 位表示。
RS_FEC 还会生成一个 14 位奇偶校验值以发送到链路上。
因此,原始的 512 位数据作为 528 位 RS_FEC 数据以 25 Gbps 的速度传输到链路上。每 66 个字节就有 2 个字节的开销。这也是 96.97% 的效率。
假设输入 RS_FEC 算法的数据已经以 64B/66B 编码,那么这会将链路效率从我最初计算的 96.97% 降低到 94.03% (0.9697 * 0.9697)
问题 (1) 输入 RS_FEC 算法的数据是否已经编码为 64B/66B,从而在应用 RS_FEC 后总效率下降到 94.03%?
(2) 有没有我没有考虑的管理费用?
(3) RS_FEC 控制传输的哪一部分?
例如,是否包括序言、SFD 和 FCS?
数据包间间隙期间的空闲情况如何?
(4) IEEE Standard for Ethernet Amendment 2 (IEEE Std 802.3by-2016) 表明“25GBASE-R RS-FEC 子层采用 Reed-Solomon 码 RS(528,514) 在 Galois Field GF(2^10) 上运行,其中符号大小为 10 位。” 我认为符号大小与我最初的问题无关。
该文件还说“应使用 91.5.2.7 中描述的编码器”。这是对 IEEE 以太网标准 (IEEE Std 802.3-2018) 文档第 6 节的参考,该文档实际上是关于 40 GbE 和 100 GbE。
如何将其转换为 25GBASE-R?
(5) 同一文档的第 5 节有一张图片显示 FEC 编码的以太网帧(图 65-7):S_FEC(5B) + PREAMBLE/SLD + FRAME+FCS + T_FEC(6B) + PARITY(14bits) + T_FEC( 6B)
这是否也适用于 25GBASE-R?如果是这样,那么我还有更多问题:
(6a) RS 算法是否只适用于 PREAMBLE/SLD + FRAME + FCS?
它是否包含包间间隙字符?
(6b) 如果以太网帧更长,每个 64 字节的输入数据块是否会有 S_FEC + T_FEC + PARITY + T_FEC?
或者,我们是否会在每个以太网帧中只看到一次 S_FEC 和最终的 T_FEC?
(6c) S_FEC 和 T_FEC 真的分别是 5 个字节和 6 个字节吗?如果是这样,那么这不是使 RS_FEC 算法效率极低吗?
在这些大小下,每 64 字节原始数据的开销将因此为 19 字节(5B + 2 位 + 6B + 14 位 + 6B)。这只是 77.11% ( 64 / (64 + 19) ) 的效率。
但是,如果对于帧的每个 64 字节块只有 T_FEC+PARITY 上,并且对于整个帧,在开始时只有一个 S_FEC,在结束时只有一个 T_FEC,效率会更高。
谢谢!汤姆
后续
据我了解,在转码过程中,代表原始 64b 数据块的 66b 块被输入 RS 算法,然后创建两个 257b 块,每个块有四个 66b 块加上一位开销。因此,我们有 514b 代表原始数据的 512b。这是 2b 的开销。
然后将其用于计算在 514b 块之后传输的 14b 奇偶校验值。因此,我们现在有 528b 代表原始数据的 512b。
因此链路的容量应该从 25e9 bps 减少到 24.24e9 bps (25e9 bps * 512/528)。
是否有任何其他 RS-FEC 开销位或字节发送到链路上?S_FEC和T_FEC怎么样,是插入以太网帧吗?
RS-FEC 是仅对帧进行操作,还是通过 RS-FEC 馈送通过链路的每个字符?
谢谢,汤姆