存储加速库ISA

ISA-L是一套在IA架构上加速算法执行的开源函数库,目的在于解决特定存储市场的计算需求。

ISA-L底层函数都是使用汇编语言代码编写的,通过使用高效的SIMD指令和专用指令,最大化地利用CPU的微架构来加速存储算法的计算过程。通过源码包中的C示例函数,ISA-L可以非常容易地理解并整合到客户的软件系统中。

ISA-L可以应用到多种操作系统中,它通过了在Linux、BSD及Windows Server上的测试,全面支持Intel 64位硬件平台。

ISA-L中的算法函数覆盖了数据保护、数据安全、数据完整性、数据压缩及数据加密,例如,纠删码用于磁盘阵列的同位检查,防止数据传输错误的CRC算法;从MD5、SHA1到SHA512等多种安全哈希算法。

数据保护:纠删码与磁盘阵列

磁盘阵列通常是指由多个磁盘组成的磁盘阵列,根据组成方式和数据排布的不同,可以分为多个磁盘阵列级别。不同的磁盘阵列级别分别可以提供更好的数据吞吐量、更高的数据冗余量,或在吞吐量、冗余量和可靠性之间做不同的折中。

ISA-L的磁盘阵列函数支持RAID5和RAID6,这两种磁盘阵列方式都是通过计算和存储冗余数据来保证一定程度的数据可靠性的。RAID5又被称为XOR方式,它是通过对所有存储数据条带做一次XOR操作,来得到一份冗余条带作为校验数据的;RAID6又被称为P+Q方式,它在RAID5 XOR的校验数据(该校验数据通常被称为P)基础上进一步计算出第二份校验数据(通常被称为Q)。通常Q的生成是各个存储数据条带乘以不同系数后求得的XOR结果。RAID5可以容忍一个磁盘的故障,RAID6可以容忍两个不同磁盘的故障。图1与图2分别为RAID5和RAID6的示例。

随着时间的推移,在很多应用中,RAID6也无法满足应用需求了。为了达到更高的数据冗余度,一个比较不错的选择是采用冗余度更大的编码与解码方式——纠删码。

纠删码可以看作RAID5和RAID6的超集,k+m纠删码如图3所示,其基本思想是将k块原始的数据元素通过一定的计算,得到m块冗余元素(校验块)。对于这k+m块的元素,当其中任意m块元素出错(包括原始数据和冗余数据)时,均可以通过对应的重构算法恢复出原来的k块数据。生成校验的过程被称为编码,恢复丢失数据块的过程被称为解码。

 

在分布式存储系统中,为了保证数据的可靠性,通常将一份数据复制为多份并将其存储到不同的节点上,如果一个节点失效,则可以从其他节点上获取数据。数据多节点复制的方式可以很好地提高数据可靠性,并且可以将读/写数据流很好地分离。但是,其带来的问题是存储利用率大为降低,因为在一般情况下每份数据都会存储3份。如何平衡存储空间和数据可靠性,成了分布式存储需要考虑的重要问题。纠删码可以平衡这两者的关系,在提高存储空间利用率的前提下,不会影响数据可靠性。因此,Ceph、Hadoop、Sheepdog等分布式存储系统都有采用纠删码。

ISA-L的纠删码不仅提供了用于编码与解码的计算函数,还提供了一系列的辅助功能函数和实例,如生成计算矩阵、求取解码逆矩阵等。

 

 数据安全:哈希

哈希算法是指任何可用于将任意大小的数据映射到固定长度的数据的算法。哈希算法主要用于数据去重、加密和数据一致性检验。数据去重和加密数据一致性检验的思路类似,就是对块数据产生一个短摘要,然后进行比对。短摘要如果相同,则表明数据相同。

加密的实现依赖于哈希算法的特性,通过哈希算法处理,可以很容易地将某些输入数据映射到给定的哈希值中,但是如果输入数据未知,则需要通过一致的哈希值重建输入数据,这会变得非常困难。很多Web服务通过哈希算法来对用户密码进行加密。这样即使密码服务器被攻击,也无法获得用户的密码。常用的哈希算法包括MD5、SHA1、SHA2、SHA3(ISA-L目前未支持)等。

ISA-L通过使用多缓冲区哈希技术(Multi-Buffer Hashing),充分利用了IA架构和执行管道固有的并行性,在单核上同时计算多个哈希值。然而,获得最佳性能需要软件来保持所有的“通道”(Lanes)都是满的,这就需要一次提交多个块进行哈希计算,这样单次计算的时间成本就可以一次计算多个哈希值。

假设我们需要并行处理的数据段数量为S,一个数据段的大小是B,生成的摘要长度为D。具体做法是用某个固定长度的数据填充缓冲区,使这个长度是B×S的倍数。现在我们可以用S路并行的SIMD高效处理这个缓冲区的数据,产生S个摘要。我们把所有摘要看作一个新的数据段,其大小是S×D,再对这个数据段进行新的哈希计算,直到生成长度为D的摘要为止。ISA-L并行多路哈希示例如图4所示。

多缓冲区哈希技术依赖于SIMD指令集和相关寄存器,对于不同的CPU平台、不同长度的哈希值要求,其速度有一定差异。相比传统的哈希算法,多缓冲区哈希技术最多可以有15倍以上的性能提升。

除了多缓冲区哈希技术,函数交织技术也为应用提速起到了关键的作用。函数交织(Function Stitching)是一种用于优化两种算法组合的技术。这两种算法同时进行,完成不同的功能,使用不同的处理单元,将操作以最大化计算资源精密地组合在一起。函数交织主要有以下3种。

· 两个函数都使用通用指令完成:效果比较好的是RC4-MD5的交织。由于RC4和MD5算法都严格要求数据流的顺序,这就限制了指令级并行度(Instruction Level Parallelism,ILP)。把这两个函数交织在一起,可以最大限度地允许并行度。

· SSE指令和通用指令交织:效果比较好的是AES-SHA1算法对。由于SHA1在SHA-NI推出之前使用的是标量通用指令,AES则从Westmere微架构开始就可以使用AES-NI扩展指令集计算了,在执行时使用不同的系统资源,这在一定程度上隐藏了部分算法的延迟,因此性能得到了提高。

· 两个函数都使用SSE指令:这种方式存在的一个问题是寄存器的限制。

数据完整性:循环冗余校验码

CRC是一种错误检测码,被广泛用于数字网络和存储设备中,其作用是检测原始数据在传输过程中的意外变化。数据块根据数据内容本身,通过一个多项式计算获得一个短的校验值。在数据接收端,会对这个数据块重新计算校验值,如果不匹配,则会对损坏的数据采取补救措施。

随着网络的爆炸式增长和人们对存储需求的急剧增加,CRC生成已经成为计算中一个不能被忽视的开销。CRC主要是为了避免通信信道上出现的错误而设计的,它对数据一致性提供了快速而合理的保证。但是,它并不适用于保护可能发生的人为故意更改数据的情况,如黑客攻击。

CRC是通过使用二进制除法(无须进位,使用XOR而不是减法)对字节数据流做除法而获得的余数。被除数是信息数据流的二进制数表示。除数是长度为n + 1的预定义二进制数(即生成多项式,n为CRC位数),通常由多项式系数表示。不同的生成多项式对应不同场景下的不同协议。

ISA-L CRC的实现,如图4-10所示,其计算的过程如下。

· 预先计算几个常量(通过生成多项式),然后对每个数据缓冲区重复应用这些常量来计算每个缓冲区的最高位部分。这样可以不断缩减缓冲区的大小。

· 使用无进位乘法指令PCLMULQDQ对两个64位数做无进位乘法。

· 使用CRC32指令使iSCSI协议中CRC的计算速度显著提高。

· 提供CRC函数和对复制操作的交织(Function Stitching)。

数据压缩:IGZIP

IGZIP是ISA-L提供的压缩库,它是基于Deflate标准与zlib、gzip兼容的高性能压缩库。在压缩和解压缩速度接近LZ4的情况下,IGZIP能够和zlib保持近似的压缩比。例如,在对基因数据的压缩上,对比zlib最快压缩速度的等级,IGZIP可以提供高达3倍的性能提升,并且能够保持与zlib几乎一样的压缩比。

Deflate标准(RFC1951)是一个被广泛使用的无损数据压缩标准。它的压缩数据格式由一系列块构成,对应输入数据的块,每一块通过LZ77算法和霍夫曼编码进行压缩,LZ77算法通过查找并替换重复的字符串来减小数据体积。一个压缩的块可以用静态或动态霍夫曼编码,静态表示它使用的是标准中的固定编码,动态霍夫曼编码则需要生成霍夫曼编码树。

性能的提升主要是通过对哈希、最长前缀匹配和霍夫曼编码流的优化实现的。通过对第一级数据缓存、数据结构尺寸、输入、输出数据流缓冲区的管理,实现了对字符串匹配更高效的管理。在对于未压缩数据的CRC计算中,通过使用PCLMUL(无进位乘法)指令来提高吞吐量。优化还包括尽可能去除不可预测的分支,使单个循环的分支数量不超过一个。在牺牲了一小部分压缩率的情况下,实现了更大的速度提升。

基于ISA-L的IntelDeflater和JavaDeflater性能比较如图4-11所示。人类基因组含有约30亿个DNA碱基对,碱基对是以氢键相结合的两个含氮碱基,以胸腺嘧啶(T)、腺嘌呤(A)、胞嘧啶(C)和鸟嘌呤(G)4种碱基排列成碱基序列。基因中含有大量冗余重复的信息,因此,基因数据是压缩的一个非常好的使用场景。基因分析工具GATK 在使用了IGZIP后,可以看到在压缩后体积变化不大的情况下,减少了50%左右的处理时间。

数据加密

ISA-L在数据加密上的加速主要依赖英特尔CPU中的AES-NI指令集,所以目前ISA-L中的数据加密算法都是对称加密算法AES,有CBC、GCM及XTS这算法的不同变体。由于在GCM算法中需要传递GMAC码做验证,ISA-L的GCM函数同时基于无进位乘法指令PCLMULQDQ加入了对GHASH的优化,从而进一步加快了GCM的运行速度。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ISA95和ISA88是国际标准化组织(ISO)的两个标准,它们都与制造执行系统(MES)有关,但关注的方面不同。 ISA88,即“制造执行系统-批生产部分”,是用于管理和控制批量生产过程的标准。它包括了一套定义和规范生产过程中各个阶段的模型和术语,如批次控制、设备控制、配方管理等。ISA88的目标是提供一种标准化的方法来管理和控制批量生产过程,以提高生产效率和质量,并确保生产符合规定的标准和要求。 ISA95,即“制造执行系统-与企业资源规划(ERP)集成部分”,是用于管理和集成企业的生产和业务系统的标准。它定义了一套用于数据交换和集成的模型和方法,包括业务到控制系统的层次结构、数据接口和通信协议等。ISA95的目标是促进信息在企业内部各个层次和不同系统之间的流动,实现生产计划和资源的协调,并提供实时的生产和业务数据,以便进行决策和优化。 ISA88和ISA95在MES领域有着密切的关系。ISA88关注的是生产过程的控制和管理,而ISA95关注的是不同系统之间的集成和数据交换。两个标准可以相互补充,使得生产过程更加协调和高效。ISA88提供了规范和指导,用于定义和管理生产过程中的各个阶段,而ISA95则提供了数据交换和集成的模型和方法,可以确保不同层次的系统可以共享和传递生产相关的数据,在生产运营过程中提供信息的可靠性和实时性。 综上所述,ISA88和ISA95都是与制造执行系统相关的标准,但侧重点不同。ISA88关注批量生产过程的控制和管理,ISA95关注不同系统之间的数据交换和集成。两者相辅相成,可以提高生产效率和质量,实现生产运营的优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值