CN117472288B - 一种基于raid0硬盘组的io写入方法及模型 - Google Patents
一种基于raid0硬盘组的io写入方法及模型 Download PDFInfo
- Publication number
- CN117472288B CN117472288B CN202311814109.4A CN202311814109A CN117472288B CN 117472288 B CN117472288 B CN 117472288B CN 202311814109 A CN202311814109 A CN 202311814109A CN 117472288 B CN117472288 B CN 117472288B
- Authority
- CN
- China
- Prior art keywords
- hard disk
- data
- address
- ddr
- raid0
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 41
- 238000004806 packaging method and process Methods 0.000 claims abstract description 11
- 230000008569 process Effects 0.000 claims description 12
- 230000000903 blocking effect Effects 0.000 claims description 5
- 238000004891 communication Methods 0.000 claims description 5
- 230000001502 supplementing effect Effects 0.000 claims description 4
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000009469 supplementation Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种基于RAID0硬盘组的IO写入方法及模型,创建与RAID0硬盘组的硬盘数相等个数的地址FIFO;更新进入DDR缓存中的数据增量,并同步给嵌入式CPU;接收嵌入式CPU根据数据增量查找到的SATA地址,在每个地址FIFO中按照相同顺序分别写入SATA地址;按照每个硬盘对应的地址FIFO,分别封装每个硬盘对应的IO写入指令,每个硬盘分别接收自己对应的IO写入指令,各自进行IO写入。通过为每个硬盘设置对应的地址FIFO,每个硬盘可以按照对应的地址FIFO写入数据,同一个IO不必等待其他硬盘完成写入,可以立即写入下一个数据块,且数据在硬盘中的分布依然满足RAID0硬盘组的特性。
Description
技术领域
本发明涉及计算机的数据写入技术领域,具体涉及一种基于RAID0硬盘组的IO写入方法及模型。
背景技术
多块硬盘组RAID0硬盘组阵列可以用于在需要快速传输大量数据的场景下,例如野外通信兵在对野外设备进行数据采集时,需要快速完整的将数据采集完。现有的采用多块硬盘组RAID0硬盘组进行存储的设备中,使得IO写入的整体性能跟预期偏差甚远,比单盘测试理论计算值差了将近一半,如采用16个单盘测试性能为400MB/s性能的硬盘组RAID0硬盘组,理论上性能应该为16*400 = 6400MB/s 附近,但实测后平均(1秒尺度)大约为3000MB/s。
这是由于当将一个数据分段存入硬盘组时,由于每个硬盘的状态和性能波动以及瞬时速率不一致,必然会导致每段数据写入硬盘的速度不同,有的硬盘先完成IO写入,有的硬盘后完成IO写入。而在将数据进行IO写入时,硬盘组共用一个地址FIFO,为了保证数据的完整性,在一个数据分段写入硬盘组时,即使最先完成写入的硬盘需要等待该数据的其他段数据全部写入硬盘后才能进行下一个数据的写入,这样硬盘组完整写入一个数据的时间就是最慢的那个硬盘写入完成的时间。因此,需要提出一种能够加快数据写入的方法,以满足快速写入数据的场景需求。
发明内容
本发明的目的在于提供一种基于RAID0硬盘组的IO写入方法及模型,通过设置与硬盘组硬件数量对应数量的地址FIFO,每个硬盘可以按照自己对应的FIFO写入数据,同一个IO不必等待其他硬盘完成写入,可以立即写入下一个数据块,且数据在硬盘中的分布依然满足RAID0硬盘组的特性。
一方面,本申请提供一种基于RAID0硬盘组的IO写入方法,包括以下步骤:
S1、创建与RAID0硬盘组的硬盘数量对应个数的若干个地址FIFO;
S2、更新进入各数据通道的DDR缓存中的数据量,得到数据增量,并将数据增量同步给嵌入式CPU;
S3、接收嵌入式CPU根据数据增量查找到的SATA地址,在每个地址FIFO中按照相同顺序分别写入SATA地址;
S4、按照每个硬盘对应的地址FIFO,分别封装每个硬盘对应的IO写入指令,每个硬盘分别接收自己对应的IO写入指令,各自进行IO写入。
本申请的发明构思为:
现有技术中,FPGA在创建地址FIFO时,地址FIFO的个数与数据传输的数据通道数量一致,一个通道中RAID0硬盘组中所有硬盘对应的是一个地址FIFO,这样,在硬盘组并行写入一个数据块时,需要等待每个硬盘完成该数据块对应的数据量的写入,若存在有些硬盘写入速度较慢的,则下一数据块时需等待,并且,地址FIFO中的地址一开始由嵌入式CPU查询后创建的是一个较长的地址FIFO,数据在写入时会查询地址FIFO是否为空且FIFO中剩余地址的个数是否低于某个设定门限,若低于门限值则CPU再次查询后再给FIFO补充地址。
针对此,本申请中通过设置与硬盘数量相同的地址FIFO,为每个硬盘配了一个地址FIFO,每个硬盘按照自己的地址FIFO写入每个硬盘需要写入的一个数据块对应的数据,完成该硬盘自身对应的一次IO写入(一次IO写入完成为硬盘组中所有硬盘完成对一个数据块的写入),不必等待其他未完成的硬盘, 可以立即写入下一个数据块的对应数据,每个硬盘分别写入时,相同数据块在硬盘中的写入地址是相同的,因此,数据在硬盘中的分布依然满足RAID0硬盘组的特性。通过这种方式,每个硬盘的数据写入无需互相等待,对于数据量较大且连续需要快速采集的场景,例如野外设备的数据采集来说,可以提高数据采集存储的速度,减少等待时间。另外,本申请中各地址FIFO中的地址是动态更新的,定时更新进入DDR缓存中的数据量,根据数据增量,动态地为地址FIFO写入SATA地址,从而实现整个数据采集过程的不断连续。
在一种可选地实施方式中,步骤S4中,对每个硬盘,封装IO写入指令的方法为:
查询该硬盘对应的地址FIFO的状态,若地址FIFO为非空时,则从地址FIFO中读取一个SATA地址,并将该硬盘对应取数的DDR地址和该读取的SATA地址封装到IO写入指令中,不断循环上述步骤。
在一种可选地实施方式中,硬盘对应取数的DDR地址的计算方法为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT;
其中,DDR_ADDR表示取数的DDR地址,CH_DDR_BASE表示数据通道的DDR缓存基地址, CNT表示每个硬盘自己完成BlockSize的次数,RAIDSIZE表示RAID0硬盘组组阵后一个数据块大小,Idx表示对应的硬盘编号,DISKCNT表示RAID0硬盘组的硬盘数量。
在一种可选地实施方式中,还包括步骤S5:重复步骤 S2-S4,给每个硬盘对应的地址FIFO中不断补充新的地址。
在一种可选地实施方式中,步骤S2中得到数据增量的具体过程为:
S21、接收数据,将数据划分为固定大小的数据块,依次存储到DDR缓存中;
S22、查询进入DDR缓存的数据量大小,若DDR缓存中接收到了一个数据块大小的数据量,则作为一个数据增量;
S23、统计数据进入DDR缓存中数据块的数量,将该数据块的数量作为数据增量。
在一种可选地实施方式中,固定大小的数据块为RAID0硬盘组组阵后一次IO写入的数据量大小。
第二方面,本申请提供一种基于RAID0硬盘组的IO写入模型,包括FPGA装置、嵌入式CPU装置和RAID0硬盘组硬盘阵列,FPGA装置通过PCIe总线与嵌入式CPU装置通信连接,FPGA通过SATA接口向RAID0硬盘组硬盘阵列写入数据;
嵌入式CPU装置,用于根据FPGA同步的数据增量查找SATA地址,数据增量由FPGA装置对进入DDR缓存的数据量进行统计后得到的;
FPGA装置,用于创建与RAID0硬盘组的硬盘数量对应个数的若干个地址FIFO;在每个地址FIFO中按照相同顺序分别写入所述SATA地址; 还用于按照每个硬盘对应的地址FIFO,分别封装每个硬盘对应的IO写入指令;
RAID0硬盘组硬盘阵列,每个硬盘分别接收自己对应的IO写入指令,各自进行IO写入。
在一种可选地实施方式中,IO写入指令包括硬盘对应取数的DDR地址和从对应的地址FIFO中读取的SATA地址。
在一种可选地实施方式中,硬盘对应取数的DDR地址的计算方法为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT;
其中,DDR_ADDR表示取数的DDR地址,CH_DDR_BASE表示数据通道的DDR缓存基地址, CNT表示每个硬盘自己完成BlockSize的次数,RAIDSIZE表示RAID0硬盘组组阵后一个数据块大小,Idx表示对应的硬盘编号,DISKCNT表示RAID0硬盘组的硬盘数量。
在一种可选地实施方式中,一个数据增量对应一个数据块,一个数据块的数据量为RAID0硬盘组组阵后一次IO写入的数据量大小。
本发明具有的有益效果:
通过设置与硬盘数量相同的地址FIFO,为每个硬盘配了一个地址FIFO,每个硬盘按照自己的地址FIFO写入每个硬盘需要写入的一个数据块对应的数据,完成该硬盘自身对应的一次IO写入(一次IO写入完成为硬盘组中所有硬盘完成对一个数据块的写入),不必等待其他未完成的硬盘, 可以立即写入下一个数据块的对应数据,每个硬盘分别写入时,相同数据块的在硬盘中的写入地址是相同的,因此,数据在硬盘中的分布依然满足RAID0硬盘组的特性。通过这种方式,每个硬盘的数据写入无需互相等待,对于数据量较大且连续需要快速采集的场景,例如野外设备的数据采集来说,可以提高数据采集的速度,减少等待时间。
附图说明
图1为现有技术中数据准备写入硬盘时的流程示意图;
图2为现有技术中数据写入硬盘中的流程示意图;
图3为本发明实施例提供的IO 写入方法整体流程示意图 ;
图4为本发明实施例提供的数据准备写入硬盘时的流程示意图;
图5为本发明实施例提供的数据写入硬盘的第一次IO写入的流程示意图;
图6为本发明实施例提供的数据写入硬盘的第二次IO写入的流程示意图;
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
另外,为了清楚和简洁起见,可能省略了对公知的结构、功能和配置的描述。本领域普通技术人员将认识到,在不脱离本公开的精神和范围的情况下,可以对本文描述的示例进行各种改变和修改。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
如图1、图2所示,现有技术中,当数据通过通道1从FPGA的高速serdes口进入该通道的DDR缓存,嵌入式CPU将根据数据量将硬盘SATA地址通过通信总线发送到FPGA的FIFO中,准备写入。通道指的是FPGA传输数据的类型通道,一种类型的数据通过一个通道传输到FPGA的DDR缓存中,并且FPGA创建的地址FIFO个数与通道数量相同;则写入的流程为:
1.文件系统创建一个文件,嵌入式CPU查询硬盘组的空闲空间,并获得硬盘对应的Sector号作为SATA地址,然后嵌入式CPU通过PCIe总线将SATA地址传输给FPGA;FPGA创建与通道数量相同个数的地址FIFO依次填入SATA地址;
2.数据从FPGA的高速serdes口进入数据对应通道的DDR缓存,在DDR缓存中将一个数据均分为与硬盘组硬盘数量相等的多个数据块进行存储;
3.FPGA判断地址FIFO是否为空且DDR缓存中是否有一个数据块的数据量,若满足则从地址FIFO中取一个SATA地址(对应一个Sector号),示例为00地址;FPGA同时判断地址FIFO中剩余地址的个数是否低于设定门限值,若低于,通知嵌入式CPU查询硬盘组的空闲空间,重新发送SATA地址到地址FIFO中进行地址补充;
4. FPGA将数据写入指令进行封装,写入指令包括数据存储指定的DDR缓存地址以及该数据将写入的Sector号;
5.FPGA通过SATA接口执行写入指令,将多个数据块并行发给对应的硬盘,等待所有硬盘完成各自数据块的写入,完成一个数据的写入;
6.重复步骤3-步骤5,完成下一数据的写入。
从现有的数据写入可以看出,若标称速率为400MB/s的硬盘,每个数据块(假设512KB)的理论平均消耗时间为1 / 400,000,000 * 524288 秒 ≈ 1.31ms ,但是由于硬盘的性能不确定性,存在波动。所有实际情况中IO响应时间是在1.31上下波动, 组阵后的硬盘数量越多,由于所有硬盘都采用一个地址FIFO,所有硬盘需要等待同一个数据的所有数据块全部写入后才会进行下一数据的写入,那么拖慢性能的情况几乎成了必然现象。假如某个硬盘的IO响应时间某次为2.5ms, 一个8M的数据,传输给16个硬盘组成的硬盘组,每个数据块的大小为512KB,此时计算下来的写入瞬时速率为524288 / 0.0025 ≈ 209MB/s ,比标称值400MB/s就小了将近一半的性能,这时其他即使其他响应快的硬盘先完成也要等这个最慢的硬盘完成后才能写下一个8M。 所以呈现出来组阵后的硬盘性能为209*16 =3344MB/s,比理论值6400MB/s小了将近一半;
针对此问题,本申请提出了以下解决方案:
实施例1
如图3所示,本实施例提供一种基于RAID0硬盘组的IO写入方法,包括以下步骤:
S1、创建与RAID0硬盘组的硬盘数量对应个数的若干个地址FIFO;
S2、更新并统计进入各数据通道的DDR缓存中的数据量,得到数据增量,并将数据增量同步给嵌入式CPU;
步骤S2中得到数据增量的具体过程为:
S21、接收数据,将数据划分为固定大小的数据块,数据块依次存储到DDR缓存中;将DDR缓存空间划分为多个数据量大小相同的缓存BLOCKSIZE,每个BlockSize的大小为一个数据块的大小;每个数据块的大小为RAID0硬盘组组阵后一次IO所有硬盘写入的数据量总和;
S22、查询进入DDR缓存的数据量大小,若DDR缓存中接收到了一个数据块大小的数据量,则作为一个数据增量;
S23、统计数据进入DDR缓存中数据块的数量,将该数据块的数量作为数据增量。
S3、接收嵌入式CPU根据数据增量查找到的SATA地址,在每个地址FIFO中按照相同顺序分别写入SATA地址;
嵌入式CPU的文件系统根据数据增量查找硬盘组中空闲的与数据增量数量相同的地址,并将查找出的地址发送给FPGA的所有FIFO;
S4、按照每个硬盘对应的地址FIFO,分别封装每个硬盘对应的IO写入指令,每个硬盘分别接收自己对应的IO写入指令,各自进行IO写入。
具体实施方式中,步骤S4每个硬盘单独执行自己对应的IO写入流程,每个硬盘依次从自己对应的地址FIFO中取出地址,并在硬盘对应的该地址中写入数据,由于FPGA也在不断更新进入DDR的数据量,因此,CPU也一直在查询SATA地址,并不断将新增的地址加入地址FIFO中,使整个流程可以不停地运行,对每个硬盘封装IO写入指令的方法为:
查询该硬盘对应的地址FIFO的状态,若地址FIFO为非空时,则从地址FIFO中读取一个SATA地址,并将该硬盘对应取数的DDR地址和该读取的SATA地址封装到IO写入指令中,不断重复上述过程,继续从地址FIFO中读取地址,进行下一IO的写入,每个硬盘独自进行对应的数据的连续写入。
具体地,硬盘对应取数的DDR地址的计算方法为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT;
其中,DDR_ADDR表示取数的DDR地址,CH_DDR_BASE表示数据通道的DDR缓存基地址(示例为0x00000000),CNT表示每个硬盘自己完成BlockSize的次数(以下示例中每个硬盘完成一次的数据量为512K),RAIDSIZE表示组阵后的一个数据块大小 (以下示例中为8M),Idx表示对应的硬盘编号(以下示例为0~15),DISKCNT表示RAID0硬盘组的硬盘数量(以下示例中为16个)。
步骤S5:重复步骤 S2-S4,给每个硬盘对应的地址FIFO中不断补充新的地址。
为了更好说明本申请的流程步骤,如图4所示,给出了一种示例,数据通过FPGA的高速serdes口进入数据类型对应通道的DDR缓存中,本示例中RAID硬盘组包括16个硬盘,RAID硬盘组一次IO写入的数据块的大小为8M,则每个硬盘一次IO写入的数据量大小为512K,则DDR缓存中每个BlockSize的大小为8M。对应地,在FPGA中设置了16个SATA地址FIFO, 每个地址FIFO对应一个硬盘。
如图4所示,数据准备阶段:FPGA和嵌入式CPU均收到启动命令,FPGA查询已经进入DDR缓存中的数据量,假如已经有4个8M的数据进入FPGA通道1的DDR缓存中,由此,更新的数据增量中更新为4,表示有4个数据块完全进入DDR缓存中,将数据增量同步给嵌入式CPU,嵌入式CPU中的文件系统根据数据增量查找到了4个地址,并把查出的4个地址发送给了FPGA,FPGA将收到的地址分别全部写到16个FIFO中。如图所示,4个SATA地址分别为00、01、05、06,每个地址FIFO中均存储了这4个地址。
每个硬盘的数据写入流程:
1、第一个数据块对应的IO写入
每个硬盘在自己对应的FIFO中取出一个地址,作为硬盘的写入地址,硬盘从自己对应的DDR位置读取数据开始写入第一个IO,如图5所示,图中灰色填充部分正在进行数据写入的数据块以及数据块将要写入的硬盘的位置,具体地,可以从图中灰色部分看出,在第一个IO中,每个硬盘将要从DDR中取出数据块放入对应地硬盘的SATA地址中,由于是第一个IO,每个硬盘的第一个SATA地址都为00,DDR地址按照硬盘对应取数的DDR地址的计算方法得到;
2、第二个数据块的IO写入
如图6所示,灰色填充部分表示正在进行数据写入的数据块以及数据块将要写入的硬盘的位置,且从图6中可以看出,第二个硬盘的第一个IO写入速度较快已先于其他硬盘完成了第一次IO的写入,正在进行第二个IO的写入(在图中以灰色填充部分进行标示),其不必等待其他硬盘的写入完成,即可进人第二个数据量的IO写入。第2个硬盘完成第一个IO的写入,接着写入第二个数据块的512KB的数据, 此时第2个硬盘在自己对应的地址FIFO中读取的SATA地址为01;而从整个硬盘组来看,其他硬盘还未完成第一数据块的IO写入,第2个硬盘率先进入第二个数据块的写入。
由于数据块存储时有存储的DDR地址,每个512KB大小的数据对应的在DDR缓存中对应一个DDR地址,由于数据是连续的,且与每个硬盘对应,因此,需要通过计算得到每个硬盘存储的每个数据块的512KB数据对应的DDR地址,例如,第一个硬盘读取第一个数据块的DDR地址为0x0000_0000,而第二个硬盘读取第一个数据块的DDR地址为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT
=0x00000000+0*8M+1*8M/16
=0x0008_0000
对于第二个数据块,第二个硬盘对应取数的DDR地址对应的计算公式为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT
=0x00000000+1*8M+1*8M/16
=0x0088_0000
3、第N个数据块的IO写入
硬盘组中各个硬盘之间相互独立,每个硬盘按照自己对应的地址FIFO以及DDR地址不断写入数据,并且FPGA周期性更新数据,当数据量不断增加时,CPU感知到数据量有变化时,根据通道自己的地址查询算法,给硬盘的FIFO中不断的补充新的地址,让整个流程持续的进行下去;
由此可以看出,硬盘无需等待即可完成自身的IO写入,相当于整个硬盘组由原来的单线程改进为了多个硬盘并行传输的多线程处理过程,可以提高数据采集的速度。
实施例2
本申请提供一种基于RAID0硬盘组的IO写入模型,包括FPGA装置、嵌入式CPU装置和RAID0硬盘组硬盘阵列,FPGA装置通过PCIe总线与嵌入式CPU装置通信连接,FPGA通过SATA接口向RAID0硬盘组硬盘阵列写入数据;
嵌入式CPU装置,用于根据FPGA同步的数据增量查找SATA地址,数据增量由FPGA装置对进入DDR缓存的数据量进行统计后得到的;
FPGA装置,用于创建与RAID0硬盘组的硬盘数量对应个数的若干个地址FIFO;在每个地址FIFO中按照相同顺序分别写入所述SATA地址; 还用于按照每个硬盘对应的地址FIFO,分别封装每个硬盘对应的IO写入指令;
RAID0硬盘组硬盘阵列,每个硬盘分别接收自己对应的IO写入指令,各自进行IO写入。
在一种可选地实施方式中,IO写入指令包括硬盘对应取数的DDR地址和从对应的地址FIFO中读取的SATA地址。
在一种可选地实施方式中,硬盘对应取数的DDR地址的计算方法为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT;
其中,DDR_ADDR表示取数的DDR地址,CH_DDR_BASE表示数据通道的DDR缓存基地址, CNT表示每个硬盘自己完成BlockSize的次数,RAIDSIZE表示RAID0硬盘组组阵后一个数据块大小,Idx表示对应的硬盘编号,DISKCNT表示RAID0硬盘组的硬盘数量。
在一种可选地实施方式中,一个数据增量对应一个数据块,一个数据块的数据量为RAID0硬盘组组阵后一次IO写入的数据量大小。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质,在本发明的精神和原则之内,对以上实施例所作的任何简单的修改、等同替换与改进等,均仍属于本发明技术方案的保护范围之内。
Claims (9)
1.一种基于RAID0硬盘组的IO写入方法,其特征在于,包括以下步骤:
S1、创建与RAID0硬盘组的硬盘数量对应个数的若干个地址FIFO;
S2、更新进入DDR缓存中的数据量,得到数据增量,并将数据增量同步给嵌入式CPU;
S3、接收嵌入式CPU根据数据增量查找到的SATA地址,在每个地址FIFO中按照相同顺序分别写入SATA地址;
S4、按照每个硬盘对应的地址FIFO,分别封装每个硬盘对应的IO写入指令,每个硬盘分别接收自己对应的IO写入指令,各自进行IO写入;
S5、重复步骤 S2-S4,给每个硬盘对应的地址FIFO中不断补充新的地址。
2.根据权利要求1所述的一种基于RAID0硬盘组的IO写入方法,其特征在于,步骤S4中,对每个硬盘,封装IO写入指令的方法为:
查询该硬盘对应的地址FIFO的状态,若地址FIFO为非空时,则从地址FIFO中读取一个SATA地址,并将该硬盘对应取数的DDR地址和该读取的SATA地址封装到IO写入指令中发送给该硬盘。
3.根据权利要求2所述的一种基于RAID0硬盘组的IO写入方法,其特征在于,硬盘对应取数的DDR地址的计算方法为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT ;
其中,DDR_ADDR表示取数的DDR地址,CH_DDR_BASE表示数据通道的DDR缓存基地址,CNT表示每个硬盘自己完成BlockSize的次数,RAIDSIZE表示RAID0硬盘组组阵后一个数据块大小,Idx表示对应的硬盘编号,DISKCNT表示RAID0硬盘组的硬盘数量。
4.根据权利要求1所述的一种基于RAID0硬盘组的IO写入方法,其特征在于,步骤S2中得到数据增量的具体过程为:
S21、接收数据,将数据划分为固定大小的数据块,依次存储到DDR缓存中;
S22、查询进入DDR缓存的数据量大小,若DDR缓存中接收到了一个数据块大小的数据量,则作为一个数据增量;
S23、统计数据进入DDR缓存中数据块的数量,将该数据块的数量作为数据增量。
5.根据权利要求4所述的一种基于RAID0硬盘组的IO写入方法,其特征在于,固定大小的数据块为RAID0硬盘组组阵后一次IO写入的数据量大小。
6.一种基于RAID0硬盘组的IO写入模型,其特征在于,包括FPGA装置、嵌入式CPU装置和RAID0硬盘组硬盘阵列,FPGA装置通过PCIe总线与嵌入式CPU装置通信连接,FPGA通过SATA接口向RAID0硬盘组硬盘阵列写入数据;
嵌入式CPU装置,用于根据FPGA同步的数据增量查找SATA地址,数据增量由FPGA装置对进入DDR缓存的数据量进行统计后得到的;
FPGA装置,用于创建与RAID0硬盘组的硬盘数量对应个数的若干个地址FIFO并给每个硬盘对应的地址FIFO中不断补充新的地址;在每个地址FIFO中按照相同顺序分别写入所述SATA地址;还用于按照每个硬盘对应的地址FIFO,分别封装每个硬盘对应的IO写入指令;
RAID0硬盘组硬盘阵列,每个硬盘分别接收自己对应的IO写入指令,各自进行IO写入。
7.根据权利要求6所述的一种基于RAID0硬盘组的IO写入模型,其特征在于,IO写入指令包括硬盘对应取数的DDR地址和从对应的地址FIFO中读取的SATA地址。
8.根据权利要求7所述的一种基于RAID0硬盘组的IO写入模型,其特征在于,硬盘对应取数的DDR地址的计算方法为:
DDR_ADDR = CH_DDR_BASE + CNT * RAIDSIZE + idx * RAIDSIZE/DISKCNT ;
其中,DDR_ADDR表示取数的DDR地址,CH_DDR_BASE表示数据通道的DDR缓存基地址,CNT表示每个硬盘自己完成BlockSize的次数,RAIDSIZE表示RAID0硬盘组组阵后一个数据块大小,Idx表示对应的硬盘编号,DISKCNT表示RAID0硬盘组的硬盘数量。
9.根据权利要求7所述的一种基于RAID0硬盘组的IO写入模型,其特征在于, 一个数据增量对应一个数据块,一个数据块的数据量为RAID0硬盘组组阵后一次IO写入的数据量大小。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311814109.4A CN117472288B (zh) | 2023-12-27 | 2023-12-27 | 一种基于raid0硬盘组的io写入方法及模型 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311814109.4A CN117472288B (zh) | 2023-12-27 | 2023-12-27 | 一种基于raid0硬盘组的io写入方法及模型 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117472288A CN117472288A (zh) | 2024-01-30 |
CN117472288B true CN117472288B (zh) | 2024-04-16 |
Family
ID=89626009
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311814109.4A Active CN117472288B (zh) | 2023-12-27 | 2023-12-27 | 一种基于raid0硬盘组的io写入方法及模型 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117472288B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07319638A (ja) * | 1994-05-26 | 1995-12-08 | Hitachi Ltd | ディスクアレイのバッファメモリ管理方法 |
JP2008152662A (ja) * | 2006-12-19 | 2008-07-03 | Kwok-Yan Leung | 大量のハードディスク群から迅速に検索するシステムおよび方法 |
CN102360342A (zh) * | 2011-10-11 | 2012-02-22 | 中国人民解放军国防科学技术大学 | 海量影像数据快速存储显示固态硬盘 |
CN106776403A (zh) * | 2016-11-11 | 2017-05-31 | 济南浪潮高新科技投资发展有限公司 | 一种基于fpga的高速大容量存储系统及其实现方法 |
US9864546B1 (en) * | 2015-01-08 | 2018-01-09 | Marvell Israel (M.I.S.L) Ltd. | FIFO-based operations for redundant array of independent disks (RAID) device |
CN110069442A (zh) * | 2019-04-24 | 2019-07-30 | 北京计算机技术及应用研究所 | 一种基于zynq系列fpga的超高速数据采集装置及方法 |
CN110688323A (zh) * | 2018-07-06 | 2020-01-14 | 华为技术有限公司 | 一种系统控制器和系统垃圾回收方法 |
CN113742282A (zh) * | 2021-09-14 | 2021-12-03 | 北京坤驰科技有限公司 | 一种基于fpga的sata ip核及数据存储方法 |
WO2023284753A1 (zh) * | 2021-07-12 | 2023-01-19 | 杭州海康威视数字技术股份有限公司 | 基于smr硬盘的raid创建、针对raid的数据写入及raid恢复方法 |
CN116561054A (zh) * | 2023-05-06 | 2023-08-08 | 杭州电子科技大学 | 一种基于fpga的多路数据低延迟ddr片外访存方法 |
CN117289871A (zh) * | 2023-10-10 | 2023-12-26 | 上海飞斯信息科技有限公司 | 一种基于fpga实现的raid存储系统及方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200500857A (en) * | 2003-04-09 | 2005-01-01 | Netcell Corp | Method and apparatus for synchronizing data from asynchronous disk drive data transfers |
-
2023
- 2023-12-27 CN CN202311814109.4A patent/CN117472288B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07319638A (ja) * | 1994-05-26 | 1995-12-08 | Hitachi Ltd | ディスクアレイのバッファメモリ管理方法 |
JP2008152662A (ja) * | 2006-12-19 | 2008-07-03 | Kwok-Yan Leung | 大量のハードディスク群から迅速に検索するシステムおよび方法 |
CN102360342A (zh) * | 2011-10-11 | 2012-02-22 | 中国人民解放军国防科学技术大学 | 海量影像数据快速存储显示固态硬盘 |
US9864546B1 (en) * | 2015-01-08 | 2018-01-09 | Marvell Israel (M.I.S.L) Ltd. | FIFO-based operations for redundant array of independent disks (RAID) device |
CN106776403A (zh) * | 2016-11-11 | 2017-05-31 | 济南浪潮高新科技投资发展有限公司 | 一种基于fpga的高速大容量存储系统及其实现方法 |
CN110688323A (zh) * | 2018-07-06 | 2020-01-14 | 华为技术有限公司 | 一种系统控制器和系统垃圾回收方法 |
CN110069442A (zh) * | 2019-04-24 | 2019-07-30 | 北京计算机技术及应用研究所 | 一种基于zynq系列fpga的超高速数据采集装置及方法 |
WO2023284753A1 (zh) * | 2021-07-12 | 2023-01-19 | 杭州海康威视数字技术股份有限公司 | 基于smr硬盘的raid创建、针对raid的数据写入及raid恢复方法 |
CN113742282A (zh) * | 2021-09-14 | 2021-12-03 | 北京坤驰科技有限公司 | 一种基于fpga的sata ip核及数据存储方法 |
CN116561054A (zh) * | 2023-05-06 | 2023-08-08 | 杭州电子科技大学 | 一种基于fpga的多路数据低延迟ddr片外访存方法 |
CN117289871A (zh) * | 2023-10-10 | 2023-12-26 | 上海飞斯信息科技有限公司 | 一种基于fpga实现的raid存储系统及方法 |
Non-Patent Citations (3)
Title |
---|
一种高速数据采集及存储系统的研究;张强;杨瑞霞;宁培桓;骆新江;;河北工业大学学报;20090415(第02期);第78-82页 * |
一种高速数据采集及存储系统的研究与设计;隋晓红;刘付刚;李志军;;电测与仪表;20070825(第08期);第48-52页 * |
基于PCI和FPGA的InSAR基线测量实时采集系统;王静;刘忠胜;丁斌;向茂生;韦立登;孙曦蕊;;中国科学院研究生院学报;20130115(第01期);第53-59页 * |
Also Published As
Publication number | Publication date |
---|---|
CN117472288A (zh) | 2024-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106716334B (zh) | 文件系统卷内的高效数据移动 | |
CN109219805B (zh) | 一种多核系统内存访问方法、相关装置、系统及存储介质 | |
US9053019B2 (en) | Non-volatile memory device, a data processing device using the same, and a swapping method used by the data processing and non-volatile memory devices | |
CN109388590B (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
JP2018163659A (ja) | 逆キャッシュテーブルを用いるハードウェアベースのマップアクセラレーション | |
US9606928B2 (en) | Memory system | |
US9824025B2 (en) | Information processing system, information processing device, information processing program and information processing method | |
CN112214158B (zh) | 主机输出输入命令的执行装置及方法及计算机可读取存储介质 | |
US8838873B2 (en) | Methods and apparatus for data access by a reprogrammable circuit module | |
CN103914483A (zh) | 文件存储方法、装置及文件读取方法、装置 | |
CN110851474A (zh) | 数据查询方法、数据库中间件、数据查询设备及存储介质 | |
US11687339B2 (en) | Data processing method and apparatus, and related product | |
CN117472288B (zh) | 一种基于raid0硬盘组的io写入方法及模型 | |
CN103605833A (zh) | 一种对存储阵列系统的性能进行仿真的方法及装置 | |
CN117413247A (zh) | 一种数据处理方法、设备及系统 | |
CN1653346A (zh) | 有多用途存储器的测试器系统 | |
WO2018199796A1 (en) | Consolidating temporally-related data within log-based storage | |
CN116610262A (zh) | 降低ssd顺序读延时的方法、装置、设备及介质 | |
US10394727B2 (en) | Semiconductor memory device with data buffering | |
US20230028997A1 (en) | Sgl processing acceleration method and storage device | |
US7421536B2 (en) | Access control method, disk control unit and storage apparatus | |
CN114327272A (zh) | 一种数据处理方法、固态硬盘控制器及固态硬盘 | |
CN109032965B (zh) | 一种数据读取方法、主机及存储设备 | |
CN111309263A (zh) | 一种分布式对象存储中的逻辑卷实现方法 | |
CN116301636B (zh) | 一种管理数据结构的方法以及基于哈希算法的硬件加速器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |