CN1924785A - 存储虚拟化控制器的同位引擎及同位引擎产生数据的方法 - Google Patents
存储虚拟化控制器的同位引擎及同位引擎产生数据的方法 Download PDFInfo
- Publication number
- CN1924785A CN1924785A CNA2006101285348A CN200610128534A CN1924785A CN 1924785 A CN1924785 A CN 1924785A CN A2006101285348 A CNA2006101285348 A CN A2006101285348A CN 200610128534 A CN200610128534 A CN 200610128534A CN 1924785 A CN1924785 A CN 1924785A
- Authority
- CN
- China
- Prior art keywords
- data
- xor
- control module
- engine
- computing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
- G11B20/18—Error detection or correction; Testing, e.g. of drop-outs
- G11B20/1833—Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2211/00—Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
- G06F2211/10—Indexing scheme relating to G06F11/10
- G06F2211/1002—Indexing scheme relating to G06F11/1076
- G06F2211/1054—Parity-fast hardware, i.e. dedicated fast hardware for RAID systems with parity
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B20/00—Signal processing not specific to the method of recording or reproducing; Circuits therefor
- G11B20/10—Digital recording or reproducing
- G11B20/18—Error detection or correction; Testing, e.g. of drop-outs
- G11B20/1833—Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information
- G11B2020/1836—Error detection or correction; Testing, e.g. of drop-outs by adding special lists or symbols to the coded information using a Reed Solomon [RS] code
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11B—INFORMATION STORAGE BASED ON RELATIVE MOVEMENT BETWEEN RECORD CARRIER AND TRANSDUCER
- G11B2220/00—Record carriers by type
- G11B2220/40—Combinations of multiple record carriers
- G11B2220/41—Flat as opposed to hierarchical combination, e.g. library of tapes or discs, CD changer, or groups of record carriers that together store one title
- G11B2220/415—Redundant array of inexpensive disks [RAID] systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
本发明有关于一种存储虚拟化控制器的同位引擎及同位引擎产生数据的方法,包含:一控制单元,为该同位引擎的控制核心;一控制单元缓冲器,作为该控制单元的数据暂存区,并存储有运算时所需的乘法运算表;至少一异或引擎,由该控制单元所启动,用以依据该控制单元缓冲器内的乘法运算表选取数据流内数据,进而进行异或运算;以及至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
Description
技术领域
一种磁盘阵列控制器,特别指一种磁盘阵列控制器中同位引擎利用乘法运算表的对应产生数据的方法。
背景技术
数据存储与数据安全在信息发达的今天越来越重要,也因此在存储媒体的技术上有许多的发展,如可通过改善磁盘I/O(输入/输出)的效率以能配合计算机***与日渐增的性能需求、如除了大量存储能力的要求外,更要求有安全性(security)、可靠性(reliability)的考虑,以及在硬盘发生问题时仍能提供数据的存取服务。
在以上的考虑下,RAID(Redundant Array of Inexpensive/IndependentDisks,磁盘阵列)的构想即因应而生,磁盘阵列的目的在于将数据存储在多个磁盘机中,用以改善存储性能,并配合多个磁盘相互备份的机制,提高存储数据的可靠性。磁盘阵列的优点为提供更好的数据存储性能与数据容错度(Fault Tolerant),通过将工作量平行分散到多个物理磁盘机中可以达到较好的性能,通过数据多重操作,当一个或多个磁盘机或磁区发生问题时,可以通过其他的磁盘机重建数据,达到容错度。
磁盘阵列在操作***中显示为一个单一的逻辑磁盘(logical disk),磁盘阵列控制器控制数据如何在物理及逻辑阵列之间被存储及存取,多个磁盘通过控制器结合成虚拟单台大容量的磁盘机使用。以下针对各种不同磁盘阵列的实施方案说明。
磁盘阵列等级0(RAID-0)是较快的磁盘阵列,其中数据通过线性或不同的磁盘写入以获得较快的传输,此技术将数据切割,分别存于不同的磁盘机,以提供最佳的性能,但不具容错度,数据磁区的读写在多个磁盘机的间进行,当任何一个磁盘机发生问题时,整笔数据即损毁,如图1所示的示意图,完整的数据10通过磁盘阵列等级0的分割演算,举例来说,将数据10分割为数据区块1,2,3,4,5,6分开,数据1,3,5存于第一磁盘11,数据2,4,6存于第二磁盘12,两个磁盘机共同存取一笔数据,故可得近两倍存取速度。
磁盘阵列等级1(RAID-1)则使用至少两个磁盘机,如图2的第一磁盘11与第二磁盘12,并且在两者中存储相同的信息区块,即数据10在存储时,同时建立两个相同的数据至不同的磁盘机,如第一磁盘11与第二磁盘12同时包含数据10,当有数据损毁,另一个磁盘机则能即时取代,故有高可靠度与容错度,但因为同时必须将数据复制到两个磁盘机中,其性能较低、且成本较高。
磁盘阵列等级0+1(RAID-0+1)则为结合磁盘阵列等级0高存取效率与磁盘阵列等级1高可靠性的特点,如图3,数据10被切割为数据片段1,3,5与2,4,6,分别存储于第一磁盘11与第二磁盘12,然后,再将其镜射到另一磁盘组11’与12’,以得到容错度的功效。数据被切割到许多的磁盘机,每一个磁盘机都伴随着另一个拥有相同数据的磁盘机,因而可获得快速数据存取的效益与容错度。
然而,进展到磁盘阵列等级5(RAID-5),其提供更有效率与容错能力的磁盘阵列方式。其设计为除了用户数据(user data)外再多存储一组同位数据(parity),通常称为“P值”,也有称为“异或同位数据”(XOR Parity),因为其为所有对应的用户数据经异或(XOR)运算的结果,其运算公式如下:
P=D0+D1+D2+...+Dn-1..............................(1)
其中,“+”代表XOR运算,P代表同位数据,D0,D2,...,Dn-1代表用户数据,其中n表示用户数据盘的数目。
如图4所示,利用四个磁盘机A,B,C,D形成一个磁盘阵列等级5的阵列。其中有多个数据区块(strip),如第一区块D0存储于磁盘机A、第二区块D1存储于磁盘机B、第三区块D2存储于磁盘机C,则于磁盘机D中存储有相对应数据区块D0、D1与D2的第一同位数据P1,其他数据区块D3、D4与D5则分别存储于磁盘机A、B、D中,而相对应的第二同位数据P2则位于磁盘机C,如此,数据分割后顺序安排于各磁盘机中。而因为RAID5只存储一组同位数据,因此在同一时间内只能容许一个用户数据盘发生错误。发生错误的用户数据盘上的数据,是利用其对应的“P值”与其他正常的用户数据盘上的对应数据,同样利用异或(XOR)运算,而恢复数据。举例来说,若D1发生错误,则D1可利用下式计算得知:
D1=D0+D2+...+Dn-1+P...........................(1’)
上式中的的“+”也代表XOR运算。
请再续参阅图4,例如:当磁盘机C的数据有损毁或是错误,可由磁盘机C’取代原有磁盘机C,此时,可通过磁盘机A,B,D重建磁盘机C’中的数据。如:利用磁盘机A的数据区块D0、磁盘机B的数据区块D1与磁盘机D的数据区块P1经异或运算后产生磁盘机C’中的数据区块D2。由此达到磁盘阵列的容错能力与高存取效率。
硬盘存储装置容错能力在数据量越大、可信赖性要求越高时就越重要,而磁盘阵列等级6(RAID6)为磁盘阵列等级5的延伸技术,此类RAID***多半运用“Reed-Solomon Codes”的方式建置,为两个以上(含)同位数据的技术,在存储数据时,利用多个磁盘机存储的同位数据(multi-parity),来应付同时多个磁盘机损毁的状况。
以具有两组同位数据的RAID6***为例,假设RAID***中有n个一般数据盘D0~Dn-1,以及两个存储同位数据(parity)的同位数据盘P、Q。其中,P值仍是依照(1)式,取用户数据盘中的相对应数据,以纯粹XOR运算的方式计算得知。Q值则利用下式计算而得:
Q=g0*D0+g1*D1+g2*D2+...+gn-1*Dn-1................(2)
若有两数据盘Dx、Dy损毁,经由适当推导,可得:
Dx=A·(P+Pxy)+B·(Q+Qxy)...........................(3)
Dy=(P+Pxy)+Dx.......................................(4)
其中A、B为仅与x,y有关的常数:
A=gy-x·(gy-x+1)-1...................................(5)
B=g-x·(gy-x+1)-1....................................(6)
且Pxy、Qxy为当Dx,Dy皆为0时的P与Q值,即:
Pxy+Dx+Dy=P.........................................(7)
Qxy+gx·Dx+gy·Dy=Q....................................(8)
式(2)至式(8)中的代数运算,除幂次方“y-x”为一般减法外,其余皆为Galois Field的代数运算,其中“+”为XOR运算,“*”为乘法运算。又g须为一质数,通常选择g=2。
Galois Field的乘法运算与其定义域GF(2n)有关,其定义、特性和运算法则可参阅以下的参考文献:1.H.Peter Anvin的“The mathematics ofRAID6”;2.James S.Plank的“A Tutorial on Reed-Solomon Coding forFault-Tolerance in RAID-like Systems”。
理论上,不论计算Q值或恢复毁损的Dx值皆需大量的Galois Field乘法运算,尤其是一常数与大量不同数值的乘法运算。而若以硬件设计去完成此乘法运算,一般采用移位或查对数表(log table)和反对数表(inverse log table)运算的方式进行,其相当耗费***的处理时间。因此,如何简化与加速具有多同位数据(multi-parity)的RAID***的Q值运算,成为一个业界现今发展的重点。
发明内容
本发明的目的在于提高磁盘阵列***中同位引擎的处理性能。
为达到本发明的目的,依据本发明提供一种存储虚拟化控制器的同位引擎,包含:一控制单元;一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的乘法运算表;至少一异或引擎,由该控制单元所启动,用以依据该控制单元缓冲器内的乘法运算表选取数据流内数据,进而进行异或运算;以及至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:其中该异或引擎包含一子单元,该子单元包括至少一基本电路单元,该基本电路单元包括:多个与门,这些与门的一输入端分别对应于该数据流内数据的各位数据,另一输入端分别对应于该乘法运算表的各数值,借以达成该依据乘法运算表选取数据流内数据;以及多个异或门,用以对这些与门的输出进行异或运算,其运算结果输出到该数据缓冲器。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:其中这些异或门之一的一输入端对应于载自该数据缓冲器的数据。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:其中该异或门所输入的该数据缓冲器的数据为该数据缓冲器所存储的前一次该同位引擎运算结果。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:其中该子单元内所设置的该基本电路单元的数量对应于该数据流中一运算单位的位数。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:其中该基本电路单元的与门的数量对应于该乘法运算表的的行数。
依据本实施例的的一方案,本发明的的同位引擎的进一步特征在于:其中该异或引擎的该子单元的数量对应于该乘法运算表的列数。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:还包含一乘法运算表缓冲器,与该控制单元和该控制单元缓冲器相连接,用以存储所选定Galois Field的定义域中所有数值所对应的乘法运算表。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:还包含一寄存器,由该存储虚拟化控制器的一中央处理器对其填值而启动,继而触发启动该控制单元。
依据本实施例的一方案,本发明的同位引擎的进一步特征在于:还包含一内部主要总线接口,为该同位引擎连外接口,与该控制单元、该控制单元缓冲器、该异或引擎以及该数据缓冲器相连接。
而且,依据本发明提供一种存储虚拟化控制器,包含有:一中央处理器,为该存储虚拟化控制器的核心;以及一同位引擎,响应该中央处理器的指示,执行一特定磁盘阵列型态的同位功能,包括有:一控制单元;一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的乘法运算表;至少一异或引擎,由该控制单元所启动,用以依据该乘法运算表选取数据流内数据,进而进行异或运算;以及至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
依据本实施例的一方案,本发明的存储虚拟化控制器的进一步特征在于:还包含一中央处理器芯片组,其中该同位引擎设置于该中央处理器芯片组中,该中央处理器芯片组包括有:一中央处理器接口,为该中央处理器与其他元件通信的接口;一存储器控制器,作为其他元件与一存储器通信的接口;以及一内部主要总线,连接至该中央处理器接口、该存储器控制器,用以于其间互联数据信号及控制信号;以及该同位引擎还包含一内部主要总线接口,作为该同位引擎连接至该内部主要总线的接口,并与内部的该控制单元、该控制单元缓冲器、该异或引擎及该数据缓冲器相连接。
依据本实施例的一方案,本发明的存储虚拟化控制器的进一步特征在于:其中该内部主要总线具有流水线操作技术能力。
而且,依据本发明提供一种存储虚拟化子***,包含有:一存储虚拟化控制器,用来连接至一主机,且执行输入输出操作以响应由该主机发出的输入输出请求;以及一物理存储装置阵列,耦接于该存储虚拟化控制器,用来通过该存储虚拟化控制器提供该主机存储空间;其中该存储虚拟化控制器包括有一同位引擎,用以响应一中央处理器的指示而执行一特定磁盘阵列型态的同位功能,该同位引擎包括有:一控制单元;一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的的乘法运算表;至少一异或引擎,由该控制单元所启动,用以依据该乘法运算表选取数据流内数据,进而进行异或运算;以及至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
而且,依据本发明提供一种存储虚拟化计算机***,包含有:一主机,用来发出一输入输出请求;一存储虚拟化控制器,耦接至该主机,执行输入输出操作以响应由该主机发出的输入输出请求;以及一物理存储装置阵列,耦接于该存储虚拟化控制器,用来通过该存储虚拟化控制器提供该主机存储空间;其中该存储虚拟化控制器包括有一同位引擎,用以响应一中央处理器的指示而执行一特定磁盘阵列型态的同位功能,该同位引擎系包括有:一控制单元;一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的乘法运算表;至少一异或引擎,由该控制单元所启动,用以依据该乘法运算表选取数据流内数据,进而进行异或运算;以及至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
而且,依据本发明提供一种存储虚拟拟化控制器的同位引擎产生数据的方法,包含以下步骤:一控制单元启动至少一异或引擎;该异或引擎依据乘法运算表而对数据流内的数据进行选取与异或运算,并将运算结果存储于一数据缓冲器。
依据本实施例的一方案,本发明方法的进一步特征在于:在该运算步骤后还包含有该异或引擎判断是否该要进行运算的数据流都运算完成,若否,则重复进行该运算步骤直到所有该要进行运算的数据流都运算完成为止,并将该存储于该数据缓冲器的运算结果传送至该控制器的一存储器中。
依据本实施例的一方案,本发明方法的进一步特征在于:一中央处理器传送存储该要进行运算的数据流进行运算所需的该乘法运算表的存储器地址至该同位引擎;以及该控制单元依据该存储器地址读取该所需的乘法运算表至一控制单元缓冲器中;借以使该异或引擎得以依据该乘法运算表而对该选取与异或运算步骤。
依据本实施例的一方案,本发明方法的进一步特征在于:一中央处理器将该要进行运算的数据流运算时所应对应的该乘法运算表,依次提取整理而存于该存储器中;该中央处理器对一寄存器填值进而启动该控制单元,并令该控制单元得知存放该经整理后的运算所需的乘法运算表的存储器起始地址;以及该控制单元依据该存储器起始地址读取该所需乘法运算表至一控制单元缓冲器中;借以使该异或引擎得以依据该乘法运算表而对该选取与异或运算步骤。
依据本实施例的一方案,本发明方法的进一步特征在于:其中在该控制器开机时,由一中央处理器进行该产生步骤。
依据本实施例的一方案,本发明方法的进一步特征在于:其中在控制器出厂前进行该产生步骤而借以得预先将该所有数值对应的乘法运算表存于该存储器内。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该存储器为一位于该同位引擎的乘法运算表缓冲器。
依据本实施例的一方案,本发明方法的进一步特征在于:一中央处理器将该待运算的数据流运算所对应的乘法运算表建立一索引;以及该控制单元依据该索引令该乘法运算表缓冲器依照各数据流的运算顺序将所对应的该乘法运算表传送至一控制单元缓冲器中;借以使该异或引擎得以依据该乘法运算表而对该选取与异或运算步骤。
依据本实施例的一方案,本发明方法的进一步特征在于:其中在该启动步骤前还可包含一中央处理器将运算所需的操作信息整理存储于一存储器内,此操作信息包含该同位引擎操作时所需的各种设定与信息。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作信息包括该要进行运算各数据流的存储地址、获取运算所需的乘法运算表存储器地址的信息以及运算结果应存储的存储器地址。
依据本实施例的一方案,本发明方法的进一步特征在于:在该中央处理器建立好操作信息的步骤后,还包含:将存储该操作信息的存储器起始地址填入一寄存器内,使该寄存器触发而启动该控制单元,并将该存储器起始地址传给该控制单元。
依据本实施例的一方案,本发明方法的进一步特征在于:还包含该控制单元依据该存储器起始地址读取该操作信息至一控制单元缓冲器。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该整理该操作信息的方式为依据一事先定义的数据传输协定格式建立一操作指示表的方式。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有一连带指针栏位,用以指出下一个操作指示表所处的存储器地址。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有一中断栏位,用以设定是否于完成此表内所指示的数据的运算后,需产生一中断信号通知该中央处理器。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有一运算单位数量栏位,用以指示每个数据流所应进行的运算单位的数量。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有一运算单位大小栏位,用以设定运算单位的大小。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有一启动简单异或运算指示栏位,用以指示启动该异或引擎对各数据流进行简单的异或运算。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有一异或运算数量栏位,系指示启动进行数据运算的异或引擎的数量。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有:多个数据流地址栏位,用以指示存储各数据流的存储器起始地址;一数据流数量栏位,系用以指示运算中数据流的数量;以及一数据流长度栏位,用以指示需进行运算数据流的总长度。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有多个异或描述子栏位,包括有:存储运算结果的存储器地址栏位,用以指示该运算结果所欲存储的存储器地址;以及乘法运算表的存储器存储地址栏位,用以指示取得该乘法运算表的信息。
依据本实施例的一方案,本发明方法的进一步特征在于:其中这些异或描述子栏位的数量与该控制器所采用的同位数据数目一致。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该乘法运算表的存储器存储地址栏位是填入该乘法运算表的存储起始地址。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该乘法运算表的存储器存储地址栏位是填入该乘法运算表的索引。
依据本实施例的一方案,本发明方法的进一步特征在于:其中该操作指示表包括有一载入指示栏位,用以指示是否须依据这些异或描述子栏位中的存储运算结果的存储器地址栏位中的存储器地址,至存储器中载入数据流至该数据缓冲器,作为该异或引擎运算的初始数据。
依据本实施例的一方案,本发明方法的进一步特征在于:在异或引擎进行该选取与异或运算之前载入该数据缓冲器内数据作为该次运算的初始数据。
附图说明
图1显示公知磁盘阵列等级0的存储结构示意图。
图2显示公知磁盘阵列等级1的存储结构示意图。
图3显示公知磁盘阵列等级0+1的存储结构示意图。
图4以磁盘阵列等级5为例,显示磁盘阵列中用户数据与同位数据的存储配置示意图。
图5显示应用本发明的磁盘阵列子***的一实施例示意图。
图6显示一位于CPU芯片组内的同位引擎的实施例。
图7显示图6中所示的XOR引擎的一实施例。
图8显示同位引擎产生数据的流程图。
图9显示本发明的操作指示表所具有的栏位内容的一较佳实施例。
图10显示图9的一假设例。
图11显示中央处理器将新操作指示表***或接续前旧操作指示表的流程图。
其中,附图标记说明如下:
10计算机主机(Host)
200存储虚拟化控制器(SVC)
220主机端输入输出装置连接控制器
240中央处理电路
242中央处理器(CPU)
244CPU芯片组
246只读存储器(ROM)
248非易失性随机存取存储器(NVRAM)
260同位引擎
280存储器
300装置端输入输出装置连接控制器
350LCD模块
360箱体管理服务电路(EMS)
400磁盘阵列
280存储器(Memory)
242CPU
244CPU芯片组(CPU Chipset)
260同位引擎(Parity Engine)
262内部主要总线接口(IM Bus interface)
264控制单元(SG Controller)
266控制单元缓冲器(SG Buffer)
268寄存器(Register)
269乘法运算表缓冲器(Map Table Buffer)
272、274异或引擎(XOR Engine)
276、278数据缓冲器(Data Buffer)
910CPU接口(CPU Interface)
920存储器控制器(Memory Controller)
950内部主要总线(IM Bus)
990内部本地总线(IL Bus)
具体实施方式
将Reed-Solomon公式(请参考(2)式)应用在冗余磁盘阵列中做Q值的运算为本领域普通技术人员所熟知。只是在实际应用上,繁复的乘法运算会占据相当的***资源而使得***性能难以提高。
鉴于此,本发明事先将运算中各数据流所需的乘法参数产生相应的乘法运算表(Map Table),该表内各元素为0或1,使得***硬件(同位引擎)仅需依据此乘法运算表选取数据流内数据,进而进行异或运算即可,免去公知移位或查表运算,进而加速***的运算速度。有关乘法运算表的产生方式,基本上建立在加罗瓦场(Galois Field)的定义域GF(2a)与其相关代数规则之上。现说明如下:
首先应说明的是,由于目前实际上以a=8为较佳选择,因此以下有关实施例的说明大多假设其Galois Field定义域为GF(28),即所涵盖的数为0至255。此因28恰为计算机存储器的基本单位1字节(byte)的量,且据此所建置出来的RAID***,最多可容纳255个用户数据盘,已足以应付一般RAID***之用。虽然本发明的说明皆以GF(28)为前提,但不代表本发明只能应用在此假设下。在其他实施例中,本发明的技术也可能应用在不同的GaloisField定义域。
此外,本发明以下的举例大多以具有两组同位数据的RAID6***为例,但不代表本发明只能应用在此假设下,其他具有两组以上同位数据的RAID6***,也可能利用本发明的技术。
假设Y、X、K皆为GF(2a)中的数,即Y、X、K皆由a位(bit)组成。若yi,xi分别表示Y、X的第i位,则Y、X可以向量(vector)表示为:
令Y=K*X,即Y为K与任意数X的Galois Field乘法运算结果,K为已知常数,则将K的乘法运算表(Map Table)定义为一a*a的矩阵M,其元素Mi,j(0≤i、j≤a-1)的值为0或1且满足下式:
亦即,
其中,
mi,j·xj=xj,若mi,j=1
mi,j·xj=0,若mi,j=0
上述运算中的加法定义为异或(XOR)运算。从另一个观点,以上根据乘法运算对应表(矩阵M)所做的运算可视为:选择矩阵M中元素为1所对应的该运算单位的用户数据做异或(XOR)运算。
再者,乘法运算表(Map Table)的产生方法与Galois Field的代数法则息息相关。以下为GF(28)的Galois Field乘法运算的一例,但本发明不受限于此。若任意数X与2的乘积为X′,则X′可由下式得到(“+”表XOR运算):
由上式出发,可推导得出,由乘法运算表(Map Table)M产生M′的演算规则A如下:设K的Map Table为已知的矩阵M,K′=2*K的Map Table为M′,则演算规则A可以如表1所示:
表1
m′0,j=m7,j,0<=j<=7
m′1,j=m0,j,0<=j<=7
m′2,j=m1,j+m7,j,0<=j<=7
m′3,j=m2,j+m7,j,0<=j<=7
m′4,j=m3,j+m7,j,0<=j<=7
m′5,j=m4,j,0<=j<=7
m′6,j=m5,j,0<=j<=7
m′7,j=m6,j,0<=j<=7
Galois Field的代数特性之一是:若从K=1开始,依次将K值乘以2,所得的新K值在涵盖所有Galois Field定义域前,不会重复。以GF(28)为例,若从K=1开始,记录K值,并依次将K值乘以2,经过255次记录后,所得的K值将涵盖所有GF(28)的数(0为例外)。
依据上述Galois Field代数特性与演算规则A,便能产生所有Map Table。
以下列出多个GF(28)中的Map Table作为参考:
K=0 K=20=1
K=227=12 K=255=160
当乘法运算表产生完成,在实际运算时,即可依据乘法运算表,对数据做相对应的XOR运算。
更进一步地,为加速磁盘阵列(RAID)***运算的速度,本发明可将乘法运算表的XOR运算单位扩大为适当的w位。请回顾乘法运算表的定义,即(9)式,其中yi,xi分别表示Y,X的第i个位,而Y,X皆为GF(2a)中的数。亦即,利用乘法运算表正常运算时,XOR运算的单位为位(bit)。本发明技术于此将XOR运算的单位扩大为w位,运算元(operand)的单位则因此扩大为w*a位的数。以GF(28)为例,若设定w=32,则运用本发明技术时,XOR运算的单位为32位,运算元的单位为32*8=256位=32字节(byte),即32个GF(28)数值的集合。
请参阅图5,为本发明的存储***的一实施例示意图。对于此由多个磁盘机所组成的磁盘机阵列400,计算机主机10在存取此磁盘机阵列时,仅视为一个单一逻辑磁盘机。存储虚拟化控制器(SVC,storage virtualizationcontroller)200的主要目的是将磁盘机的各区段的组合映射(map)形成此主机***可见的逻辑磁盘机。由该主机***发出的输入输出(IO)请求在控制器200接收之后会先被剖析并解译,且相关的操作及数据会被编译成磁盘机的输入输出请求。在一些实施例中,可将磁盘机阵列400与存储虚拟化控制器200组成一存储虚拟化子***。
此实施例中,存储虚拟化控制器200包含有一主机端输入输出装置连接控制器220、一中央处理电路(CPC,central processing circuit)240、一存储器280以及一装置端输入输出装置连接控制器300。此处虽以分开的功能块描述,但在实际应用时,部分甚至全部的功能块(functional block)都可集成在一单一芯片上。
主机端输入输出装置连接控制器220连接至主机10及中央处理电路240,用来作为存储虚拟化控制器200及主机10之间的接口及缓冲,其可接收由主机10传来的输入输出请求和相关数据,并且将其转换及/或映射至中央处理电路240。
存储器280连接在中央处理电路240,其作为一缓冲器,用来缓冲传送于主机10和磁盘机阵列400之间通过中央处理电路240的数据。
装置端输入输出装置连接控制器300介于中央处理电路240和磁盘机阵列400间,用来作为存储虚拟化控制器200和磁盘机阵列400间的接口及缓冲。装置端输入输出装置连接控制器300接收由中央处理电路240传入的输入输出请求及相关数据,并将其映射及/或传送至磁盘机阵列400。
中央处理电路240包含有CPU芯片组(CPU chipset)244(内含同位引擎(parity engine)260,一中央处理器242(CPU),一只读存储器246(ROM,readonly memory)和一非易失性随机存取存储器248(NVRAM,non-volatilerandom access memory)。其中该CPU 242可为,例如,一Power PC CPU,而ROM 246可为一闪存,用来存储基本输入/输出***(BIOS)及/或其他程序。中央处理器242通过CPU芯片组244才得以与其他电子元件(如存储器280等)相耦接。NVRAM 248用来存储该物理存储装置阵列输入输出操作执行状态的相关信息,以备输入输出操作尚未做完前发生不正常电源关闭时,作检验使用。ROM 246,NVRAM 248,LCD模块350及箱体管理服务电路360都经由一慢速总线(例如:ISA-bus)连接至CPU芯片组244。又,该NVRAM 248为可选择项目,在本发明的另一种配置中可以省略不设。且CPU芯片组244此处虽集成有同位引擎260的功能块描述,但在实际应用时,CPU芯片组244与同位引擎260可分开设置在不同的晶片上。
而图6显示一位于CPU芯片组内的同位引擎260的实施例。CPU 242经CPU接口910,存储器280经存储器控制器920而与其他元件通信,而CPU接口910及CPU 242间的通信通道则可为,举例而言,64-bit数据传输线及32-bit地址线来进行。内部主要总线(Internal Main Bus,IM Bus)950连接至同位引擎260、CPU接口910、存储器控制器920,用以于其间互联数据信号及控制信号。内部本地总线(Internal Local Bus,IL Bus)990连接于CPU接口910以及其他低速装置(如寄存器268)。
同位引擎260会响应CPU 242的指示,来执行一特定磁盘阵列型态的同位功能。当然,在一些特定的条件下,比如说RAID0,同位引擎260可以关掉而不执行同位功能。于此实施例中以***采用二个同位数据(P,Q)为例来进行说明。其中此同位引擎260包含一寄存器(register)268、一内部主要总线接口(Internal Main Bus interface,IM Bus interface)262、一控制单元(SGController)264、控制单元缓冲器(SG Buffer)266、二个异或引擎(XOREngine)272,274以及两个数据缓冲器(Data Buffer)276,278。此处设置两个异或引擎(XOR Engine)272,274的目的在于,当CPU242运作处理而需启动同位引擎260产生两个同位数据(P,Q)或重建两个磁盘数据时(如更新磁盘机数据、两个磁盘机损坏),可同时启动两XOR引擎分别产生所需的两笔数据,以提高运算效率。当然,在CPU242只需启动同位引擎产生一笔数据时,则只需启动其中一XOR引擎。较佳者,XOR引擎的数量应与所采用的RAID同位数据的数量相同,例如;对采用三个同位数据来应付同时三个磁盘机损毁的状况的RAID***而言,此XOR引擎的数量应设置有三个。但是当然,以仅设置一个XOR引擎来依次分别算出所需的多笔数据(如P,Q值)也为一可行的实施方式。
其中IM总线接口262为此同位引擎260与IM总线950的间的接口,与控制单元264、控制单元缓冲器266、第一与第二XOR引擎272,274以及二数据缓冲器276,278相连接。寄存器268由中央处理器242对其填值而启动,于此实施例中寄存器268位于同位引擎260区块,但在其他实例中,也可设计位于其他区块,例如:一将CPU芯片组内各功能区块所需的寄存器都集成于一寄存器阵列的例中,则此寄存器268即位于该寄存器阵列内。控制单元264经寄存器268触发启动,为同位引擎260的控制核心。控制单元缓冲器266配合该控制单元264,并与二XOR引擎272,274相连接,其作为该控制单元264的数据暂存区,并存储有运算时所需的乘法运算表。二异或引擎272,274由该控制单元264所启动,用以依据该控制单元缓冲器266内的乘法运算表选取各数据流内数据及进行XOR运算。数据缓冲器276,278分别对应该二异或引擎272,274,用以做为该二异或引擎272,274运算过程中的数据暂存区。
前已述及,本发明主要基于将各数据流所需的乘法参数以相应的乘法运算表(Map Table)取代(该表内元素为0或1),因此使得***硬件(同位引擎)仅需依据此乘法运算表选取数据流内数据,进而进行异或运算即可。
例如:当***要开始计算Q值时。依照(2)式并设g=2,Q=20*D0+21*D1+...+2r*Dr+...+2n-1*Dn-1,其中D0~Dn-1代表r=0~n-1的用户数据盘的数据序列;由r=0开始,读取第r个数据盘的用户数据Dr,并且依***设定的运算单位大小w位去将Dr分为(x0~Xa-1)r,并找到2r所对应的乘法运算表(矩阵Mr,0≤r≤n-1),其中xi(0≤i≤a-1)为w位数据长度,a即为所使用的GF(2a)中的a值。若,
Q=20*D0+21*D1+...+2r*Dr+...+2n-1*Dn-1
=Y0+Y1+...+Yr+...+Yn-1
此处,运用循环的概念去进行前列运算式。其一,由r=0开始,每一个循环可以利用每个乘法参数相对应的乘法运算表选取Dr内各运算单位的数据(x0~Xa-1)r进行XOR运算而产生每一个相对应的Yr(y0~ya-1)r,再将各Yr(r=0~n-1)做XOR运算,即产生Q值。
或者,由r=0开始,每一个循环在利用每个乘法参数相对应的乘法运算表选取Dr内各运算单位的数据(x0~Xa-1)r进行XOR运算时,会载入一初始数据B来加入此XOR运算中,即每次循环的XOR运算结果为B+2r*Dr。原则上,当r=0时,此初始值为0,而除了r=0外,各循环的初始值为前一循环的运算结果,即,每个循环r的运算结果为20*D0+21*D1+...+2r*Dr=Y0+Y1+...+Yr。因此第r=n-1循环的XOR运算结果即为Q值。
在一基于前述第二种循环的概念来实现的实施例中,也即,将每一数据流与其所对应的乘法运算表来进行运算时,会载入一初始数据B,且原则上,除了待运算的第一数据流外,其他的初始数据为前一循环的运算结果。请配合参阅图6。在此种实施例中XOR引擎272,274所采用的循环运算方式原则上为,在对各待运算的数据流进行运算之初会将各所对应的数据缓冲区276,278内存放运算结果的存储空间清为0,并且对每一数据流进行运算后会将运算结果存储于该数据缓冲器的该存储空间内,并于要对每一数据流进行运算前会载入数据缓冲器内该存储空间内数据作为运算的初始数据。
如前述(9)式所示:
若每一循环的初始值以B(b0~ba-1)与每一循环的运算结果以Z(z0~za-1)表示,则每一循环的运算可以下列表示:
请配合参阅图7,显示图6中所示的XOR引擎的一实施例。其中仅示出产生1bit运算结果的基本电路单元。请注意,本实施例仅为对XOR引擎举例说明的用,本发明的权利要求当不受限于此,凡基于本发明的精神的变化、等效或替代应都包含于本发明的权利要求内。前已提及,本发明可将运算单位扩充为w位,因此,在一实施例中对每个运算单位的数据进行运算的子单元中应有w个基本电路单元。
现先以运算单位w=1与a=8为例来进行说明,也即,子单元中仅具有一基本电路单元。此基本电路单元包含有8个与(AND)门和8个异或(XOR)门。而由于w=1,数据xi(i=0~a-1,此处a=8)为一位数据。
各与门的输入接脚(Proc_Da0~Proc_Da7)分别对应于载入的各位数据(x0~~x7),输入接脚(Mapo_0~Mapo_7)分别对应于载入的乘法运算表该第i列的各行数值(mi,0~mi,7)。此与门的作用是依据乘法运算表第i列的各行数值(mi,0~mi,7)而对各数据(x0~x7)进行选取,当mi,j=1(j=0~7)时,该与门的输出等于该与门所对应的数据。而除了最右边的异或门之外,其他的7个异或门主要用以对该8个与门的输出进行XOR运算,而该运算的结果即为yi,且此输出值继而成为最右边的异或门的一输入值,而最右边的异或门的输入接脚Init_Da0对应于载自于数据缓冲器的初始数据bi,因此异或门的输出值即为此循环的对应于乘法运算表第i列的运算结果zi。
接下来以w=2,a=8为例来进行说明,也即代表一次可处理2*8=16bits的数据a0~a15,而以二位为一运算单位被分成(x0~x7)表示,其中(a1,a0)对应于x0,(a3,a2)对应于x1,依此类推。而每一循环运算结果Z值中每一zi(i=0~7)与每一循环的初始值B值中每一bi(i=0~7)都为二位的值。
在此实施例中,子单元中包含2个基本电路单元。其一的各与门的输入接脚(Proc_Da0~Proc_Da7)对应于各数据xi(i=0~7)的第一位(a0,a2,a4,a6,a8,a10,a12,a14),最右边的异或门的输入接脚Init_Da0对应于第i列的初始数据bi的第一位。而另一者的各与门的输入接脚(Proc_Da0~Proc_Da7)对应于各数据xi(i=0~7)的第二位(a1,a3,a5,a7,a9,a11,a13,a15),最右边的异或门的输入接脚Init_Da0对应于第i列的初始数据bi的第二位。然二基本电路单元的各与门的输入接脚(Map0_0~Map0_7)都对应于载入的乘法运算表该第i列的数值(mi,0~mi,7)。因此,此子单元的最右边的异或门的输出值构成此循环对应于乘法运算表第i列的2位的运算结果zi。
利用前述的实施例,本领域普通技术人员应能基于此所提出的精神而将w扩充为任意值,例如:w=8,代表待运算数据(x0~xa)中每个xi(i=0~a-1)为8位的数据,而每一循环运算结果Z值中每一zi(i=0~a-1)与每一循环的初始值B值中每一bi(i=0~a-1)也都为8位的值。此时,子单元应设置有八个基本电路单元。第一基本电路单元的各与门的输入接脚(Proc_Da0~Proc_Da7)对应于数据xi(i=0~a-1)的第一位,而其最右边的异或门的输入接脚Init_Da0对应于第i列的初始数据bi的第一位。第二基本电路单元的各与门的输入接脚(Proc_Da0~Proc_Da7)对应于数据xi(i=0~a-1)的第二位,而其最右边的异或门的输入接脚Init_Da0对应于第i列的初始数据bi的第二位。以此类推至第八基本电路单元的各与门的输入接脚(Proc_Da0~Proc_Da7)对应于数据xi(i=0~a-1)的第八位,而其最右边的异或门的输入接脚Init_Da0对应于第i列的初始数据bi的第八位。然此八个基本电路单元的各与门的输入接脚(Map0_0~Map0_7)皆对应于载入的乘法运算表该第i列的数值(mi,0~mi,7)。因此,此子单元的最右边的异或门的输出值构成此循环对应于乘法运算表第i列的8位的运算结果zi。
再者,于一实施例中,每一XOR引擎可仅设置一个子单元,接着,利用此子单元一一运算出i=0~a-1的每一列的运算结果zi,而获得运算结果Z。但是可理解的,其效率可能是无法让人满意的。
因此,在一较佳实施例中,可根据所对应的乘法运算表的列数去设置相对数量的子单元。一般而言,乘法运算表的列数应与所采用的GF(2a)中的a的数目相同,因而使得一次即可产生w*a位的结果。如:a=8,则XOR引擎即具有8个子单元。其中各子单元的各与门的输入接脚(Map0_0~Map0_7)依次分别对应于乘法运算表a列中的各列数值(mi,0~mi,a-1)(i=0~a-1),例如:第一子单元对应于第一列的数值(m0,0~m0,a-1),第二子单元对应于第二列的数值(m1,0~m1,a-1),依此类推至第a个子单元对应于第a列的数值(ma-1,0~ma-1,a-1)。因此,此a个子单元的最右边的异或门的输出值即构成此循环的w*a位运算结果Z。
此外,除了前述各法外,本领域普通技术人员当能依据本发明的精神去进行修改。例如:仅设置a/2个子单元,即对一数据流X而言,分二次运算才求得运算结果Z,第一次运算,各子单元依次分别对应于乘法运算表i=0~(a/2)-1的各列数值(mi,0~mi,a-1),而求出z0~za/2-1,第二次运算,各子单元依次分别对应于乘法运算表i=a/2~a-1的各列数值(mi,0~mi,a-1),而才算出Za/2~Za-1。
而由于实际XOR引擎272,274每一次取得数据的大小依据IM BUS 950的传输能力而定。例如:若***设定w=32,a=8,IM BUS 950的传输能力为16bytes。由于w=32,a=8表示乘法运算表为一8*8矩阵,应对应八个待运算的32bits数据。但由于每次XOR引擎272,274所取得的数据大小为16bytes,依运算单位32位(w=32)去划分,仅有四个(16bytes/32bits)运算单位的数据,意即,需二次才能取得八个(a=8)运算单位的数据(x0~x7)。
在其他的实施例中,为因应前述状况可采用二种运算模式,一为将前述(11)改写如下
或将前述(11)改写如下
前者表示,就一待运算的数据流而言,将依次所收到的数据两两一组。对每组的前笔数据(其中包含数据x0~x3)进行运算时,将其后的四个运算单位的数据视为0(同样需载入存于数据缓冲器内的初始数据B),而将运算结果存入数据缓冲器内作为该组的后笔数据运算的初始数据。而对每组的后笔数据(其中包含数据x4~x7)进行运算时,将其前的四个运算单位的数据视为0,即可求得该此循环的数据Z。
后者表示,将乘法运算表改为二个8*4的矩阵来看待,即将数据x0~x3与所对应乘法运算表的前四行进行运算(同样需载入存于数据缓冲器内的初始数据B),将运算结果放入数据缓冲器内作为运算数据x4~x7的初始数据,而后数据x4~x7与所对应乘法运算表的后四行进行运算,即可求得该此循环的数据Z。
若***采用为后者,则其中XOR引擎的每一子单元的每一基本电路单元只需设置四个与门即可(请注意,此时a=8)。也即,较佳者,基本电路单元的与门的数量可依据所对应的实际进行运算时的乘法运算表的行(column)数而定。
请参阅图8,显示同位引擎260产生数据的流程图。当同位引擎260经中央处理器242所启动后,控制单元264启动XOR引擎272,274中至少的一个(步骤702),其中启动几个XOR引擎如前已述及者,主要依据CPU 242需通过同位引擎260来运算产生数据的数量而定,例如:若CPU 242欲启动同位引擎260分别计算出二同位数据P,Q时,则控制单元274同时启动二XOR引擎272,274,而若CPU 242只需启动同位引擎260恢复一用户数据时,则控制单元274只需启动第一XOR引擎272。当XOR引擎272,274经控制单元264启动后,会向存储器280发出读取数据请求,以读取欲进行运算的多笔数据流(步骤704)。当XOR引擎272,274接收到数据流后,依据存储于控制单元缓冲器266内对应所接收到的数据流的乘法运算表而对该数据流内的数据进行选取与XOR运算,并将运算结果存储于数据缓冲器276,278中(步骤706)。接着,XOR引擎判断是否这些欲进行运算的多笔数据流都运算完成,也即是否进行到该笔计算的最后一个循环(步骤707),若否,则回到步骤706,若是,则将存储于该数据缓冲器276,278内的运算结果存储于存储器280中。
如前述,本发明同位引擎260产生数据的一核心,在于XOR引擎272,274依据存储于控制单元缓冲器266内的乘法运算表来进行运算。因此,在此,先说明乘法运算表的产生方式。
在一实施例中,在***开机时,中央处理器242即依所选定Galois Field的定义域GF(2a),产生GF(2a)中所有数值所对应的乘法运算表,将它存储在存储器280中。当中央处理器242启动同位引擎260欲对某些数据流进行运算时,令该控制单元264得知该各数据流进行运算时所应对应的乘法运算表的存储器地址,使控制单元264得以一一对存储器280发出读取请求而载入所需的乘法运算表到控制单元缓冲器266中。或者,当中央处理器242需启动同位引擎对某些数据流进行运算前,则将各数据流运算时所应对应的乘法运算表,依次提取整理而存储于存储器280中。以GF(28)为例,存储器存储有数值0~255所对应的乘法运算表,假设现中央处理器242欲对三个数据流(A,B,C)进行1*A+5*B+20*C的运算,则中央处理器242会依次将数值”1”,”5”及”20”所对应的乘法运算表自存储器280中提取出并依次存储在存储器280另一存储空间内。当中央处理器242将所需的乘法运算表整理后,接着通知寄存器268去启动控制单元264,并令控制单元264能得知存放这些所需乘法运算表的存储器起始地址,使控制单元264得以对存储器280发出一个读取请求即可载入这些所需的乘法运算表至控制单元缓冲器266中。在载入完成后,运用前述说明的流程,XOR引擎272,274即可依据***所设定的运算单位与乘法运算表内容选取数据流内各运算单位的数据并进行XOR运算。
或在其他的实施例中,***可于出厂前预先依所选定Galois Field的定义域GF(2a),将GF(2a)中所有数值所对应的乘法运算表存储在存储器280中,接着,如上述的方式进行。
又或在其他的实施例中,前述不论是采用***开机时,才运算产生GF(2a)中所有数值所对应的乘法运算表的方式,或者采用出厂前即预先产生的方式,所产生的所有乘法运算表不是存储于存储器280中,而直接存储于同位引擎260中。例如:请再参阅图6虚线所示之处,同位引擎260中设有一乘法运算表缓冲器(Map Table Buffer)269,分别与控制单元264与控制单元缓冲器266相连接,此缓冲器269即是用以存储该所有数值对应的乘法运算表。此时,当CPU242在要对某些数据流进行运算时,可将各待运算的数据流对应的乘法运算表建立一索引(index),使控制单元264依据该索引可得知各数据流运算所需的乘法运算表各为何,接着令乘法运算表缓冲器269依照各数据流的运算顺序将所对应的乘法运算表传送至控制单元缓冲器266内暂存。其后XOR引擎即可如前述依据控制单元缓冲器266内的乘法运算表进行运算。
针对前述图8的流程,请配合图6,再详细说明如下;为了能更强化同位引擎运算时的性能,在本发明的一实施例中,还可在中央处理器242启动同位引擎260进行运算前包含以下步骤,中央处理器242可将运算所需的操作信息整理存储于存储器280内。此操作信息应包含有同位引擎260进行操作时所需的各种设定与信息,使控制单元能借以动作,如,欲进行运算各数据流的存储地址、运算所需的乘法运算表存储器地址或索引、运算结果应存储的存储器地址等等。在中央处理器242建立好该操作信息后,接着将存储该操作信息的存储器起始地址填入寄存器268内,寄存器268即会触发启动该控制单元264,并将该存储器起始地址传给该控制单元264。接着控制单元依据该存储器起始地址,经IM BUS接口262与IM BUS 950对存储器控制器920发出读取该操作信息的请求,该存储器控制器920依据该请求将存储于存储器280内的操作信息经IM BUS950与IM BUS接口262而暂存于控制单元缓冲器266。控制单元264在取得操作信息后,依据该操作信息内容进行动作,首先在控制单元缓冲器266内建立运算所需的乘法运算表(有关于缓冲器266内产生所需乘法运算表的各种实施方式已于前述提及,在此不再赘述),再者启动二XOR引擎272,274,而二XOR引擎272,274则依据存于控制单元缓冲器266内的操作信息与乘法运算表,分别执行运算产生所需同位数据或重建数据。
而前述中央处理器242将运算所需的操作信息整理存储于存储器280内的方式可采用依据一事先定义的数据传输协定格式(data transfer protocolformat),建立一操作指示表的方式进行。图9即显示本发明操作指示表所具有的栏位内容的一较佳实施例。其中包括有:
1.连带指针栏位(Next-SG-List-Addr)用以指出下一个操作指示表所处的存储器地址。
此实施例中运用离散聚集表(Scatter-Gather(SG)-list)的概念,采用此栏位的设计,令这些操作指示表之间产生连带关系,使控制单元能依此栏位找到下一个操作指示表而自动接续处理,也即使各笔运算间产生一连带关系,因此中央处理器242不必针对每一次运算来发出通知给寄存器268,对于这些具有连带关系的操作指示表(SG-Lists)来说,中央处理器242仅需发送存放第一个SG-List的起始地址信息给寄存器268,而后同位引擎260即会一一依次完成所有连带关系的SG-Lists所指示的运算,即等于同时启动这些操作指示表所对应的多笔运算,使可增进运算性能。于此实施例中设定若于完成此表所指示的运算后无其他运算需继续进行的话,则此栏位填入0。
2.中断栏位(interrupt,I)用以设定是否于完成此表内所指示的数据的运算后,需产生一中断(interrupt)信号通知CPU。
3.运算单位大小栏位(Basic XOR element Size,ElemSiz),用以设定运算单位(w位),本实施例中此栏位的内容表示为2的幂次方,例如当此栏位内信息被设定为5时,则表示运算单位以25=32位为一基本单位。
4.运算单位数量栏位(Basic XOR element count,ElemCnt),用以指示每个数据流所应进行的运算单位的数量,其需与产生乘法运算表所选择的GF定义域GF(2a)的a值相同。例如:若采用GF(28),则此栏位设定为8。再者,如前所述在一根据IM BUS 950的传输能力每数据流需分次进行运算的实施例中,每个数据流在[?]分次进行运算的运算单位的数据的总数量应达到本栏位所设定的值后,才会轮至处理下一个数据流。
5.启动一简单异或运算指示栏位(S)。
本实施例中考虑在一些情况下,例如仅执行RAID5,或者是在RAID6下计算P值或者仅一个磁盘机的磁区数据损毁或错误而需重建该数据时,此XOR引擎的运算公式极为单纯(如前列(1)或(1’)式),各数据流的乘数为1,因此,无下载乘法运算表的必要。为更进一步增强处理性能,预先设立此栏位机制,当此栏位被设定(如1),则所对应启动的一XOR引擎将无须至控制器单元缓冲器内查看该乘法运算表,即对各数据流进行简单的异或运算。
6.异或运算数量栏位(XOR number bit,ElemCombCnt),决定利用多少个异或引擎进行数据的运算,例如:若***仅执行RAID5或者在RAID6下仅需重算P值或一用户数据,则此栏位设定为1,或者若在RAID6下,需同时计算二数据(P、Q值或用户数据),则此栏位设定为2。
7.数据流数量栏位(Number of data Streams,StreamCnt),用以指示待运算的数据流数量。
8.数据流地址栏位(StreamBseAdr0~n-1),用以指示存储各数据流的存储器起始地址。
在一实施例中,此数据流地址栏位的数量n为固定,且应等于或大于***所采用的磁盘机阵列中用户数据盘的数量。例如:在采用16个用户数据盘与2个同位数据盘的RAID 6***中,此栏位的数量可设为16。因而,相对应的前述数据流数量栏位内数值的最大限值(Maximum)应与数据流地址栏位数量n一致。
而在另一实施例中,此数据流地址栏位的数量依前述数据流数量栏位内的数值而定,也即该数据流数量栏位内的数值不仅表示待运算的数据流的数量,同时表示此操作指示表中数据流地址栏位的数量。
9.数据流长度栏位(Total length of Streams,Streaming),用以指示需进行运算数据流的总长度。
10.多个异或描述子栏位(Generalized XOR descriptor),较佳者,此栏位的数量应与***所采用的同位数据数目一致,例如:对具有二个同位数据(P,Q)的***而言,此栏位即应设置有二个,若为三个同位数据的***,则此栏位的数量即应为3。如:于本实施例中以具有二个同位数据(P,Q)的RAID 6为例,故包括有第一异或描述子栏位与第二异或描述子栏位,分别对应第一与第二XOR引擎272,274。其中各别包括存储运算结果的存储器地址栏位,及存放各异或引擎运算时所需的乘法运算表的存储器存储地址栏位。而若有如前述无须载入乘法运算表的情况时,则所对应的乘法运算表的存储器存储地址栏位填入0。再者,如前述,依***所采用的方式,此栏位可填入存储起始地址或是索引。
11.载入指示栏位(preload previous results,P)为二位的栏位,如0与1,若此栏位被设起,如为1,则第一与第二XOR引擎272,274会分别依据第一异或描述子栏位与第二异或描述子栏位中的存储运算结果的存储器地址栏位中的存储器地址,至存储器中载入数据流至第一与第二数据缓冲器276,278,作为此次XOR引擎运算的初始数据。此栏位可具有以下二种作用:
其一,在对磁盘机进行数据更新时。例如:中央处理器欲将磁盘机B中的数据流D1更新为数据流D1’。则需使用同位引擎运算出相对应的新的同位数据P’与Q’值,于一实施例中,可利用旧数据D1与相对应的旧同位数据P,Q,而以下列公式求得新的同位数据P’,Q’。
P’=P+D1+D1’
Q’=Q+21*D1+21*D1’
此时,可利用将旧同位数据P,Q分别存储于将填入第一与第二异或描述子栏位中的存储运算结果的存储器地址栏位中的存储器地址。接着设定操作指示表对旧数据流D1与新数据流D1’进行运算(D1+D1’与21*D1+21*D1’),且将此P栏位设起,例如设为1。
由于P栏位被设起,因此在第一与第二XOR引擎272,274在要进行运算之前,会分别依照存储于第一与第二异或描述子栏位中的存储运算结果的存储器地址栏位中的存储器地址至存储器内读取数据而载入相对应的第一与第二数据缓冲器276,278中,并作为运算的初始数据。因此在运算之初第一与第二XOR引擎分别会载入存储于填入存储运算结果的存储器地址栏位中的存储器地址的旧同位数据P,Q,并作为运算时的初始数据,因此,第一与第二XOR引擎272,274在依次对数据流D1与D1’后最后所得的运算结果即为所需的新同位数据P’,Q’。
其二、为根据***磁盘机数量扩充增加时。如前述一实施例中,依据此数据传输协定格式的设定对于一次可运算的数据流数量有一最大限值n。而若其后***要扩充其数据盘的数量使之大于n值时,则即会发生所需运算数据流的数量大于该限值n的状况。在本实施例中可将这些数据流拆解而分别建立相对应的多个操作指示表,而这些操作指示表中,每个操作指示表的下一个操作指示表地址栏位填入下一个操作指示表的存储器存储地址,使其间产生连带关系。且这些操作指示表内第一异或描述子栏位中存储运算结果的存储器地址栏位的内容为相同,同样地,这些操作指示表内第二异或描述子栏位中存储运算结果的存储器地址栏位的内容也相同,因此,对XOR引擎272,274依据这些操作指示表中每一个操作指示表进行运算时,最后运算结果都会依据存储运算结果的存储器地址栏位的内容存储于相同的存储器地址。而除了第一个操作指示表外,其余后续的操作指示表的P栏位设为1,以使进行运算前会将依存储运算结果的存储器地址栏位内的存储器地址去载入数据作为此次运算的初始数据,也即,会将前次运算结果载入作为此次运算的初始数据。因此,这些操作指示表的最后一个操作指示表的运算结果即为整笔所有数据流的运算结果。故中断(I)栏位,可为仅最后一个操作指示表设为1,其余设为0。
现举例说明,假设预设数据流数量的最大限值为16,而实际需运算的数据流数量为32,如;将数据写入32个用户数据盘而须计算相对应的P与Q值时,
P=D0+D1+D2+.....+D30+D31
Q=20*D0+21*D1+22*D2+.....+230*D30+231*D31
则可分别建立具有连带关系的第一操作指示表与第二操作指示表,其中第二操作指示表的前次运算结果载入指示(P)栏位设为1。而第一操作指示表用以对前D0~D15数据流进行运算,可表示如下
D0+D1+D2+.....+D14+D15=ΔP15与
20*D0+21*D1+22*D2+.....+214*D14+215*D15=ΔQ15
此运算结果会分别依第一与第二存储运算结果的存储器地址栏位内容所指示的存储器地址而存储于存储器内。
而第二操作指示表用以对后D16~D31数据流进行运算,由于其此P栏位被设起,故依据第一与第二存储运算结果的存储器地址栏位内容所指示的存储器地址,至该存储器内将前次运算结果载入至数据缓冲器276,278内作为初始数据,因此第二操作指示表所进行的运算可表示如下:
ΔP15+D16+D17+D18+.....+D30+D31=P
ΔQ15+216*D16+217*D17+....+230*D30+231*D31=Q
因此,第二操作指示表的运算结果即为真正所需的P与Q值。
前述图9所示的数据传输协定格式为一较佳实施例,于实作上可有所增删。如:将有关数据流长度、运算单位数量、与运算单位大小等数值以固定值的方式内定于***中,即可不设有这些相对应的栏位。而在一不具有载入指示(P)栏位的实施例中,若要因应处理前述对磁盘机进行数据更新时,而须利用新旧数据与旧同位数据来计算出新同位数据的状况时,则所建立的操作指示表也将旧同位数据一并视为待运算的数据流来处理。举例说明如下;如前已提及的例子中,***需依下列公式求得新的同位数据P’,Q’。
P’=P+D1+D1’
Q’=Q+21*D1+21*D1’
等于需要进行运算的数据流分别有P,Q,D1及D1’。因此,***需将上列公式改为如下所示,而建立相对应的操作指示表,启动同位引擎去运算。
P’=P+0*Q+D1+D1’=20*P+0*Q+20*D1+20*D1’
Q’=0*P+Q+21*D1+21*D1’
其中对应运算新同位数据P’的各数据流所需的乘法运算表中,对应旧同位数据Q的为对应于数值“0”的乘法运算表,而对应运算新同位数据Q’的各数据流所需的乘法运算表中,对应旧同位数据流P的为对应于数值“0”的乘法运算表。
另外,就此一不具有载入指示(P)栏位的实施例中,若要因应处理前述运算上数据流数量大于最大限值的情况时,同样可分设多个具有连带关系的操作指示表,且同样每一操作指示表的下一个对应表地址栏位填入下一个操作指示表的存储器存储地址,而使其间产生连带关系。然而不同之处在于,每一接续的操作指示表将前一次运算结果视为所需运算的数据流之一的结果,而以类似前述处理数据更新时的方法进行。
现同样以假设预设数据流数量的最大限值为16,而计算写入32个数据盘相对应的P与Q值为例说明如下:
P=D0+D1+D2+.....+D30+D31
Q=20*D0+21*D1+22*D2+.....+230*D30+231*D31
则分别建立具有连带关系的第一操作指示表与第二操作指示表与第三操作指示表。而第一操作指示表用以对前D0~D15数据流进行运算,可表示如下
D0+D1+D2+.....+D14+D15=ΔP15与
20*D0+21*D1+22*D2+.....+214*D14+215*D15=ΔQ15
而第二操作指示表中将第一操作指示表运算完成所得的结果ΔP15,ΔQ15视为二数据流,即第二操作指示表用以对后ΔP15、ΔQ15、D16~D29数据流进行运算,而对应运算P值的各数据流所需的乘法运算表中,对应第二数据流ΔQ15的为对应于数值“0”的乘法运算表,而对应运算Q值的各数据流所需的乘法运算表中,对应第一数据流ΔP15的为对应于数值“0”的乘法运算表,因此第二操作指示表所进行的运算可表示如下:
ΔP15+0*ΔQ15+D16+D17+.....+D28+D29=ΔP29
0*ΔP15+ΔQ15+216*D16+....+228*D28+229*D29=ΔQ29
接着,而第三操作指示表中以类似于第二操作指示表的方式,将第二操作指示表运算完成所得的结果ΔP29,ΔQ29视为二数据流,即第三操作指示表用以对后ΔP29、ΔQ29、D30、D31数据流进行运算,因此第三操作指示表所进行的运算可表示如下:
ΔP29+0*ΔQ29+D30+D31=P
0*ΔP29+ΔQ29+230*D30+231*D31=Q
因此,于此种方法中需采用三个操作指示表才能求出所需的P与Q值。
以下再以一实例进行说明,然而实际实施时并不以此为限。以前述假设在一存储***中使用具有二个同位数据的RAID6机制,中央处理器欲将磁盘机B中的数据流D1更新为数据流D1’为例。需使用同位引擎运算出相对应的新的同位数据P’与Q’值,于一实施例中,以下列公式求得新的同位数据P’,Q’。
P’=P+D1+D1’=P+20*D1+20*D1’
Q’=Q+21*D1+21*D1’
其中,“+”代表XOR运算。
依前述,若采用GF(28),
则21对应的乘法运算表M1为:
而于本实例中,假设中央处理器242将计算Q’值所需的乘法运算表依次(M1,M1)存储于存储器内,假设所存放的存储器起始地址为1000_0000。另假设前述各数据流的长度为512bytes,以及中央处理器将旧同位数据P,Q分别存储于存储器地址A000_0000与B000_0000。
接着,中央处理器依据前述的数据传输协定格式建立操作指示表且假设此对应表存放的起始地址为0000_0100。请参阅图10,显示一假设例,如图中所示,连带指针栏位设定为8000_0000表示在将此运算完成后应接续处理存于存储器地址8000_0000的操作指示表;中断(I)栏位设定为1,以使同位引擎260运算完成后,控制单元264会产生中断信号通知中央处理器242;运算单位数量(ElemCnt)栏位,设定为8,因采用GF(28);运算单位大小(ElemSiz)栏位设定为5,表示运算单位以25=32位为一基本单位;启动一单纯异或运算指示(S)栏位设定为1,因为其中一XOR引擎用以计算P值;异或运算数量(ElemCombCnt)栏位设定为2,因要同时启动二XOR引擎272,274去计算P与Q值;数据流数量(StreamCnt)栏位设定为2,因为有D1,D1’二个需运算的数据流;数据流长度(Streamlng)栏位814设定为512,因D1,D1’的整个数据长度为512字节(byte);第一异或描述子栏位中运算结果存放地址栏位填入计算所得的P值欲存放的存储器地址A000_0000表示第一XOR引擎272运算的结果应存储至存储器地址A000_0000,且乘法运算表存储地址栏位内填入0,因计算P值无须下载乘法运算表;第二异或描述子栏位中运算结果存放地址栏位填入计算所得的Q值欲存放的存储器地址B000_0000表示第二XOR引擎274运算的结果应存储至存储器地址B000_0000,且乘法运算表存储地址栏位内填入1000_0000;多个数据地址栏位中的前二个分别放入D1,D1’数据流的存储器起始地址。载入指示(P)栏位设定为1,表示第一XOR引擎272须依第一异或描述子栏位中运算结果存放地址栏位所填入的存储器地址A000_0000至存储器内载入数据至数据缓冲器276中作为运算的初始数据,及第二XOR引擎274需依据第二异或描述子栏位中运算结果存放地址栏位所填入的存储器地址B000_0000至存储器内载入数据至数据缓冲器278中作为运算的初始数据。
当中央处理器242将存放此操作指示表的起始地址0000_0100填入寄存器268,该寄存器268触发该控制单元264,同时并将该操作指示表的起始地址0000_0100传送给该控制单元264。控制单元264依据该起始地址,经IM BUS接口与IM BUS至存储器280中读取该操作指示表并暂存于对应表缓冲器266。而后,控制单元264依据第二异或描述子栏位的乘法运算表存储起始地址栏位内容1000_0000,至存储器内读取第二XOR引擎274运算所需的乘法运算表矩阵M1,M1并暂存于控制单元缓冲器266内。接着控制单元264依据异或运算数量(ElemCombCnt)栏位内容“2”去启动二个XOR引擎272,274。
接着,该二XOR引擎272,274会各别依据对应表内栏位信息动作。首先由于S栏位设为1,因此第一XOR引擎272将启动预设的单纯XOR运算。
假设,XOR引擎272,274每一个循环的运算逻辑采用前述除第一个循环外,各循环的初始数据为前一循环的运算结果,但第一个循环的初始数据值为0的方式,且XOR引擎每个循环运算结果会先暂存于数据缓冲区内。因此,XOR引擎272,274在对每个循环运算前,会载入数据缓冲器276,278内所存储的数据作为该XOR运算的初始数据。依照此循环运算方式,原本在进行第一个循环时其初始数据应为0,也即该二数据缓冲器276,278内的存储运算结果的空间被清为0。但由于P栏位设为1,表示需至存储器内载入数据来作为XOR运算的初始数据,因而此例中,第一XOR引擎272将依第一异或描述子栏位中运算结果存放地址栏位所填入的存储器地址A000_0000至存储器内载入旧同位数据P至数据缓冲器276中作为运算的初始数据,及第二XOR引擎274将依据第二异或描述子栏位中运算结果存放地址栏位所填入的存储器地址B000_0000至存储器内载入旧同位数据Q至数据缓冲器278中作为运算的初始数据。
而后该XOR引擎分别依据StreamBseAdr0栏位所填入的数据流D1,D1’的存储器起始地址与StreamLng栏位内所示的数据流长度为512bytes,通过IM BUS接口262至存储器内读取该数据流D1,D1’。
再者,由于所传送的数据需依照IM BUS 950的数据传输能力,因此数据流一般会分多次传入。例如:IM BUS 950的传输能力为32bytes,则数据流D1,D1’需分为16(512/32)次才会传送完成。即数据流D1会被分为D1-0~D1-15分次传送,而数据流D1’会被分为D1-0’~D1-15’分次传送。而以下说明中相对应此分次传送的数据流而将新旧同位数据Q与Q’以Q0~Q15与Q0’~Q15’来表示。
XOR引擎在每次收到数据,即依运算单位大小栏位所设定的数值“5”而理解以32bits为一运算单位,去切割每次收到的数据以进行运算,且将运算结果存储于数据缓冲器276.278中。以第二XOR引擎274为例,其用以运算Q值。当第二XOR引擎274收到IM BUS接口262所传送的数据流D1-0,以32bits为一运算单位去切割D1-0为八个单位数据d1-0,0~d1-0,7,载入数据缓冲器278内数据作为XOR运算的初始值(此时此初始数据为旧同位数据Q0),并依照控制单元缓冲器266内所存储对应数据流D1的乘法运算表M1,从第一列的八个数值开始直到最后一列,来对应到八个单位数据d1-0,0~d1-0,7,使一一进行数据选取(AND)与XOR处理而产生Q0+21*D1-0,并暂存于数据缓冲器278内,如此重复而将所有Q+21*D1都产生完毕为止。
在数据流D1处理完毕后,接着第二XOR引擎274同样依照前述相同方法对IM BUS接口262所传送的数据流D1-0’,载入数据缓冲器278内数据作为XOR运算的初始值(此时此初始值为Q0+21*D1),以32bits为一运算单位去切割D1-0’为八个单位数据D1-0,0’~D1-0,7’,并依照控制单元缓冲器266内所存储对应数据流D1’的乘法运算表M1,从第一列开始直到最后一列,来对应到八个单位数据D1-0,0’~D1-0,7’,使一一进行数据选取(AND)与XOR处理而产生Q0’,并暂存于数据缓冲器278内,如此重复而将完整512bytes的Q’值都产生完毕为止。而后在依据运算结果欲存放的存储器地址栏位内的指示将数据缓冲器278的Q’值写入该地址内。
另外,如前所述,由于传送的数据需依照IM BUS 950的数据传输能力,使每一数据流会分多次传入,如前例中由于IM BUS 950的传输能力为32bytes,而数据流D1,D1’的长度为512bytes,故每一数据流分成16份来进行传送。因而,XOR引擎从收到第一笔数据D1-0即可开始计数,借以了解是否已将要结束此一数据流D1而须进入到下一个数据流D1’的运算循环,以进行该数据流D1’循环运算所需的前置作业,例如将乘法运算表换成该数据流D1’所对应的等等,因此,在此例,若本实施例应用于采用具有流水线操作技术能力(pipelining capability)的IM BUS 950的***时,XOR引擎即可依据操作指示表的内容所对应的各待运算的数据流的存储器起始地址,进而依次一一发出读取请求。而无须等待数据流已进行运算至某一可确保安全的适当时间才发送请求读取下一个欲运算的数据流。
但若***的该IM BUS 950的传输能力为16bytes,200Mhz。也即每次XOR引擎可读取的数据量为16bytes,小于***所设定的每单位数据区块的32bytes(32bits*8)。因此,就长度为512bytes的数据流D0,D1而言,需要分32次才能传送完该数据流。而由于每次XOR引擎取得的数据为16ytes,依照32bits为一运算单位去切割仅可得到四个单位数据,未达到操作指示表中所指示的“8”,因此此实施例中XOR引擎可集成每二次处理的数据结果存储于数据缓冲器内。有关集成的相关描述前已提及,在此不在赘述。
在同位引擎260将计算产生的新的同位数据P’,Q’值存储于存储器后,该控制单元264依据中断栏位的设定发送中断信号至中央处理器242。而后控制单元264并依据连带指针栏位内容去读取存于存储器地址8000_0000的操作指示表,而继续运作处理。
另外,一般而言,在RAID***,每一笔写入动作皆须更新同位数据,也即需启动同位引擎计算新的同位数据,因此极可能发生同位引擎正在处理一操作指示表时,又有新的须启动同位引擎进行运算的操作发生。
在一实施例中,在发生前述的情况时,中央处理器242对该新的操作建立相对应的新操作指示表,并且允许中央处理器242可将该新的操作指示表***或接续前旧有尚未处理完的操作指示表。例如:首先,在设计上,寄存器268中映射有存储于同位引擎260的控制单元缓冲器266中的操作指示表的连带指针栏位的内容,且当寄存器268的该存储内容被更新时,该控制单元缓冲器266中的连带指针栏位的内容也被映射更新。因而,中央处理器可借通过更改寄存器268中的连带指针栏位的内容,或者借通过更改同位引擎260正在进行的连带操作指示表中某一“尚未”处理到的操作指示表的连带指针栏位内容,将其改为存放此新建立的操作指示表的起始地址,且该新建立的操作指示表的连带指针栏位内容填入该***点原本应接续进行的操作指示表的起始地址,当然若***点无要接续进行的操作指示表的话,填入0。借由此,使得这前后操作指示表的间也产生连动关系,令该同位引擎会自动连动处理。
进一步说明如下,请配合参阅图11,中央处理器建立了新的至少一操作指示表(步骤602)。接着中央处理器判断是否尚存有旧的操作指示表尚未处理完(步骤604),此步骤可借通过同位引擎是否发送Interrupt信号给中央处理器而得知。假设,若未存有尚未处理完毕的旧操作指示表,则将存放新建立的操作指示表的起始地址填入寄存器以启动同位引擎对新建立的操作指示表进行相应的操作(步骤606);而若尚有未处理完已存在的操作指示表时,中央处理器发送出一暂停请求(Pause Req.)给同位引擎,请求同位引擎先暂停动作,当同位引擎收到该请求,控制单元将会执行一暂停机制,暂停手上的动作,并于暂停后回复一暂停认可(Pause Gnt)给中央处理器(步骤608)。其中暂停机制可例如:将正在处理的操作指示表内运算完成后暂停进入下一个操作指示表的动作。在收到暂停认可回复后,中央处理器开始进行***或接续连动程序(步骤610),主要选定寄存器或者是前组操作指示表中某一尚未处理的操作指示表,将新产生的操作指示表中的最后一个操作指示表的连带指针栏位的设定与寄存器或者是被选定的前组尚未处理的操作指示表中原先所设定的连带指针栏位内容一致,且将寄存器或者是被选定的前组尚未处理的操作指示表内的连带指针栏位更改为后产生的操作指示表所存放的起始地址(存放第一个操作指示表的地址),即完成后产生的操作指示表***前组操作指示表的动作,而令两组操作指示表间发生连动。前述在进行***或接续动作前,中央处理器可借通过读取寄存器内的连带指针栏位内容而得知同位引擎现进行到那一个操作指示表。当使新产生的操作指示表与已存在待处理的操作指示表间完成连带关系后,接着通知同位引擎解除暂停状态,则寄存器会恢复所暂停的动作,并继续依照新产生的连带关系自动连动处理。
前述在中央处理器进行两组操作指示表连动前,需发送暂停请求的原因在于防止中央处理器在更改某一操作指示表或寄存器内连带指针栏位内容的同时,同位引擎也读取该操作指示表的内容,而发生冲突引发错误。
再者,当中央处理器于发生需要集成或修改或删除某操作指示表,如同前述***或接续连动程序,中央处理器可借通过读取寄存器内所读取到有关连带指针栏位内容得知同位引擎是否有下一个操作指示表要处理或者是下一个要处理的操作指示表存放于何处等信息,也就是,中央处理器可借由此了解有那些操作指示表是同位引擎尚未处理。因此,中央处理器可判断其意欲集成或修改或删除的某操作指示表是否为同位引擎尚未处理的操作指示表,若是的话,则中央处理器可对该操作指示表进行集成或修改或删除等动作。
当然,在中央处理器进行前述的修改或删除程序时,在读取寄存器内信息前,同样可利用发送暂停请求要求寄存器先暂停手上的动作,并于收到暂停认可后才进行读取动作,以避免因同位引擎持续进行数据运算而与中央处理器其后的修改或删除动作发生冲突的情况。而同样的在中央处理器结束完整个修改或删除的程序后要通知同位引擎解除暂停状态,以使其继续动作。
以上附图仅提供参考与说明用,并非用来对本发明加以限制。
综上所述,本发明为一种磁盘阵列控制器及其同位引擎产生数据的方法,其中同位引擎运用乘法运算表对数据进行异或运算,以产生磁盘阵列同位数据(parity)或恢复数据,而免去复杂的乘法运算。
而于一实施例中,还提出中央处理器将启动同位引擎产生数据所需的操作信息依据一事先定义的数据传输协定格式,去建立一操作指示表。并将操作指示表的存放地址填入同位引擎的寄存器即可,同位引擎即会读取该操作指示表而进行相对应的动作。且于一操作指示表的实施例中,具有一连带指针栏位,用以指出下一个操作指示表所处的存储器地址,使能在前一笔操作未完成前与新的操作间产生连动关系,而使同位引擎可自动接续处理。令中央处理器无须在同位引擎完成一笔操作后才能在对其下达操作指示。且由于在RAID***中,每一笔写入动作都须更新同位数据,也即需启动同位引擎计算新的同位数据,因此,应当能了解,在***开机后,需利用同位引擎进行的操作几乎源源不绝,因而,此操作指示表的设置大幅节省了中央处理器与同位引擎的间通信所耗的时间。且又,由于同位引擎可借通过此操作指示表而得知待运算的各数据流的存储地址,因此若本实施例所应用的***的IMBUS具有流水线操作技术能力时,同位引擎即可依据各数据流的存储器起始地址,依次一一发出读取请求。使得在同位引擎运算的性能上更为提高。
但是以上所述仅为本发明的较佳可行实施例,并非用以限制本发明的专利范围,凡运用本发明说明书及附图内容所为的等效结构变化,均同理包含于本发明的范围内。
Claims (43)
1.一种存储虚拟化控制器的同位引擎,其特征在于,包含:
一控制单元;
一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的乘法运算表;
至少一异或引擎,由该控制单元所启动,用以依据该控制单元缓冲器内的乘法运算表选取数据流内数据,进而进行异或运算;以及
至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
2.根据权利要求1所述的同位引擎,其特征在于所述的异或引擎包含一子单元,该子单元包括至少一基本电路单元,该基本电路单元包括:
多个与门,这些与门的一输入端分别对应于该数据流内数据的各位数据,另一输入端分别对应于该乘法运算表的各数值,借以达成该依据乘法运算表选取数据流内数据;以及
多个异或门,用以对这些与门的输出进行异或运算,其运算结果输出至该数据缓冲器。
3.根据权利要求2所述的同位引擎,其特征在于所述的异或门之一的一输入端对应于载自于该数据缓冲器的数据。
4.根据权利要求3所述的同位引擎,其特征在于所述的异或门所输入的该数据缓冲器的数据为该数据缓冲器所存储的前一次该同位引擎运算结果。
5.根据权利要求2所述的同位引擎,其特征在于所述的子单元内所设置的该基本电路单元的数量对应于该数据流中一运算单位的位数。
6.根据权利要求2所述的同位引擎,其特征在于所述的基本电路单元的与门的数量对应于该乘法运算表的行数。
7.根据权利要求2所述的同位引擎,其特征在于所述的异或引擎的该子单元的数量对应于该乘法运算表的列数。
8.根据权利要求1所述的同位引擎,其特征在于还包含一乘法运算表缓冲器,与该控制单元及该控制单元缓冲器相连接,用以存储所选定加罗瓦场的定义域中所有数值所对应的乘法运算表。
9.根据权利要求1所述的同位引擎,其特征在于还包含一寄存器,由该存储虚拟化控制器的一中央处理器对其填值而启动,继而触发启动该控制单元。
10.根据权利要求1所述的同位引擎,其特征在于还包含一内部主要总线接口,为该同位引擎连外接口,与该控制单元、该控制单元缓冲器、该异或引擎以及该数据缓冲器相连接。
11.一种存储虚拟化控制器,其特征在于,包含有:
一中央处理器;以及
一同位引擎,响应该中央处理器的指示,执行一特定磁盘阵列型态的同位功能,包括有:
一控制单元;
一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的乘法运算表;
至少一异或引擎,由该控制单元所启动,用以依据该乘法运算表选取数据流内数据,进而进行异或运算;以及
至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
12.根据权利要求11所述的控制器,其特征在于还包含一中央处理器芯片组,其中该同位引擎设置于该中央处理器芯片组中,该中央处理器芯片组包括有:
一中央处理器接口,为该中央处理器与其他元件通信的接口;
一存储器控制器,作为其他元件与一存储器通信的接口;以及
一内部主要总线,连接至该中央处理器接口、该存储器控制器,用以于其间互联数据信号及控制信号;以及
该同位引擎还包含一内部主要总线接口,作为该同位引擎连接至该内部主要总线的接口,并与内部的该控制单元、该控制单元缓冲器、该异或引擎及该数据缓冲器相连接。
13.根据权利要求12所述的控制器,其特征在于所述的内部主要总线具有流水线操作技术能力。
14.根据权利要求11所述的控制器,其特征在于还包含一寄存器,由该中央处理器对其填值而启动,继而触发启动该控制单元。
15.一种存储虚拟化子***,其特征在于,包含有:
一存储虚拟化控制器,用来连接至一主机,且执行输入输出操作以响应由该主机发出的输入输出请求;以及
一物理存储装置阵列,耦接于该存储虚拟化控制器,用来通过该存储虚拟化控制器提供该主机存储空间;
其中该存储虚拟化控制器包括有一同位引擎,用以响应一中央处理器的指示而执行一特定磁盘阵列型态的同位功能,该同位引擎包括有:
一控制单元;
一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的乘法运算表;
至少一异或引擎,由该控制单元所启动,用以依据该乘法运算表选取数据流内数据,进而进行异或运算;以及
至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
16.一种存储虚拟化计算机***,其特征在于,包含有:
一主机,用来发出一输入输出请求;
一存储虚拟化控制器,耦接至该主机,执行输入输出操作以响应由该主机发出的输入输出请求;以及
一物理存储装置阵列,耦接于该存储虚拟化控制器,用来通过该存储虚拟化控制器提供该主机存储空间;
其中该存储虚拟化控制器包括有一同位引擎,用以响应一中央处理器的指示而执行一特定磁盘阵列型态的同位功能,该同位引擎包括有:
一控制单元;
一控制单元缓冲器,作为该控制单元的数据暂存区,存储有运算时所需的乘法运算表;
至少一异或引擎,由该控制单元所启动,用以依据该乘法运算表选取数据流内数据,进而进行异或运算;以及
至少一数据缓冲器,作为该异或引擎运算过程中的数据暂存区。
17.一种存储虚拟拟化控制器的同位引擎产生数据的方法,其特征在于,包含以下步骤:
一控制单元启动至少一异或引擎;
该异或引擎依据乘法运算表而对数据流内的数据进行选取与异或运算,并将运算结果存储于一数据缓冲器。
18.根据权利要求17所述的方法,其特征在于,在该运算步骤后还包含有该异或引擎判断是否该欲进行运算的数据流都运算完成,若否,则重复进行该运算步骤直到所有该要进行运算的数据流都运算完成为止,并将该存储于该数据缓冲器的运算结果传送至该控制器的一存储器中。
19.根据权利要求17所述的方法,其特征在于还包含依所选定加罗瓦场的定义域,产生所有数值所对应的乘法运算表并预存于一存储器中。
20.根据权利要求19所述的方法,其特征在于还包含:
一中央处理器传送存储该要进行运算的数据流进行运算所需的该乘法运算表的存储器地址至该同位引擎;以及
该控制单元依据该存储器地址读取该所需的乘法运算表至一控制单元缓冲器中;
借以使该异或引擎得以依据该乘法运算表而对该选取与异或运算步骤。
21.根据权利要求19所述的方法,其特征在于还包含:
一中央处理器将该要进行运算的数据流运算时所应对应的该乘法运算表,依次提取整理而存于该存储器中;
该中央处理器对一寄存器填值进而启动该控制单元,并令该控制单元得知存放该经整理后的运算所需的乘法运算表的存储器起始地址;以及
该控制单元依据该存储器起始地址读取该所需乘法运算表至一控制单元缓冲器中;
借以使该异或引擎得以依据该乘法运算表而对该选取与异或运算步骤。
22.根据权利要求19所述的方法,其特征在于,在该控制器开机时,由一中央处理器进行该产生步骤。
23.根据权利要求19所述的方法,其特征在于,在控制器出厂前进行该产生步骤而借以得预先将该所有数值对应的乘法运算表存于该存储器内。
24.根据权利要求19所述的方法,其特征在于所述的存储器为一位于该同位引擎的乘法运算表缓冲器。
25.根据权利要求24所述的方法,其特征在于还包含:
一中央处理器将该待运算的数据流运算所对应的乘法运算表建立一索引;以及
该控制单元依据该索引令该乘法运算表缓冲器依照各数据流的运算顺序将所对应的该乘法运算表传送至一控制单元缓冲器中;
借以使该异或引擎得以依据该乘法运算表而对该选取与异或运算步骤。
26.根据权利要求17所述的方法,其特征在于,在该启动步骤前还可包含一中央处理器将运算所需的操作信息整理存储于一存储器内,此操作信息包含该同位引擎操作时所需的各种设定与信息。
27.根据权利要求26所述的方法,其特征在于所述的操作信息包括该要进行运算各数据流的存储地址、获取运算所需的乘法运算表存储器地址的信息以及运算结果应存储的存储器地址。
28.根据权利要求26所述的方法,其特征在于,在该中央处理器建立好操作信息的步骤后,还包含:将存储该操作信息的存储器起始地址填入一寄存器内,使该寄存器触发而启动该控制单元,并将该存储器起始地址传给该控制单元。
29.根据权利要求28所述的方法,其特征在于还包含该控制单元依据该存储器起始地址读取该操作信息至一控制单元缓冲器。
30.根据权利要求26所述的方法,其特征在于所述的整理该操作信息的方式为依据一事先定义的数据传输协定格式建立一操作指示表的方式。
31.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有一连带指针栏位,用以指出下一个操作指示表所处的存储器地址。
32.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有一中断栏位,用以设定是否于完成此表内所指示的数据的运算后,需产生一中断信号通知该中央处理器。
33.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有一运算单位数量栏位,用以指示每个数据流所应进行的运算单位的数量。
34.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有一运算单位大小栏位,用以设定运算单位的大小。
35.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有一启动简单异或运算指示栏位,用以指示启动该异或引擎对各数据流进行简单的异或运算。
36.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有一异或运算数量栏位,指示启动进行数据运算的异或引擎的数量。
37.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有:
多个数据流地址栏位,用以指示存储各数据流的存储器起始地址;
一数据流数量栏位,用以指示运算中数据流的数量;以及
一数据流长度栏位,用以指示需进行运算数据流的总长度。
38.根据权利要求30所述的方法,其特征在于所述的操作指示表包括有多个异或描述子栏位,包括有:
存储运算结果的存储器地址栏位,用以指示该运算结果所要存储的存储器地址;以及
乘法运算表的存储器存储地址栏位,用以指示取得该乘法运算表的信息。
39.根据权利要求38所述的方法,其特征在于所述的异或描述子栏位的数量与该控制器所采用的同位数据数目一致。
40.根据权利要求38所述的方法,其特征在于所述的乘法运算表的存储器存储地址栏位填入该乘法运算表的存储起始地址。
41.根据权利要求38所述的方法,其特征在于所述的乘法运算表的存储器存储地址栏位填入该乘法运算表的索引。
42.根据权利要求38所述的方法,其特征在于所述的操作指示表包括有一载入指示栏位,用以指示是否须依据这些异或描述子栏位中的存储运算结果的存储器地址栏位中的存储器地址,至存储器中载入数据流至该数据缓冲器,作为该异或引擎运算的初始数据。
43.根据权利要求17所述的方法,其特征在于,在异或引擎进行该选取与异或运算的前载入该数据缓冲器内数据作为该次运算的初始数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US59614505P | 2005-09-02 | 2005-09-02 | |
US60/596,145 | 2005-09-02 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1924785A true CN1924785A (zh) | 2007-03-07 |
CN100414489C CN100414489C (zh) | 2008-08-27 |
Family
ID=37817447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101285348A Active CN100414489C (zh) | 2005-09-02 | 2006-09-01 | 存储虚拟化控制器的同位引擎及同位引擎产生数据的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7805665B2 (zh) |
CN (1) | CN100414489C (zh) |
TW (1) | TWI361348B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8370717B1 (en) * | 2008-04-08 | 2013-02-05 | Marvell International Ltd. | Method and apparatus for flexible buffers in an XOR engine |
US8296515B1 (en) | 2009-05-22 | 2012-10-23 | Nvidia Corporation | RAID-6 computation system and method |
US8037391B1 (en) * | 2009-05-22 | 2011-10-11 | Nvidia Corporation | Raid-6 computation system and method |
US8578208B2 (en) | 2011-01-13 | 2013-11-05 | Micron Technology, Inc. | Determining location of error detection data |
US8452819B1 (en) | 2011-03-22 | 2013-05-28 | Amazon Technologies, Inc. | Methods and apparatus for optimizing resource utilization in distributed storage systems |
US9137250B2 (en) | 2011-04-29 | 2015-09-15 | Stephen Lesavich | Method and system for electronic content storage and retrieval using galois fields and information entropy on cloud computing networks |
US9037564B2 (en) | 2011-04-29 | 2015-05-19 | Stephen Lesavich | Method and system for electronic content storage and retrieval with galois fields on cloud computing networks |
US9569771B2 (en) | 2011-04-29 | 2017-02-14 | Stephen Lesavich | Method and system for storage and retrieval of blockchain blocks using galois fields |
US9361479B2 (en) | 2011-04-29 | 2016-06-07 | Stephen Lesavich | Method and system for electronic content storage and retrieval using Galois fields and geometric shapes on cloud computing networks |
US8683296B2 (en) | 2011-12-30 | 2014-03-25 | Streamscale, Inc. | Accelerated erasure coding system and method |
US8914706B2 (en) | 2011-12-30 | 2014-12-16 | Streamscale, Inc. | Using parity data for concurrent data authentication, correction, compression, and encryption |
US8839084B2 (en) * | 2012-03-09 | 2014-09-16 | Atmel Corporation | Digital architectures for serial data stream operations |
US10540253B2 (en) * | 2017-11-30 | 2020-01-21 | International Business Machines Corporation | Breakpoint with specified anchor points |
US10872012B2 (en) * | 2019-01-08 | 2020-12-22 | Western Digital Technologies, Inc. | XOR recovery schemes utilizing external memory |
CN109933546B (zh) * | 2019-01-29 | 2023-03-10 | 山东华芯半导体有限公司 | 一种ssd主控中的raid主动加速装置和加速方法 |
KR20200118311A (ko) | 2019-04-05 | 2020-10-15 | 삼성전자주식회사 | 데이터를 스왑하기 위한 메모리 장치 및 메모리 장치의 동작 방법 |
EP4042282A4 (en) * | 2019-10-09 | 2023-07-26 | Micron Technology, Inc. | STORAGE DEVICE WITH PRIVACY SCHEME |
CN111007984A (zh) * | 2019-10-22 | 2020-04-14 | 中国航空工业集团公司洛阳电光设备研究所 | 一种基于fpga的raid5存储***及实现方法 |
KR102529964B1 (ko) * | 2020-12-28 | 2023-05-08 | 주식회사 우리넷 | 갈루아 유한체 곱의 연산 방법 및 그 장치 |
US11966607B2 (en) * | 2021-09-29 | 2024-04-23 | Silicon Motion, Inc. | Method and non-transitory computer-readable storage medium and apparatus for accessing to encoding-history information |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5893138A (en) * | 1995-10-02 | 1999-04-06 | International Business Machines Corporation | System and method for improving channel hardware performance for an array controller |
US5960169A (en) * | 1997-02-27 | 1999-09-28 | International Business Machines Corporation | Transformational raid for hierarchical storage management system |
US6138125A (en) * | 1998-03-31 | 2000-10-24 | Lsi Logic Corporation | Block coding method and system for failure recovery in disk arrays |
US6912687B1 (en) * | 2000-05-11 | 2005-06-28 | Lsi Logic Corporation | Disk array storage subsystem with parity assist circuit that uses scatter-gather list |
CN1225735C (zh) * | 2002-11-07 | 2005-11-02 | 华为技术有限公司 | 一种磁盘阵列重构方法 |
US8301809B2 (en) * | 2003-07-02 | 2012-10-30 | Infortrend Technology, Inc. | Storage virtualization computer system and external controller thereof |
US7219289B2 (en) * | 2005-03-15 | 2007-05-15 | Tandberg Data Corporation | Multiply redundant raid system and XOR-efficient method and apparatus for implementing the same |
-
2006
- 2006-09-01 CN CNB2006101285348A patent/CN100414489C/zh active Active
- 2006-09-01 TW TW095132502A patent/TWI361348B/zh active
- 2006-09-01 US US11/514,159 patent/US7805665B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
TW200722979A (en) | 2007-06-16 |
US7805665B2 (en) | 2010-09-28 |
CN100414489C (zh) | 2008-08-27 |
TWI361348B (en) | 2012-04-01 |
US20070055905A1 (en) | 2007-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1924785A (zh) | 存储虚拟化控制器的同位引擎及同位引擎产生数据的方法 | |
CN1304936C (zh) | 直观显示对象文件的仿真器及其操作方法 | |
CN100338568C (zh) | 开发片上***用的开发环境的生成方法 | |
CN1320437C (zh) | 磁盘驱动器组子***及用于其中的外部模拟控制器 | |
CN101042676A (zh) | 存储***以及存储区域释放方法以及存储装置 | |
CN1684058A (zh) | 处理器 | |
CN1265274C (zh) | 存储设备控制装置和存储设备控制装置的控制方法 | |
CN1287270C (zh) | 重启动翻译的指令 | |
CN1227589C (zh) | 用于保存返回状态的数据处理设备和方法 | |
CN1501259A (zh) | 便于具有通用读/写模式的存储器数据存取的装置和方法 | |
CN1698035A (zh) | 数据存储装置、更新数据存储装置中的管理信息的方法和计算机程序 | |
CN1801073A (zh) | 储存虚拟化控制器、子***及***与方法 | |
CN1121014C (zh) | 具有risc结构的八位微控制器 | |
CN1783075A (zh) | 用于显示网络数据的方法、设备、处理器配置 | |
CN1702613A (zh) | 蒙哥马利模乘法器 | |
CN1728153A (zh) | 支持配置实体的选择性表示的配置说明语言的方法和*** | |
CN101075203A (zh) | 存储装置以及其恢复卷生成方法 | |
CN1629815A (zh) | 具有多数个存储***的数据处理*** | |
CN101034414A (zh) | 信息处理设备和方法以及程序 | |
CN1908904A (zh) | 实时内部简易监视器 | |
CN87108350A (zh) | 装入和校验中央子***控制存贮器的装置 | |
CN1549106A (zh) | 在分组数据上执行乘-加运算的装置 | |
CN1848097A (zh) | 存储器地址生成装置以及具有它的处理器、存储器地址生成方法 | |
CN101065725A (zh) | 命令供给装置 | |
CN1610879A (zh) | 计算机性能优化方法与按专用区段优化的非易失主存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |