前言

 Erasure Code(EC),即纠删码,是一种前向错误纠正技术(Forward Error Correction,FEC,说明见后附录)。目前很多用在分布式存储来提高存储的可靠性。相比于多副本技术而言,纠删码以最小的数据冗余度获得更高的数据可靠性,但是它的编码方式比较复杂。
  目前纠删码分为三类:RS(Reed-solomon)纠删码、阵列纠删码和LDPC低密度奇偶校验纠删码。在这里我们就不对各类纠删码的具体实现原理进行讲解了,网上有太多理论讲解的文章。
 本文对RS纠删码性能进行分析,分别从RS纠删码的编解码吞吐量、CPU占有、磁盘I/O方面进行分析。从范德蒙生成矩阵、柯西生成矩阵、柯西改进矩阵三类不断改进的方法改进基于RS的纠删码,改进的方式主要是简化生成矩阵从而降低矩阵求逆的代价,将RS的乘法进一步改为二进制与运算,加法改为异或运算。从实验的结果可以的出,编解码的效率都在不断提高;同时基于RS的纠删码,冗余块数是可以调整的,可以保证容错率。

性能分析运行环境

  • CPU: Intel® Xeon® CPU E5-2603 0 @ 1.80GHz
  • 内存:2049316 kB
  • Linux版本:25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 x86_64
    x86_64 x86_64 GNU/Linux

Reed_Sol_Van

 基于原始范德蒙矩阵的RS纠删码,生成矩阵由范德蒙矩阵构造,将原始数据与生成矩阵相乘生成原始数据m块与冗余数据k块,在磁盘上丢失的数据小于k的情况下,通过生成矩阵与原始数据加冗余数据恢复数据。在原始数据为1G的条件下,将原始数据划分为10份,每份100M作为原始数据块,同时将冗余块的大小设置为100M,当冗余块从1增加到6块下的情况下,对于不同的冗余值下的编码与解码吞吐率。为降低计算复杂度,转换到伽罗华域中进行运算,将域中w设置为8、用于读取数据块大小packsize=1024、缓存设置buffersize=500000,程序处理packsize,会调整packsize到一个适当的大小;

冗余块(100MB) 编码吞吐(MB/sec) 解码吞吐(MB/sec)
1 3899.650321 3535.019355
2 271.0552987 228.8843814
3 145.2733206 119.6510903
4 99.19522883 90.85481513
5 78.52107274 76.6628692
6 64.50890534 63.84572338

Total System I/O Statistics CPU: User% Sys% Wait% Idle% CPU%
Avg tps during an interval: 520 Avg 17.6 9.5 23.2 49.6 27.1
Max tps during an interval: 1,820 Max 75.1 45.1 82.8 99.8
Max tps interval time: 20:07:30 Max:Avg 4.3 4.7 3.6 2.0 3.5
Total number of Mbytes read: 22,718
Total number of Mbytes written: 39,303
Read/Write Ratio: 0.6


 从编解码的吞吐率中可以得出随着冗余数据的增加,编码与解码的吞吐都在降低,冗余数据从200M增加到600M,编码吞吐从271.1MB/sec降低到64.5MB/sec,解码吞吐从228.9 MB/sec降低到63.8MB/sec,说明当冗余过多时无论是编码还是解码都会对吞吐性能造成影响,但同时冗余数据的增加可以提高可靠性,冗余越多,可靠性越高。同时对于cpu与I/O的考察可以得出,当冗余数据增加时,cpu的压力逐渐变大,从1块冗余到6块冗余,cpu的平均压力从40%增加到60%,I/O的压力则较为稳定。同时编码对cpu与I/O的压力要大于解码时的压力。对于内存的消耗同时比较稳定,编码维持在400M,解码维持在200M。在GF(2w)域上,将范德蒙矩阵进行初等变换,将其前n行变成一个单位矩阵,就可以得到满足RS编码要求的生成矩阵。在GF(2w)域上,加法的定义实际上就是异或,而乘法则复杂的多,通常便准的RS编码的计算开销太大,无法适应存储系统对于计算效率的要求。基于范德蒙矩阵的RS码是最早的RS纠删码,在理论上,复杂的乘法运算与矩阵求逆导致了计算的复杂,该方法不适合用于大数据量的文件,从实验的结果也可以得出伴随冗余的增加,由于矩阵求逆与乘法的复杂,导致编解码吞吐的下降。

Reed_Sol_R6_Op

 一个磁盘冗余的RAID模型,是将假设有n个存储成员,把每个存储成员划分成若干个存储单元,其中n-1(D1…Di…Dn-1)个成员盘为数据,1个成员盘(p1)为校验。
D1 + D2 + D3 + … +Dn-1 = P1
Dx = P1 + D1 + D2 + D3 +… +Dn-1
 如果需要设计一种存储模型,实现在缺失2个成员的情况下,存储整体依然可以运算完整,最好的数学模型恐怕就是二元一次方程了,形如下面方程组:
aX+bY=c
dX+eY=f。 其中a/d != b/e
 上述方程式用到乘法与除法,同时,乘法与除法完全可逆,且满足交换律、结合律与分配率。还是在加法中遇到的困难,普通的数学乘法会导致校验容量的累加,所以不可取,基于伽罗华域的乘除法。
如果需要设计一种存储模型,实现在缺失2个成员的情况下,存储整体依然可以运算完整,最好的数学模型恐怕就是二元一次方程了,形如下面方程组:
aX+bY=c
dX+eY=f。 其中a/d != b/e
 上述方程式用到乘法与除法,同时,乘法与除法完全可逆,且满足交换律、结合律与分配率。还是在加法中遇到的困难,普通的数学乘法会导致校验容量的累加,所以不可取,基于伽罗华域的乘除法。

w值 编码吞吐(MB/sec) 解码吞吐(MB/sec) 冗余(100MB)
8 734.4797672 227.6765705 2
16 701.2332552 228.8843814 2
32 145.2733206 119.6510903 2

Total System I/O Statistics CPU: User% Sys% Wait% Idle% CPU%
Avg tps during an interval: 469 Avg 8.6 8.9 21.9 60.6 17.4
Max tps during an interval: 1,687 Max 56.8 48.0 77.4 100.0 69.4
Max tps interval time: 20:59:53 Max:Avg 6.6 5.4 3.5 1.6 4.0
Total number of Mbytes read: 12,782
Total number of Mbytes written: 19,468
Read/Write Ratio: 0.7


  RAID6编码生成2份冗余块,冗余量为200MB。而随着w值的增加,编解码吞吐都在下降,编码吞吐从734.4797672MB/sec降低到145.2733206MB/sec,解码吞吐从227.6765705 MB/sec降低到119.6510903 MB/sec。但较于基于范德蒙矩阵的矩阵生成方法确实编解码吞吐有较大提高。编解码cpu占有大概在40%左右,对于磁盘I/O吞吐也维持在600MB/sec上下,而内存则维持在200MB左右。RAID6是横式阵列码,计算过程全部采取异或方式,使得整体的性能有较好提高,同时冗余数据只能为2块,使得容错率降低。

Cauchy_Orig

 采用范德蒙矩阵作为编码矩阵的问题在于算法复杂度太高,其解码算法复杂度为 O(n^3)。采用目前的处理器技术,还是会影响IO的性能,增加IO延迟。因此,找到一种更加合理的编码矩阵,降低算法复杂度是 Erasure code 得以广泛应用的一个前提条件。用柯西矩阵来代替范德蒙矩阵。由于范德蒙矩阵求逆运算的复杂度为O(n3),而柯西矩阵求逆运算的复杂度仅为O(n2)。因此,采用柯西矩阵可以降低解码的运算复杂度。采用有限域二进制矩阵的方式来提高运算效率,直接将乘法转换成XOR逻辑运算,大大降低了运算复杂度。

冗余块(100MB) 编码吞吐(MB/sec) 解码吞吐(MB/sec)
1 1345.198704 885.7057786
2 581.868467 410.2337791
3 408.7502864 275.4253549
4 281.2763468 201.7137695
5 230.0346179 166.6484164
6 198.1768765 140.8307715

Total System I/O Statistics CPU: User% Sys% Wait% Idle% CPU%
Avg tps during an interval: 387 Avg 6.1 7.5 22.0 64.3
Max tps during an interval: 1,567 Max 29.9 56.1 81.4 100.0
Max tps interval time: 21:19:49 Max:Avg 4.9 7.5 3.7 1.6
Total number of Mbytes read: 25,816
Total number of Mbytes written: 41,745
Read/Write Ratio: 0.6


 柯西矩阵改进了范德蒙矩阵,同时可得出相似结论。随冗余块的增加,编解码吞吐都在下降,编码吞吐从1345.198704MB/sec降低到198.1768765MB/sec,解码吞吐从885.7057MB/sec降低到140.8307715 MB/sec。编码解码吞吐都在随冗余的增加而下降,但对于此种情况下的编解码吞吐量对比范德蒙矩阵生成矩阵要高出一个水平。编码cpu占有大概在50%左右,解码cpu占大概30%左右。对于磁盘I/O吞吐也维持在1300MB/sec上下,而内存则平均维持在300MB左右。利用柯西矩阵替代范德蒙矩阵,柯西矩阵求逆会改善范德蒙矩阵的求逆运算,使得生成矩阵与矩阵求逆变得简单,能提高编解码的吞吐。

Cauchy_Good

 从编解码过程来看,柯西编解码最大的运算量是乘法和加法运算。在范德蒙编码的时候,我们可以采用对数 / 反对数表的方法将乘法运算转换成了加法运算,并且在迦罗华域中,加法运算转换成了 XOR 运算。柯西编解码为了降低乘法复杂度,采用了有限域上的元素都可以使用二进制矩阵表示的原理,将乘法运算转换成了迦罗华域“与运算”和“ XOR 逻辑运算”,提高了编解码效率。从数学的角度来看,在迦罗华有限域中,任何一个GF(2^w)
域上的元素都可以映到 GF(2)二进制域,并且采用一个二进制矩阵的方式表示GF(2^w)
中的元在 GF(2w)域中的生成矩阵为K*(K+m),转换到GF(2)域中,变成(w*k)*(w*(k+m))二进制矩阵。采用域转换的目的是简化GF(2w)域中的乘法运算。在 GF(2)域中,乘法运算变成了逻辑与运算,加法运算变成了 XOR 运算,可以大大降低运算复杂度。和范德蒙编解码中提到的对数 / 反对数方法相比,这种方法不需要构建对数/反对数表,可以支持w为很大的 GF 域空间。

冗余块 编码吞吐(MB/sec) 解码吞吐(MB/sec)
1 3544.594083 2095.680832、
2 1257.162896 744.9919618
3 545.3146513 275.6080565
4 359.1519832 215.2569802
5 294.6284845 165.0059605
6 238.4650875 142.2269388

Total System I/O Statistics CPU: User% Sys% Wait% Idle%
Avg tps during an interval: 389 Avg 5.3 7.1 22.4 65.3
Max tps during an interval: 1,593 Max 9.8 33.8 84.0 100.0
Max tps interval time: 22:08:47 Max:Avg 5.6 4.8 3.8 1.5
Total number of Mbytes read: 25,833
Total number of Mbytes written: 42,108
Read/Write Ratio: 0.6

         
 改进后的柯西矩阵改进原始矩阵,同时可得出相似结论。随冗余块的增加,编解码吞吐都在下降,编码吞吐从3544.594083MB/sec降低到238.4650875MB/sec,解码吞吐从2095.680832MB/sec降低到142.2269388MB/sec。编码解码吞吐都在随冗余的增加而下降,但对于此种情况下的编解码吞吐量对比原始矩阵生成矩阵要高出一个水平。但较于基于范德蒙矩阵的矩阵生成方法确实编解码吞吐有较大提高。编码cpu占有平均处于40%左右,解码cpu占有平均处于30%左右。对于磁盘I/O吞吐平均维持在1500MB/sec上下,而内存则维持在200MB左右。与柯西未改进的算法在编解码吞吐与cpu占有上都有一定性能提高,吞吐量在增加,cpu占有降低。在 GF ( 2^w )域中的生成矩阵为 K* ( K+m ),转换到 GF ( 2 )域中,变成了(wk) * (w(k+m)) 二进制矩阵。采用域转换的目的是简化 GF ( 2^w )域中的乘法运算。在 GF ( 2 )域中,乘法运算变成了逻辑与运算,加法运算变成了 XOR 运算,可以大大降低运算复杂度。

RS纠删码性能分析实战相关推荐

  1. RS 纠删码为什么可以提高分布式存储可靠性?| 原力计划

    作者 | .NY&XX 来源 | CSDN博客专家,责编 | 夕颜 封图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 前言 Erasure Code(EC),即 ...

  2. fabric通过java怎么整合RS纠删码的实现

    fabric是一个分布式账本平台,它提供了一种简单的方式来构建区块链应用程序.如果想要在fabric中使用RS纠删码,可以按照以下步骤进行整合: 首先,需要在fabric中定义一个新的链码(chain ...

  3. go分布式存储,rs纠删码

    rs.txt 内容 AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDSDG 分片和解码 ...

  4. 全网最新最全的 HDFS 文件纠删码技术分析

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  5. Hadoop 3.0 纠删码技术分析(Erasure Coding)

    背景 随着大数据技术的发展,HDFS作为Hadoop的核心模块之一得到了广泛的应用.为了数据的可靠性,HDFS通过多副本机制来保证.在HDFS中的每一份数据都有两个副本,1TB的原始数据需要占用3TB ...

  6. RS(纠删码)技术浅析及Python实现

    前言 在Ceph和RAID存储领域,RS纠删码扮演着重要的角色,纠删码是经典的时间换空间的案例,通过更多的CPU计算,降低低频存储数据的存储空间占用. 纠删码原理 纠删码基于范德蒙德矩阵实现,核心公式 ...

  7. 纠删码在实时视频流中的应用丨Dev for Dev 专栏

    本文为「Dev for Dev 专栏」系列内容,作者为声网网络体验团队王瑞. 01 背景 在实时音视频通话中,音视频质量受网络丢包影响较大,特别是对于视频. 为什么视频对丢包更敏感呢?通常来说,音频的 ...

  8. minio存储之纠删码(Erasure Code)

    纠删码的原理介绍可以参考: https://www.jianshu.com/p/4abf65ad03af 一般上我们如果要保证数据高可用,主流的有两种策略: 多副本 纠删码 副本(Replicatio ...

  9. 「Ceph源码分析」纠删码解码

    存储系统:ceph-14.2.22 操作系统:ubuntu-server-18.04 总体框架 源码分析 ECBackend::objects_read_and_reconstruct [ 文件路径 ...

  10. Hadoop 3.0 Erasure Coding 纠删码功能预分析

    前言 HDFS也可以支持Erasure Coding功能了,将会在Hadoop 3.0中发布,可以凭图为证: 在HDFS-7285中,实现了这个新功能.鉴于此功能还远没有到发布的阶段,可能后面此块相关 ...

最新文章

  1. linux 格式化 dvd,linux 服务器分区格式化相关知识 -mount
  2. Android selector 使用
  3. SAP物料类型与物料库存信息在哪个表中
  4. BAPI FOR MD61,MD62,MD63
  5. 2020年下半年信息系统项目管理师章节占分比
  6. 银行业务队列简单模拟 (25 分)c语言c++
  7. python-对向-getattribute与getattr
  8. 串口 能 按位传输吗_、 迪文串口屏TTL与主控板RS232电平信号转换方案
  9. linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案
  10. 201671010135 《面向对象程序设计课程学习进度条》
  11. python 图像刚性变换_Python-OpenCV 19. 图像处理形态学变换
  12. 可以代替专业CAD的《燕秀工具箱》V2.81版-模具设计外挂
  13. 综合布线双绞线的线序标准568A与568B
  14. 为什么固态硬盘比机械硬盘读取速度快?
  15. Python | pandas 计算每行的增长率与累计增长率
  16. VOT2016配置 VOT tookit
  17. Jshop小程序商城系统说明
  18. 208计算机领域,中医药大学-计算机基础208版-1-7次作业.doc
  19. A.Mio visits ACGN Exhibition
  20. 《Linux命令速查手册》笔记

热门文章

  1. C在mac上用不了malloc.h头文件的解决方法
  2. 机票预订系统活动图_机票预订系统UML讲解
  3. 前端常用的JavaScript 库和框架(一)
  4. 数据库学生信息管理系统
  5. java显示一个钟表_java实现时钟效果
  6. layer.prompt输入框改成laydate时间控件
  7. matlab画全连接网络,无标度网络及MATLAB建模.pdf
  8. 异步社区两周年 - 技术图书免费送(活动已结束)
  9. 【图像融合】可见光与红外图像融合方法和评价指标
  10. tomcat8.0安装及配置