用于执行独立磁盘冗余阵列(raid)操作的方法和装置的制作方法

xiaoxiao2020-7-22  5

专利名称:用于执行独立磁盘冗余阵列(raid)操作的方法和装置的制作方法
技术领域
本公开涉及独立磁盘冗余阵列(RAID),特别地,涉及6级RAID。
背景技术
出于可靠性、容量或性能的目的,独立磁盘冗余阵列(RAID)将多个物理硬盘驱动器组合成逻辑驱动器。因此,操作系统看到的是单个逻辑驱动器而不是多个物理硬盘驱动器。如本领域技术人员所熟知的,有很多称为RAID级的标准方法用来在RAID系统的这些物理硬盘驱动器上分布数据。例如,在0级RAID系统中,通过将数据分成多个块并将每个块写入独立的硬盘驱动器来在硬盘驱动器物理阵列上将数据条带化。通过将负载分担到多个硬盘驱动器中,从而提高了输入/输出(I/O)性能。尽管O级RAID提高了 I/O性能,但它不提供冗余度,因为只要一个硬盘驱动器发生故障,则所有数据都会丢失。5级RAID系统通过在至少三个硬盘驱动器上将数据和奇偶校验信息条带化来提供高级冗余度。在发生故障的情况下,将数据条带化与分布式奇偶校验相结合来提供恢复路径。6级RAID (RAID-6)系统通过允许从两个盘故障中恢复,提供了比5级RAID系统更高级的冗余度。在6级RAID系统中,为数据生成称为P校验子(syndrome)和Q校验子的两个校验子,并将它们存储在RAID系统的硬盘驱动器上。P校验子是通过计算条带(stripe)(多个数据块(多个条),P校验子块和Q校验子块)中数据的奇偶校验信息而生成的。Q校验子的生成需要伽罗瓦域(Galois Field)乘法,并且如果磁盘驱动器发生故障,则会很复杂。在伽罗瓦域(有限域)GFO8)中的计算通过约简多项式x8+x4+x3+x+l来定义(也就是,11B(16进制表示法))。在磁盘恢复操作期间执行的恢复数据和/或P和/或Q校验子的重新生成方案, 需要伽罗瓦域乘法及逆操作。例如,在有η个数据磁盘DO、Dl、D2、......Dn-I的RAID阵列中(n ( 255),需要
两个量,即奇偶校验(P)和里德-所罗门码⑴),来从两个磁盘的丢失中恢复。P和Q的定义是P = Do+Di+D^. . . +Dn^1 Q = g° · Do+g1 · D^g2 · D2+. · · +g11—1 · Dlri其中g = {02}是伽罗瓦域(有限域)GFQ8)中的一个元素,‘ + ’和‘ ,是该域上的操作。RAID-6系统的计算瓶颈在于Q的计算成本。困难来自于这样的事实传统处理器 (中央处理单元(CPU))对于在伽罗瓦域(有限域)GW28)中的计算具有很差的性能。因此,典型地,利用基于表查找的算法来增强性能。使用表查找导致固有的缓慢串行处理。


通过参考附图,随着以下详细描述的进行,要求保护的主题的实施例的特征将变得显而易见,在附图中,相同的数字指代相同的部分,其中图1是说明RAID-6阵列的实施例的框图,其中示出了多个条带,每个条带包括在硬盘阵列上条带化的数据块(条)、P和Q校验子。图2是包括用于在通用处理器中执行AES加密和解密的指令的系统的框图。图3是图1中示出的处理器的实施例的框图;图4是依据本发明的原理进行伽罗瓦域乘法的方法实施例的流程图。图5A-5C说明了压缩混洗字节(PSHUFB)指令的使用;图6A-6C是允许在多个16字节数据块上并发地进行伽罗瓦域乘法的代码示例。尽管将参照要求保护的主题的说明性实施例继续进行以下详细描述,但是其许多替代、修改和变型对本领域技术人员将是显而易见的。因此,意图广泛地看待要求保护的主题,并且要求保护的主题仅如所附权利要求那样进行限定。
具体实施例方式图1是示出RAID-6阵列100的实施例的框图,其中示出多个条带,每个条带包括在硬盘阵列150上条带化的数据块(条)与P和Q校验子。在所示实施例中,RAID阵列100 具有五个硬盘150。通过利用块级条带化来向RAID-6阵列写入数据,其中P和Q校验子以轮替(round robin)方式分布在成员硬盘上。诸如分割成块的文件的连续数据可分布在条带(例如,水平条带0)上,其中块之一存储在三个数据盘150上的数据块102、104、106中。 在一个实施例中,一个条带中的每个块中有512个字节。为水平条带0中的数据块102、104、106计算的P和Q校验子存储在条带0中相应的P块130和Q块132中。P和Q校验子块存储在每个条带的不同硬盘150上。P校验子可通过执行“异或”O(OR)操作来生成。XOR是对两个操作数的逻辑运算, 如果其中只有一个操作数具有逻辑值‘1’,则它产生逻辑值‘1’。例如,具有值‘11001010’ 的第一操作数和具有值‘10000011,的第二操作数的XOR提供具有值‘01001001,的结果。 如果存储第一操作数的硬盘驱动器发生故障,则可通过对第二操作数和结果执行XOR操作来恢复第一操作数。P校验子是利用 (XOR)操作在条带上计算的数据(D)的简单奇偶校验。在具有η个数据盘的系统中,P校验子的生成由下式1表示P=D0 D1 D2...... D W(Si)Q校验子的计算需要利用伽罗瓦域多项式(g)进行乘法(·)。以非常高的性能对 8位(1字节)伽罗瓦域多项式执行算术运算。多项式是只利用加法、减法、乘法和非负整数指数来组合有限数量的常量和变量的表达式。一个本原多项式是x8+x4+X3+x2+l。对多项式的伽罗瓦域(GF)操作又称为GFQ8)算术。在具有η个数据盘的系统中,Q校验子的生成由下式2表示Q=g0.D0 θ g^Di g2.D2...... g^^Dn.!(式 2)在条带基础上执行按字节的伽罗瓦域操作,其中块中的每个字节在计算上独立于其它字节。按字节的伽罗瓦域操作可以适应多达255 (28-1)个数据盘。
生成Q校验子的性能可以通过将Q用其赫诺(Horner)形式表示来提高,如下式3 表不Q=((- · .Dn.,.. .)'g D2)'g Di) g D0 ( ζ 3)因此,用两种操作来计算Q (1) XOR (十),以及(2)乘以 g = {02} ( ·)与如式2所示的计算相比,式3的计算不需要在GF256中的通用乘法。替换地是乘以g{02}。对于单字节,可以通过将值左移一位来实现乘以g= {02}。然后对相乘的结果和基于结果中的最高有效位的状态的另一个值进行条件异或O(OR)操作。为了一次并行地计算四个字节,可以通过将该四个字节中存储的值左移一位来执行乘以102},然后进行四个条件XOR操作,每个字节一个操作,如下所示uint32_t ν, νν ;νν = (ν << l)&0xfefefefe ;νν“ = ((v&0x00000080) ? OxOOOOOOld:0) +((v&0x00008000) ? OxOOOOldOO:0)+((v&0x00800000) ? OxOOldOOOO:0)+((v&0x80000000) ? 0xld000000:0);“&0xfefefefe ”是用于避免不期望的进位的掩码。然而,条件XOR操作的效率并不太高。通过并行地对8字节而非4字节进行操作,并且基于在8个字节中的每一个字节中的最高有效位(MSB)使用掩码,则可能缩短计算时间。RAID-6算法的Q校验子的计算采用与用于高级加密标准(AES)的GFQ8)的表示相同的表示,AES由美国国家标准与技术研究院(NIST)公布为联邦信息处理标准(FIPS) 197。 AES是可以加密和解密信息的对称分组密码。在一个实施例中,根据本发明的原理,利用GFQ8)的AES指令被用来进行伽罗瓦域乘法操作,以计算RAID 6需要的Q校验子。图2是包括在通用处理器中进行AES加密和解密的指令的系统200的框图。该系统200包括处理器201、存储器控制中心(MCH)或(图形存储器控制中心(GMCH))202,以及输入/输出(1/0)控制中心(ICH) 204。MCH 202包括控制在处理器201和存储器208之间的通信的存储器控制器206。处理器201和MCH 202通过系统总线216进行通信。处理器201可以是诸如下列的多个处理器中的任意一种单核Intel Pentium IV 处理器、单核htel Celeron处理器、Intel XScale处理器,或诸如Intel Pentium D、Intel Xeon 处理器、或Intel Core Duo处理器的多核处理器,或任何其它类型的处理器。存储器208可以是动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、同步动态随机存储存储器(SDRAM)、双倍数据速率2 (DDR2) RAM或Rambus动态随机存取存储器 (RDRAM)或任何其他类型存储器。ICH 204可以利用诸如直接媒体接口(DMI)的高速芯片到芯片互连214耦合至 MCH 202。DMI支持经由两个单向线道(lane)的2千兆位/秒的并发传输速率。ICH 204可包括存储1/0控制器210,用来控制与诸如独立磁盘冗余阵列
6(RAID) 100(图1)的至少一个存储设备212的通信。ICH 204可以利用串行存储协议通过存储协议互连218与存储设备212通信。串行存储协议的例子是,串行连接小型计算机系统接口(SAQ或串行高级技术附件(SATA)。处理器201包括进行AES加密和解密操作的AES功能203。AES功能203可被用于对存储在存储器208和/或存储在存储设备212中的信息进行加密或解密。加密(密码)利用秘密密钥(密钥)来进行一系列的变换,以将被称为“明文”的可理解的数据变换为被称为“密文”的不可理解的形式。密码中的变换包括(1)用异或 (XOR)操作向状态(state) ( 二维字节阵列)添加轮密钥(round key)(得自于密钥的值); (2)用非线性字节替换表(S盒(S-box))对状态进行处理;(3)将状态的最后三行循环移位不同的偏移量;以及(4)取得状态所有的列,将它们的数据(彼此无关)进行混合以生成新的列,这可被称为列混合变换。由随后描述的单个AES指令进行上述的四个变换。在列混合变换中,将状态的所有列中的数据(彼此无关)进行混合,以生成新的列。列混合是对1 位(16字节)的输入的虹4的矩阵表示的列进行1 位一128位的变换操作。该变换将每个列都视为AES伽罗瓦域256上的有系数的三次多项式。将状态的虹4 矩阵表示的状态的每一列乘以多项式a(x) = {03}13+{01^2+{01^+{02},并约简模14+1。 该1 位到1 位的列混合变换是16字节到16字节的变换。例如,该16字节(状态)可以被表示为[P,O,n, m, i,k,j,i,h,g,f,e, d,c, b,a],其中a是最低有效字节,该状态有四个列,每个列是一个32位的双字G字节)。列混合变换是基于GF (28)算术(模x8+x4+x3+x+l)的矩阵乘法。因此,如下文所讨论的,伽罗瓦域乘法功能250可以使用该列混合变换来计算6级RAID系统的Q校验子。为了使用该列混合变换,列混合变换从AES指令中被隔离出。对状态的四个列分别地进行列混合变换。这四个列是(1) [ρ,ο, n, m](2)[i,k,j,i](3) [h,g, f, e](4) [d,c,b,a]。对[p,o,n,m,i,k,j,i,h,g,f,e,d,c,b,a]进行列混合变换的结果是[p,,o,, n,,m,,i,,k,,j,,i,,h,,g,,f,,e,,d,,C,,b,,a,],如下表 1 所示。对列(1)的变换a,= ({02} · a)+ ({03} ‘ b)+c+d ;b,= a+({02} · b) + ({03} · c)+d ;c,= a+b+({02} · c) + ({03} · d);d,= ({03} · a) +b+c+({02} · d)对列⑵的变换e,= ({02} · e) + ({03} · f) +g+h ;f,= e+({02} · f) + ({03} · g) +h ;g,= e+f+({02} · g) + ({03} · h);h,= ({03} · e)+f+g+({02} · h)对列⑶的变换
i,= ({02} · i) + ({03} · j)+k+l ;j,= i+({02} · j) + ({03} · k)+l ;k,= i+j+({02} · k) + ({03} · 1);1,= ({03} · i)+j+k+({02} · 1)对列(41的变换m,= ({02} .m) + ({03} ·η)+ο+ρ;η,= m+({02} · η)+ ({03} · o)+p ;ο,= m+n+({02} · ο)+ ({03} · ρ);ρ,= ({03} · m)+n+o+({02} · ρ)表 1如上面的表1所示,对所述四列中的每一个进行相同的操作。因此,假设操作对每一个双字(列)是类似的,可以用简写形式来描述对四个列中的一列(例如,列4,最低有效双字)进行的列混合变换。对于列4,双字(dword) = [d,c, b,a],简写的列混合变换示出如下d, c, b, a ^ 3a+b+c+2d, a+b+2c+3d, a+2b+3c+d, 2a+3b+c+d图3是图2所示的处理器201的实施例的框图。处理器201包括取指和解码单元 306,用于对从1级(Li)指令高速缓存302接收的处理器指令进行解码。用来执行处理器指令的数据可以存储在寄存器文件308中。在一个实施例中,寄存器文件308包括多个由 AES指令使用的1 位寄存器,用于存储由AES指令使用的数据。在一个实施例中,寄存器文件308是类似于htel Pentium MMX处理器中提供的 128位MMX寄存器的1 位寄存器组,所述htel Pentium MMX处理器具有流(单指令多数据(SIMD))扩展(SSE)指令集。在SIMD处理器中,以1 位块来处理数据,其中一次加载一个128位块。取指和解码单元306从Ll指令高速缓存302中取得宏指令,对该宏指令进行解码并将其分解成称作微操作(μop)的简单操作,这些简单操作可以存储在微代码只读存储器(R0M)314中。被流水线化的执行单元310调度并执行所述微操作。在示出的该实施例中,执行单元310中的AES功能203包括用于AES指令的微操作。所述AES指令被完全流水线化,从而,在有数据准备好要被处理时,处理器(CPU)可以将指令分派在每一周期中。引退单元312将AES指令的执行结果写入到寄存器或存储器中。AES指令使用的轮密钥316 可存储在Ll数据高速缓存304中,并加载到执行单元310,以供微操作用来执行任意一个 AES指令。在取指和解码单元306解码AES指令后,执行单元310对AES指令的执行包括进行与AES指令相关联的微操作,所述微操作可以存储在微代码ROM 314中。AES指令集包括独立的AES指令,用于进行加密轮、解密轮、加密最后轮和解密最后轮。在一个实施例中,每个AES指令都有唯一的操作码(opcode)。所述AES指令集包括如下表2所示的四个AES指令(加密、解密、加密最后轮、解密最后轮)。AES指令集中的AES指令包括进行加密和解密轮操作的单轮操作,其用于除最后一轮以外的所有轮。AESENC xmmsrcdst xmm
输入数据(=目标),轮密钥输出通过使用轮密钥的AES轮进行变换后的数据变换序列Tmp =行移位(数据)(Shift Rows (data));Tmp =字节替换(Tmp) (Substitute Bytes(Tmp));Tmp =列混合(Tmp) (Mix Columns(Tmp));输出=添加轮密钥(Tmp,轮密钥)(AddRound Key (Tmp, round key))AESENCLAST xmmsrcdst xmm输入数据(=目标),轮密钥输出通过使用轮密钥的AES最后轮进行变换后的数据变换序列Tmp =行移位(数据)(Shift Rows (data));Tmp =字节替换(Tmp) (Substitute Bytes(Tmp));输出=添加轮密钥(Tmp,轮密钥)(AddRound Key (Tmp, round key))AESDEC xmmsrcdst xmm输入数据(=目标),轮密钥输出通过使用轮密钥的AES轮进行变换后的数据变换序列Tmp =逆行移位(数据)(Inverse ShiftRows (data));Tmp =逆字节替换(Tmp) (InverseSubstitute Bytes(Tmp));Tmp =逆列混合(Tmp) (Inverse MixColumns(Tmp));输出=添加轮密钥(Tmp,轮密钥)(Add Round Key (Tmp, round key))AESDECLAST xmmsrcdst xmm输入数据(=目标),轮密钥输出通过使用轮密钥的AES最后轮进行变换后的数据变换序列
Tmp =逆行移位(数据)(Inverse ShiftRows (data));Tmp =逆字节替换(Tmp) (InverseSubstitute Bytes(Tmp));输出=添加轮密钥(Tmp,轮密钥)(Add Round Key(Tmp, round key))表 2例如,表2中的AESENC单轮指令中,输入数据存储在1 位寄存器(xmmsrcdst) 中,并且轮密钥存储在另一 1 位寄存器(xmm)中。该指令对存储于1 位xmmsrcdst寄存器中的输入数据(源)进行一系列的针对一个AES加密轮的四个变换,并用该轮操作的执行结果重写所述1 位xmmsrcdst寄存器中存储的输入数据。因此,xmmsrcdst首先存储输入数据,之后存储所述AES轮操作的结果。如表2所示,采用FIPS公布197的术语描述了相应的128位一128位变换序列。 加密轮的变换序列包括(I)AddRoundKey变换用异或O(OR)操作向状态(二维1 位字节阵列)添加轮密钥(round key)(得自于密钥的值)。AddRoundKey是(1 位,1 位)一1 位的变换, 其定义是它的两个变量的按位异或(XCM)。在AES流中,所述变量是所述状态和所述轮密钥。(2) SubBytes变换用非线性字节替换表(S盒)对所述状态进行处理。SubBytes 是16字节到16字节(按字节)的变换,该变换被定义为将S盒变换应用于输入的16字节中的每一个字节。所述S盒变换可通过查找表来表示如下该查找表的输入是字节B [7 0], 其中χ和y表示低和高半字节χ[3:0] = B[7:4],y [3:0] = B[3:0]。在该表中将输出字节编码为16进制(H)表示的两数位的数。例如,输入85H产生97H。(3)ShiftRows变换将所述状态的最后三行以不同的偏移量循环移位。 ShiftRows 是以下按字节的置换(15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0) — (11,6, 1,12,7,2,13,8,3,14,9,4,15,10,5,0)。该变换被视为对状态的4x4矩阵表示的操作。所述4x4矩阵的第一行不变。第二行向左旋转一个字节位置。第三行向左旋转2个字节位置。 第四行向左旋转3个字节位置。(4)列混合变换将所述状态中所有的列中的数据进行混合(彼此独立),以生成新的列。列混合是对所述1 位(16字节)输入的4x4矩阵表示的列进行操作的1 位 —1 位变换。所述变换将每一列视为在AES伽罗瓦域256中有系数的三次多项式。状态的4x4矩阵表示中的每一列乘以多项式a(x) = {03}χ3+{01}χ2+{01}χ+{02},并且约简模 x4+l。如表2中所示,AES最后加密轮指令AESENCLAST不执行列混合变换。解密(逆密码)是用密钥进行一系列变换,以将“密文”块变换为相同大小的“明文”块。在逆密码中的变换是密码中的逆变换。如上述表2所示,可由单个的AES解密轮指令AESDEC执行上述解密轮的变换序列,而由单个的AES最后解密轮指令AESDECCLAST来执行最后解密轮的变换序列。包括AES加密和解密指令的指令组合可以用来获得作为隔离出的变换的AES算法的子步骤(变换)。所述隔离出的变换包括加密AES指令(AESENC,AESENCLAST)使用的行移位、字节替换和列混合变换。本发明的一个实施例采用通过使用AES加密和解密指令组成的指令组合获得的隔离出的AES列混合变换,来计算6级RAID的Q校验子。图4是依据本发明的原理进行伽罗瓦域(GF)乘法的方法实施例的流程图。AESENC指令和AESDEC指令都采用列混合变换的微操作。如表2所示,AESDEC指令包括AESENC指令变换的逆变换。因此,可以通过执行以下指令序列来隔离出列混合变换的微操作(1)轮密钥设置为0的AESENC指令,接着是( 轮密钥设置为0的AESDECLAST 指令。参考每一个AES指令的变换序列,该指令序列隔离出列混合变换,这是因为 AddRoimdKey微操作执行无操作(NOP),并且其余微操作(行移位、字节替换)通过进行逆微操作(逆行移位、逆字节替换)进行兑换。因此,AES指令(AESENC,AESDECLAST)的序列的执行结果是隔离出(状态)的列混合变换,如下所示Y =逆列混合(逆字节替换(逆行移位(字节替换(行移位(状态))))按照本发明的一个实施例,被隔离出的列混合变换用以在AES伽罗瓦域用{02}乘以 16 字节。将描述 16 字节(ρ,ο,n, m,1,k,j,i,h,g,f,e,d,c,b,a)中的 4(d,c,b,a) 乘以{02}的实施例。在这个实施例中,用约简多项式Oxllb定义所述有限域。在其它实施例中,域表示的选择是可以配置的。参考图4,在框400,输入数据(d,c, b,a)的奇数字节位置被设置为0,即,b = d =0,从而得到(0,c,0,a)。在一个实施例中,用压缩混洗字节(PSHUFB)指令将奇数字节位置设置为0。图5A-5C说明了压缩混洗字节(PSHUFB)指令的使用。所述PSHUFB指令根据存储于第二操作数的混洗控制掩码对第一操作数中的字节进行混洗(进行字节的原地混洗)。 如果设置了混洗控制掩码中的字节的最高有效位,则在第一操作数中对应的字节中写入0。所述PSHUFB指令有可被称为两个字节寄存器A和B的两个1 位输入。所述 PSHUFB指令采用两个128位的字节寄存器A = [a15a14a13. . . aj和B = [b15b14b13. . . bj,用 [ab15ab14ab13. · · ab0]替代寄存器Α。如果h的最高位被设置为1,则该结果的第i个条目是 0。参考图5A,框500说明了 1 位第一寄存器较低的4字节的初始内容,框502说明了在用混洗控制掩码'ff02ff00h'执行了 PSHUFB指令后第一寄存器较低的4字节的内容。如图所示,因为MSB被设置为’ 1’,所以两个奇数字节(字节1和字节幻被设置为’ 0’。再返回图4,在将奇数字节设置为’ 0’后,通过采用第一寄存器的内容执行指令序列(AESDECLAST,接着是AESENC),来进行列混合变换。该指令序列执行以下变换d, c, b, a ^ 3a+b+c+2d, a+b+2c+3d, a+2b+3c+d, 2a+3b+c+d当d和b都是0时,对'd = 0,c,b = 0,a'的指令序列的结果是3a+c, a+2c, a+3c, 2a+c接下来,用压缩混洗字节(PSHUFB)指令将上述结果(3a+c,a+2c,a+3c,2a+c)中的奇数字节设置为0,将第二 PSHUFB指令的结果(0,a+2c,0,2a+c)存储在第一寄存器中。
在框404,输入数据(d,c, b,a)的偶数字节位置被设置为0,SP,a = c = 0,从而得到(d,0,b,0)。在一个实施例中,用压缩混洗字节(PSHUFB)指令将偶数字节位置设置为 O0参考图5B,502说明了第一寄存器的初始内容,504说明了在用混洗控制掩码'03ff01ffh'执行PSHUFB指令后第一寄存器的内容。如图所示,所有的偶数字节位置都被设置为’ 0’。再返回到图4,在将偶数字节位置设置为’ 0’后,通过采用第一寄存器的内容执行指令序列(AESDECLAST,接着是AESENC),来进行列混合变换。该指令序列执行以下变换d, c, b, a ^ 3a+b+c+2d, a+b+2c+3d, a+2b+3c+d, 2a+3b+c+d当(和£1都是0时,对'd,c = 0,b,a = 0'的指令序列的结果是b+2d,b+3d, 2b+d,3b+d接下来,用压缩混洗字节(PSHUFB)指令将上述结果(b+2d,b+3d,2b+d, 3b+d)中的偶数字节设置为0,将第四PSHUFB指令的结果(b+2d,0,2b+d,0)存储在第二寄存器中。在框408,将存储于第一寄存器的结果(框402)和存储于第二寄存器的结果(框 406)进行M)R,以提供两个列混合变换的结果(b+2d,a+2C,2b+dJa+C)。在一个实施例中, 使用PXOR指令对结果进行M)R。所述PXOR指令对两个寄存器中的内容进行XOR操作,并将结果存储在其中之一的寄存器中。在框410,根据掩码用压缩混洗字节(PSHUFB)指令对输入数据(d,c,b,a)中的字节进行混洗。参考图5C,506说明了第三寄存器的初始内容,508说明了在用混洗控制掩码'000302h'执行PSHUFB指令后第三寄存器的内容。如图所示,输入数据(d,c,b,a)的字节被混洗,以提供结果(b,a, d,c) 510,该结果被存储在第三寄存器中。继续图4,在框412,对寄存器3的内容(b+2d,b+3d,2b+d,3b+d)和寄存器2的内容(b,a,d,c)进行XOR操作,以提供乘法操作的结果,即,(2d,2c,2b,2a)。已经描述了执行在4字节数据块上乘以g= {02}的实施例。下面的表4说明了对一个16字节数据块进行操作的功能正确未优化的实施例的代码示例(汇编程序)。
data— do 07b5b54657374566563746f725d53475dh; zero_ do OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOh; maskl do 0ff0eff0cffDaff08ffD6ff04fR)2ff00h mask2 do 00fH0dff0bff09ff07ff05ff03ff01ffh mask3 do 00d0c0f0e09080b0a0504070601000302h movdqu xmm4, OWORD PTR data_ movdqu xmm 1,xmm3PSHUFB xmml, maskl
AESDECLAST xmml, zero— ;轮密钥=0 的 AES 指令 AESENC xmml, zero_
PSHUFB xmml, maskl;再次通过maskl进行传递
movdqu xmml, xmm4
PSHUFB xmm2, mask2
AESDECLAST xmm2, zero_
AESENC xmm2, zero—
PSHUFB xmm2, mask2
PXOR xmm2, xmml; xmm2 = xmml xor xmm2
PSHUFB xmm3, mask3 ;用 mask3 混洗 xmmO (原始数据) PXOR xmm3, xmm2; xmmO = xmmO xor xmm2
;xmm3保持结果表 4如表4中的代码示例所示,采用11个指令(5个PSHUFB指令,2个PXOR指令,2个 AESENC 指令,2 个 AESDECLAST 指令)、3 个掩码(maskl,mas2 (2, mask3)和三个 xmm 寄存器 (xmml, xmm2, xmm3)对_data的16字节进行伽罗瓦域乘法。例如,对输入数据‘e59827Ief 11141b8ae52b4e0305dbfd4‘进行伽罗瓦域乘法的结果是输出数据‘dl2b4e3cf922826b47a473db60ba65b3'。在上述代码示例中,如果顺序处理上述指令,因为AES指令的时延导致吞吐量很慢。例如,在一个实施例中,PSHUFB和PXOR指令的时延是1个周期,AES指令的时延是6个周期。因此,如果顺序处理AES指令对,会有12个周期的时延。在其它实施例中,可以通过并发地处理输入数据的多个16字节来缩短整个时延,其中指令被交错,以使得AES指令对中的第二 AES指令在该AES指令对中的第一 AES指令被调度后6个周期被调度。可以改变在表4中示出的代码示例的指令顺序,如图6A-6C中所示示例所说明的。这种指令顺序允许并发地处理数个16字节数据块,因为AES指令的时延超过了 PXOR和PSHUFB指令的时延。图6A-6C是允许对多个16字节数据块并发地进行伽罗瓦域乘法的代码示例。所述代码仅仅是可能使用的代码的一个示例。还可以有很多其它变型,例如,代码可以被优化以与特定编译器一起使用。图6A-6C示出了对NBL0CKS数据块(每个块有16字节(16B)) 的数据缓冲器执行乘以10 的函数(内联汇编程序)。并行处理4个16字节块,并重复这个操作(并行地处理4个16字节块)G个块并行处理)4次,从而使用256字节数据缓冲器。用12个xmm寄存器(xmmO-xmmll)存储输入数据和对输入数据的操作结果。3个掩码寄存器(maskl,mask2,mask3)存储与表4中示出的代码示例相同的掩码。参考图6A,框 600中的指令将存储于xmm寄存器(xmml,xmm4, xmm7, xmmlO)中的输入数据的奇数字节位置设置为O。在示出的示例中,使用压缩混洗字节(VPSHUFB)指令将奇数字节位置设置为O。 VPSHUFB指令执行移动,之后是PSHUFB,例如对于指令“vpshufb xmml, xmmO, maskl", xmmO的内容被移动到xmml,然后根据存储于xmmO的控制掩码对xmml的内容进行混洗。接下来,框602中的AESDECLAST指令对存储在xmml, xmm4, xmm7和xmmlO寄存器的奇数字节位置被设置为O的输入数据进行操作。框604中的指令把输入数据移至xmm寄存器(Xmm2,Xmi^)并将奇数字节位置设置为0,并如结合图5C所讨论那样将xmm寄存器(xmmO,xmm3)中的输入字节重新混洗。参考图6B,框606中的AESENC指令隔离出MixColumns变换,并将结果存储到xmm 寄存器(xmml, xmm3, xmm7, xmmlO)中。框608中的指令将输入数据移至xmm寄存器(xmm8,xmml 1),并将偶数字节位置设置为0,并如结合图5C所讨论那样对xmm寄存器(Xmm6,Xmm9)中的输入字节进行重新混洗。框610中的指令对存储于xmm寄存器(xmm2,xmm5, xmm8, xmmll)中的偶数字节被设置为O的输入数据执行AESDECLAST指令。框612中的指令,将存储在xmm寄存器(xmml,xmm4, xmm7, xmmlO)中的数据的奇
数位置字节归零。框614中的指令对存储在xmm寄存器(xmm2,xmm5, xmm8, xmmll)中的数据执行 AESENC指令,并在存储于xmm寄存器(xmm2,xmm5, xmm8, xmmll)的结果中将偶数字节位置设置为O。框616中的指令对xmm寄存器(xmmO-xmmll)中的内容进行XOR操作,以提供xmm 寄存器(xmmO,xmm3, xmm6, xmm9)中的乘法操作的结果。框618中的指令将存储于xmm寄存器(xmmO,xmm3, xmm6, xmm9)的乘法操作的结
果移动至rbx寄存器。框620中的指令计算指向下一个要被进行乘法的16字节块的位置的指针。在另一个实施例中,以GF08)的另一表示进行RAID-6计算,通过将输入转换成其中可以应用AES指令的“优选”表示(具有约简多项式11B),有可能使用所描述的技术。到原始表示的最终转换是需要的(但是该最终转换可以暂缓到真的需要恢复时进行)。该转换可采用预计算的表来实现。本发明的替代实施例还包括机器可访问介质,其包含用于执行本发明的操作的指令。此类实施例也可称为程序产品。此类机器可访问介质可包括但不限于诸如软盘、硬盘、 光盘只读存储器(CD-ROMQ、只读存储器(ROM)、随机存取存储器(RAM)的存储介质,以及可由机器或设备制造或形成的粒子其他有形排列。指令也可用在分布式环境中,并可在本地存储和/或远程存储,以供单处理器或多处理器的机器访问。尽管已经通过参考本发明的实施例对这些实施例进行了具体示出和描述,但本领域技术人员将会理解,可以对这些实施例在形式上和细节上进行各种改变,而不背离由所述权利要求涵盖的本发明的实施例的范围。
1权利要求
1.一种方法,包括对字节块中多个字节中的每一个字节并行地执行伽罗瓦域乘法操作,包括对所有偶数位置字节被设置为ο的所述字节块执行高级加密标准(AEQ列混合变换, 以提供第一结果;对所有奇数位置字节被设置为0的所述字节块执行所述AES列混合变换,以提供第二结果;以及将所述第一结果和所述第二结果进行组合,以提供所述伽罗瓦域乘法操作的结果。
2.如权利要求1所述的方法,其中所述伽罗瓦域乘法操作中的有限域由约简多项式 OxllB定义。
3.如权利要求1所述的方法,其中执行所述AES列混合变换包括执行AESDECLAST轮指令及跟随其后的AESENC轮指令。
4.如权利要求3所述的方法,其中由所述AESDECLAST轮指令执行的一系列变换包括逆行移位变换和逆字节替换变换,由所述AESENC轮指令执行的一系列变换包括行移位变换、 字节替换变换和列混合变换。
5.如权利要求1所述的方法,其中组合还包括对所述第一结果和所述第二结果执行异或O(OR)操作,以提供第三结果;对存储于所述字节块的数据进行混洗,来将所述字节块中每个四字节块的低位的两个字节和高位的两个字节进行交换,以提供第四结果;以及对所述第三结果和所述第四结果进行XOR操作。
6.如权利要求1所述的方法,其中所述AES列混合变换将四字节块序列d,c,b,a变换成另一个四字节块序列 3a+b+c+2d,a+b+2c+3d, a+2b+3c+d,2a+3b+c+d。
7.如权利要求1所述的方法,其中所述组合用于计算6级RAID系统的Q校验子。
8.一种装置,包括存储器,用于存储多个指令,所述多个指令用于对字节块中多个字节中的每一个字节并行地执行伽罗瓦域乘法操作;以及处理器,其包括执行单元,所述多个指令以一顺序存储于所述存储器中,以使得当所述执行单元执行所述多个指令时,所述执行单元用于对所有偶数位置字节被设置为0的所述字节块执行高级加密标准(AEQ列混合变换, 以提供第一结果;对所有奇数位置字节被设置为0的所述字节块执行所述AES列混合变换,以提供第二结果;以及将所述第一结果和所述第二结果进行组合,以提供所述伽罗瓦域乘法操作的结果。
9.如权利要求8所述的装置,其中所述伽罗瓦域乘法操作中的有限域由约简多项式 OxllB定义。
10.如权利要求8所述的装置,其中所述执行单元用于通过执行AESDECLAST轮指令及跟随其后的AESENC轮指令来执行所述AES列混合变换。
11.如权利要求10所述的装置,其中由所述AESDECLAST轮指令执行的一系列变换包括逆行移位变换和逆字节替换变换,由所述AESENC轮指令执行的一系列变换包括行移位变换、字节替换变换和列混合变换。
12.如权利要求8所述的装置,其中所述AES列混合变换将四字节块序列d,c,b,a变换成另一个四字节块序列 3a+b+c+2d,a+b+2c+3d, a+2b+3c+d,2a+3b+c+d。
13.如权利要求8所述的装置,其中所述组合用于计算6级RAID系统的Q校验子。
14.一种包括机器可访问介质的制品,所述机器可访问介质具有相关联的信息,其中当所述信息被访问时,使得机器执行对字节块中多个字节中的每一个字节并行地执行伽罗瓦域乘法操作,包括对所有偶数位置字节被设置为0的所述字节块执行高级加密标准(AEQ列混合变换, 以提供第一结果;对所有奇数位置字节被设置为0的所述字节块执行所述AES列混合变换,以提供第二结果;以及将所述第一结果和所述第二结果进行组合,以提供所述伽罗瓦域乘法操作的结果。
15.如权利要求14所述的制品,其中所述伽罗瓦域乘法操作中的有限域由约简多项式 OxllB定义。
16.如权利要求14所述的制品,其中执行所述AES列混合变换包括执行AESDECLAST轮指令及跟随其后的AESENC轮指令。
17.如权利要求14所述的制品,其中由所述AESDECLAST轮指令执行的一系列变换包括逆行移位变换和逆字节替换变换,由所述AESENC轮指令执行的一系列变换包括行移位变换、字节替换变换和列混合变换。
18.一种系统,包括处理器;以及存储设备,其可由所述处理器访问并且存储有多个指令,所述多个指令中的至少一个指令用来执行变换序列,所述多个指令以一顺序被组合,以使得当被所述处理器执行时,使得所述处理器至少对所有偶数位置字节被设置为0的字节块执行高级加密标准(AEQ列混合变换,以提供第一结果;对所有奇数位置字节被设置为0的所述字节块执行所述AES列混合变换,以提供第二结果;以及将所述第一结果和所述第二结果进行组合,以提供对所述字节块中多个字节中的每一个字节进行伽罗瓦域乘法操作的结果。
19.如权利要求18所述的系统,其中所述伽罗瓦域乘法操作中的有限域由约简多项式 OxllB定义。
20.如权利要求18所述的系统,其中AESDECLAST轮指令及跟随其后的AESENC轮指令执行所述AES列混合变换。
全文摘要
提供了通过采用AES操作来计算RAID 6系统的Q校验子的方法和装置。在一个实施例中,使用所述AES操作执行的GF乘法的结果使得提供RAID-6支持,而不需要专用的RAID控制器。
文档编号G06F7/52GK102171646SQ200980139241
公开日2011年8月31日 申请日期2009年12月4日 优先权日2008年12月19日
发明者S·格伦 申请人:英特尔公司

最新回复(0)