具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种数据处理方法和实现该方法的数据处理装置。为了更好的理解本发明实施例的技术方案,下面结合附图对本发明提供的实施例进行详细地描述。
参见图1,图1是本发明实施例提供的数据处理方法第一实施例的流程图。在本发明实施例中,RAID由多个硬盘组成,硬盘的类型可以为SSD硬盘。本发明实施例提供的数据处理方法可以包括:
A1、接收写请求命令,写请求命令中携带当前待写入数据的第一目标地址,第一目标地址为RAID中逻辑单元的地址。
具体的,数据处理装置可以接收主机发送的写请求命令。此时写请求命中携带当前待写入数据的第一目标地址,该第一目标地址可以为RAID中逻辑单元的地址。
A2、根据写请求命令获取当前待写入数据的长度。
具体的,数据处理装置在接收到写请求命令后,根据写请求命令获取当前待写入数据的长度。
A3、在当前待写入数据的长度小于或等于第一阈值时,将当前待写入的数据顺序写入RAID中预置的暂存块池中。
具体的,数据处理装置可以判断当前待写入逻辑单元的数据的长度是否小于或等于第一阈值时,即判断该写请求命令是否为随机小写命令,若是,则将当前待写入逻辑单元的数据顺序写入RAID中预置的暂存块池中,否则直接将该数据写入逻辑单元中的第一目标地址所对应的存储空间中。在本发明实施例中,RAID在出厂之前可以预先设置好逻辑单元的空间,进而对逻辑单元分配暂存块池。本发明实施例还可以预先建立从RAID中逻辑单元的地址到暂存块池的地址之间的映射表,其中RAID中逻辑单元的地址到暂存块池的地址之间的映射可以为一一映射。此时该映射表的映射表项可以为第一预设值,以便于后续对该映射表进行更新。
其中,数据处理装置在暂存块池中顺序写入当前待写入的数据,该数据在暂存块池中占用的空间的地址为暂存地址。
A4、根据写入的暂存地址更新预置的映射表中与RAID中逻辑单元的地址对应的表项,暂存地址为数据写入的暂存块池的地址,映射表保存RAID中逻辑单元的地址和暂存地址之间的映射。
具体的,数据处理装置可以在将数据写入暂存块池之后,将映射表中与第一目标地址相对应的映射表项更新为写入数据的暂存地址,映射表的映射表项为RAID中逻辑单元的地址和暂存地址之间的映射,即数据处理装置可以将映射表中的第一预设值更新为写入数据的暂存地址。
A5、在暂存块池的剩余空间不满足第一写入条件时,按照RAID中逻辑单元的地址和暂存地址之间的映射,将写入暂存块池中的数据整合到对应的逻辑单元中。
具体的,数据处理装置可以在更新映射表之后,判断暂存块池的剩余空间是否满足第一写入条件,例如判断剩余空间是否小于或等于第二阈值或其它的限制条件。数据处理装置在暂存块池的剩余空间小于或等于第二阈值时,按照RAID中逻辑单元的地址和暂存地址之间的映射,将写入暂存块池中的数据整合到对应的逻辑单元中。其中,整合可以理解为将写入暂存块池中的数据首先复制到对应的逻辑单元中,然后从暂存块池中删除该数据。
在本次接收到的写请求命令执行完毕后,接收下一写请求命令,开始执行步骤A1。若暂存块池的剩余空间满足第一写入条件,则继续接收下一写请求命令,开始执行步骤A1。
在本发明实施例中,在接收到的写请求命令为随机小写命令的情况下,将随机小写命令需要写入的数据顺序写入到暂存块池中,并且在暂存块池的剩余空间不满足第一写入条件时,将暂存块池中的数据整合到对应的第一目标地址中,从而完成随机小写命令的执行过程。与现有技术相比,本发明实施例在连续的地址空间中写入数据,可以提高随机小写命令的执行效率,进而提升RAID系统的性能。
在本发明实施例中,若RAID在出厂之前没有设置暂存块池和映射表,则本发明实施例在执行步骤A1之前还包括:
在组成RAID的硬盘中创建暂存块池,暂存块池中包括至少一个暂存块;以及创建RAID的逻辑单元的地址和暂存块池的地址之间的映射表。
具体的,数据处理装置可以在组成RAID的硬盘中创建暂存块池,暂存块池中包括至少一个暂存块。例如将硬盘后端的一部分空间划分为暂存块池,用于暂存数据。
数据处理装置可以在创建暂存块池完成之后,创建RAID的逻辑单元的地址和暂存块池的地址之间的映射表,此时该映射表中的映射表项为第一预设值,例如为0。其中,主机可以在逻辑单元中存储数据。
本发明实施例可以在RAID中没有预设暂存块池和映射表的情况下,主动创建暂存块池和映射表,进而实现在RAID中顺序写入随机小写命令,可以适应更多的应用场景,灵活性更好。
在本发明另一实施例中,数据处理装置创建RAID的逻辑单元的地址和暂存块池的地址之间的映射表完成之后,还可以将映射表分段保存在硬盘的保留区中,保存在硬盘的保留区中的映射表中包括当前硬盘的逻辑单元的地址和暂存块池的地址之间的映射,即组成RAID的硬盘中逻辑单元的地址和暂存地址之间的映射均保存在该硬盘的保留区中。数据处理装置可以识别RAID中的热点逻辑单元,即访问频率高的逻辑单元,将热点逻辑单元的映射表从硬盘中读取到内存中,以便于对映射表进行更新。
参见图2,图2是本发明实施例提供的数据处理方法中更新映射表的方法流程图。
在本发明实施例中,数据处理装置根据写入的暂存地址更新预置的映射表中与所述第一目标地址对应的映射表项(步骤A4)的过程可以包括:
B1、在第一目标地址对应的存储空间所在的逻辑单元是热点逻辑单元时,在内存中将映射表中与第一目标地址相对应的映射表项更新为写入数据的暂存地址。
具体的,数据处理装置判断第一目标地址对应的存储空间所在的逻辑单元是否为热点逻辑单元,若第一目标地址对应的存储空间所在的逻辑单元是热点逻辑单元,则在内存中将映射表中与第一目标地址相对应的映射表项更新为写入数据的暂存地址。其中,RAID系统可以获取逻辑单元的访问频率,将访问频率大于频率阈值的逻辑单元确定为热点逻辑单元。其中,频率阈值可以根据实际的访问情况来灵活设置。
需要指出的是,上述将热点逻辑单元的映射表读取到内存的步骤可以包括在步骤A4中,即首先将映射表读取到内存中,然后执行更新映射表项的步骤。
B2、在第一目标地址对应的存储空间所在的逻辑单元是热点逻辑单元时,在第一目标地址对应的硬盘的保留区中将映射表中与第一目标地址相对应的映射表项更新为写入数据的暂存地址。
具体的,数据处理装置在第一目标地址对应的存储空间所在的逻辑单元是热点逻辑单元时,在第一目标地址对应的硬盘的保留区中将映射表中与第一目标地址相对应的映射表项更新为写入数据的暂存地址。
在本发明实施例中,将映射表分段存储在硬盘的保留区中,并且将热点逻辑单元的映射表读取到内存中,可以直接在内存中更新热点逻辑单元的映射表。因此,本发明实施例可以提高内存的存储空间的使用效率,节约系统资源。
参见图3,图3是本发明实施例提供的数据处理方法中更新映射表的另一方法流程图。
在本发明实施例中,上述在组成RAID的硬盘中创建暂存块池的步骤的执行过程可以包括:将组成RAID的硬盘按照预设硬盘单元(DU,Disk Unit)长度进行等分,然后在硬盘中创建暂存块池,暂存块池由正整数个硬盘单元组成。
具体的,数据处理装置可以将组成RAID的硬盘按照预设硬盘单元长度进行等分。其中,预设硬盘单元可以根据映射表的长度来进行设定,例如为128MB。数据处理装置可以将硬盘后端的一部分硬盘单元作为暂存块池。
在本发明实施例中,数据处理装置创建RAID的逻辑单元的地址和暂存块池的地址之间的映射表的步骤可以包括:
步骤C1、根据逻辑单元的空间确定逻辑单元占用的硬盘单元。
具体的,数据处理装置根据用户划分的逻辑单元的空间确定该逻辑单元占用的硬盘单元。其中,每个逻辑单元可以按照硬盘单元边界对齐,逻辑单元中包括正整数个硬盘单元。
步骤C2、创建RAID的逻辑单元的硬盘单元的地址和暂存块池的硬盘单元的地址之间的映射表。
具体的,数据处理装置创建RAID的逻辑单元的硬盘单元的地址和暂存块池的硬盘单元的地址之间的映射表。
本发明实施例通过将硬盘分成相同长度的硬盘单元,利用暂存块池中等长度的硬盘单元来暂存需要写入RAID的逻辑单元的硬盘单元的数据,可以实现局部的日志管理,从而减小随机小写命令的延迟时间,提高RAID的性能。
参见图4,图4是本发明实施例提供的数据处理方法中将当前待写入的数据顺序写入暂存块池的方法的流程图。
在本发明另一实施例中,映射表中的映射表项在更新之前为第一预设值。数据处理装置将当前待写入的数据顺序写入暂存块池(上述步骤A3)的过程可以包括:
步骤D1、在硬盘单元的长度大于当前待写入的数据的长度时,查询逻辑单元中当前待写入的硬盘单元的映射表项。
具体的,数据处理装置在判断硬盘单元的长度大于当前待写入的数据的长度时,查询逻辑单元中当前待写入的硬盘单元的映射表项。
其中,第一阈值在本发明实施例中即为硬盘单元的长度,硬盘单元的长度大于当前待写入的数据的长度则说明该写请求命令为随机小写命令。
步骤D2、若逻辑单元中当前待写入的硬盘单元的映射表项为第一预设值,则向逻辑单元中需要写入的硬盘单元分配暂存块池中的硬盘单元。
具体的,数据处理装置在判断逻辑单元中当前待写入的硬盘单元的映射表项为第一预设值时,则说明该逻辑单元中的硬盘单元还未分配对应的暂存空间,数据处理装置则向逻辑单元中需要写入的硬盘单元分配暂存块池中的暂存空间。
步骤D3、判断逻辑单元中当前待写入的数据的前端和后端是否为页边界对齐。
具体的,数据处理装置可以判断逻辑单元中当前待写入的数据的前端和后端是否为页边界对齐,即判断需要写入的数据的第一目标地址对应的存储空间的前端和后端是否存在未使用的存储空间。
步骤D4、在页边界对齐的情况下,则将当前待写入的数据顺序写入暂存块池的硬盘单元中。
具体的,数据处理装置在判断需要写入的数据的前端和后端为页边界对齐的情况下,将当前待写入的数据顺序写入暂存块池的硬盘单元中。
步骤D5、在页边界不对齐的情况下,从逻辑单元的硬盘单元中获取缺失的数据,与当前待写入的数据合并成页边界对齐,将合并后的数据顺序写入暂存块池的硬盘单元中。
具体的,数据处理装置在判断需要写入的数据的前端和后端不是页边界对齐时,从逻辑单元的硬盘单元中获取缺失的数据,与当前待写入的数据合并成页边界对齐,将合并后的数据写入暂存块池的硬盘单元中。
如果数据处理装置在页边界不对齐的情况下,没有从逻辑单元的硬盘单元中获取缺失的数据,则会导致后续在将暂存块池中的数据整合到对应的逻辑单元的硬盘单元时,硬盘单元中存在的数据将会被暂存块池中的数据覆盖。因此,在本发明实施例通过在页边界不对齐的情况下,从逻辑单元的硬盘单元中获取缺失的数据,可以避免逻辑单元的硬盘单元中的数据被覆盖,保证数据的安全性。
在本发明实施例中,如果判断逻辑单元中当前待写入的硬盘单元的映射表项不为第一预设值,则说明逻辑单元中的该硬盘单元已经分配对应的暂存空间,此时进一步判断逻辑单元中当前待写入的数据的前端和后端是否为页边界对齐,数据处理装置在判断当前待写入的数据的前端和后端是页边界对齐时,将当前待写入的数据顺序写入暂存块池的硬盘单元中。数据处理装置在判断需要写入的数据的前端和后端不为页边界对齐时,则从逻辑单元的硬盘单元或暂存块池的硬盘单元中获取缺失的数据,与当前待写入的数据合并成页边界对齐,将合并后的数据写入暂存块池的硬盘单元中。
参见图5,图5是本发明数据处理方法实施例中处理读请求的方法流程图。
在本发明提供的另一数据处理方法实施例中,在执行写请求命令的时候,还可以接收并执行读请求命令,即从RAID中读取数据的命令。此时,本发明实施例数据处理方法还可以包括:
步骤E1、接收读请求命令,读请求命令中携带需要读取的数据的第二目标地址。
具体的,数据处理装置可以接收读请求命令,接收到的读请求命令中携带需要读取的数据的第二目标地址。
步骤E2、查询第二目标地址在映射表中对应的映射表项。
步骤E3、在第二目标地址对应的映射表项为第一预设值时,从第二目标地址对应的存储空间中读取数据。
具体的,数据处理装置可以查询映射表,获得该第二目标地址对应的映射表项的值,如果该映射表项为第一预设值,则说明该第二目标地址所对应的空间中并没有分配暂存空间,此时直接从第二目标地址对应的存储空间中读取数据。
步骤E4、在第二目标地址对应的映射表项不为第一预设值时,从当前的映射表项对应的暂存块池的硬盘单元中读取数据。
具体的,数据处理装置在第二目标地址对应的映射表项不为第一预设值时,即该第二目标地址所对应的空间中分配有暂存空间,此时从映射表项对应的暂存空间中读取数据。
在本发明实施例中,数据处理装置通过判断映射表中第二目标地址对应的映射表项是否为第一预设值,可以从第二目标地址对应的暂存空间或第二目标地址对应的存储空间中读取数据,从而实现数据的读取。
参见图6,图6是本发明数据处理方法实施例中处理读请求的另一方法流程图。
在本发明实施例中,数据处理装置在执行将暂存地址中的数据整合到存在映射关系的第二目标地址之后,将映射表中与第二目标地址对应的映射表项置为第二预设值,第二预设值,例如为-1,用于表示暂存空间中存在最新数据。此时,数据处理装置执行读请求命令的过程可以包括:
步骤F1、接收读请求命令,读请求命令中携带需要读取的数据的第二目标地址。
步骤F2、查询第二目标地址在映射表中对应的映射表项。
步骤F3、在第二目标地址对应的映射表项为第一预设值时,从第二目标地址对应的存储空间中读取数据。
其中,步骤F1-F3的执行过程和上述实施例中步骤E1-E3相同,在此不再重复描述。
步骤F4、在第二目标地址对应的映射表项不为第一预设值时,判断第二目标地址对应的映射表项是否为第二预设值。
在本发明实施例中,可以在第二目标地址对应的映射表项不为第一预设值时,进一步判断第二目标地址对应的映射表项是否为第二预设值。
步骤F5、在第二目标地址对应的映射表项为第二预设值,则从第二目标地址对应的存储空间中读取数据。
具体的,数据处理装置在判断第二目标地址对应的映射表项为第二预设值,则说明暂存空间中不存在最新的数据,直接从第二目标地址对应的存储空间中读取数据。
步骤F6、在第二目标地址对应的映射表项不是第二预设值,则从当前的映射表项对应的暂存块池的硬盘单元中读取数据。在第二目标地址对应的映射表项不为第一预设值时,判断第二目标地址对应的映射表项是否为第二预设值
具体的,数据处理装置在第二目标地址对应的映射表项不是第二预设值,则说明暂存块池中存在最新的数据,此时从当前的映射表项对应的暂存块池的硬盘单元中读取数据。
在本发明实施例中,数据处理装置通过判断映射表中第二目标地址对应的映射表项是否为第一预设值,可以从暂存块池或第二目标地址对应的存储空间中读取数据。
为更详细的理解本发明实施例,下面给出数据处理方法实施例的具体应用场景。
在本应用场景中,首先对组成RAID的硬盘划分暂存块池,组成RAID的硬盘可以为SSD硬盘,还可以为其它类型的硬盘。需要指出的是,暂存块池和相应的映射表还可以在在RAID出厂时预先设置。
参见图7,图7是本发明实施例提供的数据处理方法中划分暂存块池的示意图。
如图所示,RAID系统中包括多块硬盘,硬盘总数为x,x大于或等于1。首先用给定长度的硬盘单元将每个硬盘进行等分,此时DU的长度为128MB,并且用硬盘编号和硬盘内的DU编号为每个DU进行唯一编号,比如图中的DU 2:0表示硬盘2的0号DU。
本应用场景中,可以从当前RAID的每个硬盘中划出一部分DU形成暂存块池,例如从每个硬盘的后端开始划出硬盘容量的1/16组成暂存块池。当用户创建LUN时,根据LUN容量确定当前LUN占用各个SSD盘上的哪些DU(每个LUN按DU边界对齐)。其中,暂存块池中硬盘单元也称为暂存块,暂存块组成暂存块池。
在划分暂存块池和创建LUN完成之后,针对每个LUN创建一张映射表,映射表中的每个映射表项代表逻辑单元的1个DU,例如对于2TB的LUN,映射表中具有16K个映射表项(2TB/128MB=16K),每个映射表项具有3个字段:暂存块的编号;映射当前DU每个页(4K)在暂存块中位置的数组;暂存块中已使用页计数值。映射表项的数据结构可以如下所示:
其中,TempDuID的低24bit用于记录暂存块在硬盘内的DU编号,高8bit用于记录暂存块所属的硬盘编号。TempDuID的第一预设值为0,则说明逻辑单元中的该硬盘单元还未分配对应的暂存空间,数组PageMap中的每个元素对应DU中的每个页,每个元素的值为当前页在暂存块中的位置,1个DU为128MB,1个页为4KB,因此需要32768个数组元素来表示DU中的每个页。UsedPageSum用于表示暂存块中已使用页计数值。
参见图8,图8是本发明实施例提供的逻辑单元的映射表的示意图。
由上述映射表项数据结构的长度可知,一个2TB的LUN需要1GB左右的内存空间才能完全存放映射表。由于系统可供使用的内存空间有限(可能只有2GB),且系统中每个RAID可以创建多个LUN,因此将所有LUN的映射表都存放在内存中是不现实的,所以在创建LUN时首先将映射表分段存放在组成RAID的各个SSD的保留区中,其中保存在硬盘保留区中的映射表中包括当前硬盘的逻辑单元的地址和暂存块池的地址之间的映射。
RAID系统在运行中将对各RAID组中的LUN进行热点识别,进一步的系统还会对热点LUN中的段,即存放在每个SSD保留区上的那部分映射表项进行热点识别,最终将热点LUN的热点段对应的映射表读取到内存中,从而在内存中更新映射表。对于相对较冷的各个LUN的各个段对应的映射表,系统将直接对存放在SSD保留区中的映射表项进行修改,如图8所示。随着LUN容量的增加映射表也会随之增加,还可以根据需要对段进一步划分,从而更有效的利用内存空间。
参见图9,图9是本发明实施例提供的应用场景中处理写请求命令的方法流程图。
RAID执行写请求命令的过程包括:
步骤S1、接收写请求命令,将写请求分发到各个盘上形成子写请求。
其中,每个子写请求的执行过程均相同,本应用场景中以某一个子请求的执行过程为例来进行描述。
步骤S2、确定子写请求覆盖的硬盘单元。
在本应用场景中,可以根据子写请求的逻辑块地址(LBA,Logic BlockAddress)和长度(Len,Length)来确定该子写请求覆盖的硬盘单元。
步骤S3、判断子写请求覆盖的DU是否完成数据写入。
在本应用场景中,还未开始执行数据写入的步骤,因此该子写请求覆盖的DU未完成数据写入,执行步骤S4。
若该子写请求覆盖的DU完成数据写入,则进一步判断是否所有的子请求的数据均写入完成,并且在判断所有的子请求的数据均写入完成,本次写请求命令执行完毕。
步骤S4、判断当前待写入硬盘单元的数据长度是否大于或等于硬盘单元的长度。
其中,硬盘单元的长度可以为128MB,此时第一阈值可以为硬盘单元的长度128MB。
步骤S5、在当前待写入逻辑单元的硬盘单元的数据长度大于硬盘单元的长度时,根据子请求的目标地址,将该数据写入子请求的目标地址对应存储空间中。
在本应用场景中,如果当前待写入逻辑单元的硬盘单元的数据长度大于第一阈值,则说明该子请求不是随机小写命令,直接将该数据写入第一目标地址对应存储空间中,而不需要将该数据存放在暂存块池中。
步骤S6、在当前待写入逻辑单元中硬盘单元的数据长度小于硬盘单元的长度时,查询逻辑单元中当前硬盘单元的映射表项。
在本应用场景中,如果当前待写入逻辑单元的硬盘单元的数据长度小于或等于第一阈值,则说明该子请求是随机小写命令,则查询逻辑单元中当前硬盘单元的映射表项。
步骤S7、判断映射表项中的TEMPDUID字段是否为第一预设值。
在本应用场景中,映射表向中包括TEMPDUID字段。
步骤S8、映射表项中的TEMPDUID字段不是第一预设值,进一步判断当前待写入的数据是否为页边界对齐。
在本应用场景中,逻辑单元中的硬盘单元已分配暂存块池中的暂存块,此时该映射表项中的TEMPDUID字段不是第一预设值,而是暂存块池中暂存空间的地址,此时进一步判断当前待写入的数据是否为页边界对齐。
若步骤S7中判断映射表项中的TEMPID字段为第一预设值,则从暂存块池中分配暂存块,将暂存块的地址保存在TEMPDUID字段。
在本应用场景中,暂存块的地址包括暂存块所属的硬盘编号和暂存块在硬盘单元中的偏移号两部分,此时将暂存块所属的硬盘号记录在TempDuID的高8位,将暂存块在硬盘单元中的偏移号记录在TempDuID的低24位中。
步骤S9、当前待写入的数据不是页边界对齐,将数据从当前DU或暂存块池中读出进行填充。
在本应用场景中,当前待写入的数据不是页边界对齐,则说明需要对写入的数据进行填充,此时将数据从当前DU或暂存块池中读出进行填充,即以页为单位对需要写入的数据进行补齐,然后执行步骤S10。
其中,如果当前待写入的数据为页边界对齐,则不需要对写入的数据进行填充,直接执行步骤S10。
步骤S10、判断当前DU的命中页是否均写入暂存块中。
在本应用场景中,还未开始执行数据写入的步骤,因此当前DU的命中页还未写入暂存块中,执行步骤S11。
在写入数据的情况下,判断当前DU的命中页均写入暂存块中,则说明当前DU的数据写入已经完成,开始执行判断子请求覆盖的所有的DU的数据写入是否完成(即步骤S3)。
步骤S11、判断UsedPageSum字段的值是否小32768。
在本应用场景中,判断暂存块池的剩余空间是否满足第一写入条件是通过判断与暂存块对应的数组中UsedPageSum字段的值是否小于32768来实现的。
在每次以页为单位写入数据之前,均判断当前的UsedPageSum字段的值是否小于32768,若是则继续执行以页为单位写入数据的步骤(即步骤S12),循环执行写入流程,直到当前DU的数据写入完成。若否,则说明逻辑单元中的当前硬盘单元对应的暂存块已经写满数据,此时执行步骤S13,
步骤S12、将当前待写入的数据顺序写入暂存块,更新相应的映射表项。
在本应用场景中,可以在页边界不对齐的情况下,将以页为单位将补齐后的数据顺序写入暂存块,还可以在页边界对齐的情况下,将数据以页为单位顺序写入对应的暂存块中,写入完成之后,开始执行步骤S10。
其中,每存入一页数据就更新该页对应的数组元素的值,此时将数组元素赋为UsedPageSum。
步骤S13、将当前暂存块中的数据整合到对应的DU中,整合完成后将UsedPageSum字段置为0,将PageMap数组中的所有元素置为-1。
在本应用场景中,如果UsedPageSum字段的值大于等于32768,则将当前暂存块中的数据整合到对应的DU中,整合完成后将UsedPageSum字段置为0,将PageMap数组中的所有元素置为-1,表明暂存块中不存在与该硬盘单元对应的最新数据。在整合完成之后,开始执行步骤S12。
在本应用场景中,如果接收到主机下发的读请求,RAID将读请求分发到各个硬盘上形成子请求(Disk Req),然后根据当前子请求的LBA和LEN确定其所覆盖的DU,查询每个DU的映射表项,若TempDuID为0,说明当前DU未使用暂存块暂存数据,此时直接从当前DU中将命中的数据读出即可。若TempDuID不为0,说明当前DU有页暂存在暂存块中,此时判断PageMap数组中命中数据所在页对应的数组元素的值是否未-1,若为-1则说明当前页的最新数据没有暂存于暂存块中,此时直接从当前DU中将命中的页的数据读出即可,若不为-1说明当前页的最新数据正暂存于暂存块中,其暂存位置为当前PageMap数组元素记录的页序号对应位置处,此时从暂存块中将该页序号对应的页读出即可。
另外,由于暂存块池的空间有限,则在写操作时,若需要分配暂存块,而暂存块池又没有空闲暂存块了,此时选择某些暂存块将其中的数据整合回对应的DU中,然后回收这些暂存块。本发明实施例,在RAID系统中采用如下方案进行暂存块池的管理,首先设置高水位值和低水位值,然后创建一个线程,该线程负责暂存块的回收操作。同时还需要维护一个双向链表,一旦有DU分配了暂存块来暂存数据,将该DU插入链表的尾部,此外一旦已分配了暂存块的DU被访问,将该DU从链表中的原位置处移到链表的尾部。在系统运行过程中,每分配出一个暂存块,系统需要检查一下暂存块池中已使用暂存块数是否超过高水位,如果超过,则唤醒回收暂存块线程的信号量。在回收暂存块线程中需要判断当前系统是否繁忙,若系统繁忙则该线程只回收一个暂存块,若不繁忙则该线程将回收多个暂存块直到已使用暂存块数低于低水位。回收暂存块时,系统从前面的双向链表中取出位于头部的DU,该DU为最近最少访问DU,然后通过该DU映射表项的TempDuID字段找到其对应的暂存块,将该暂存块里的有效数据整合后写入DU,然后回收该暂存块,并将DU映射表项中的TempDuID字段复位为0,将PageMap数组中所有元素置为-1,将UsedPageSum置为0。
本发明实施例还提供了和上述方法实施例对应的数据处理装置,参见图10,图10是本发明实施例提供的数据处理装置第一实施例的结构示意图。
在本发明实施例中,数据处理装置包括:
写请求接收单元130,用于接收写请求命令,写请求命令中携带当前待写入数据的第一目标地址,第一目标地址为RAID中逻辑单元的地址;
第一获取单元140,用于根据写请求命令获取当前待写入数据的长度;
数据写入单元150,用于在当前待写入逻辑单元的数据的长度小于或等于第一阈值时,将当前待写入的数据顺序写入RAID中预置的暂存块池中;
映射表更新单元160,用于根据写入的暂存地址更新预置的映射表中与RAID中逻辑单元的地址对应的表项,暂存地址为该数据写入的暂存块池的地址,映射表保存RAID中逻辑单元的地址和暂存地址之间的映射;
数据整合单元170,用于在暂存块池的剩余空间不满足第一写入条件时,按照RAID中逻辑单元的地址和暂存地址之间的映射,将写入暂存块池中的数据整合到对应的逻辑单元中。
本发明实施例提供的数据处理装置可以使用在前述对应的数据处理方法第一实施例中,数据处理装置在接收到的写请求命令为随机小写命令的情况下,将随机小写命令需要写入的数据顺序写入暂存块池中,并且在暂存块池的剩余空间不满足第一写入条件时,将暂存块池中的数据整合到对应的第一目标地址中,从而完成随机小写命令的执行过程。与现有技术相比,本发明实施例在连续的地址空间中写入数据,可以提高随机小写命令的执行效率,进而提升RAID系统的性能。
在本发明实施例中,数据处理装置还可以进一步包括:
暂存块池创建单元110,用于在组成RAID的硬盘中创建暂存块池,暂存块池中包括至少一个暂存块;
映射表创建单元120,用于创建RAID的逻辑单元的地址和暂存块池的地址之间的映射表。
本发明实施例可以在RAID中没有预设暂存块池和映射表的情况下,创建暂存块池和映射表,可以适应更多的应用场景,灵活性更好。
参见图11,图11是本发明实施例提供的数据处理装置第二实施例的结构示意图。
在本发明实施例中,数据处理装置包括:
暂存块池创建单元210,用于在组成RAID的硬盘中创建暂存块池,暂存块池中包括至少一个暂存块;
映射表创建单元220,用于创建RAID的逻辑单元的地址和暂存块池的地址之间的映射表;
写请求接收单元230,用于接收写请求命令,写请求命令中携带当前待写入数据的第一目标地址,第一目标地址为RAID中逻辑单元的地址;
第一获取单元240,用于根据写请求命令获取当前待写入逻辑单元的数据的长度;
数据写入单元250,用于在当前待写入逻辑单元的数据的长度小于或等于第一阈值时,将当前待写入的数据顺序写入RAID中预置的暂存块池中;
数据整合单元270,用于在暂存块池的剩余空间不满足第一写入条件时,按照RAID中逻辑单元的地址和暂存地址之间的映射,将写入暂存块池中的数据整合到对应的逻辑单元中。
映射表存储单元280,用于将映射表分段保存在组成RAID的硬盘的保留区中,保存在硬盘的保留区中的映射表中包括当前硬盘的逻辑单元的地址和暂存块池的地址之间的映射;
映射表读取单元290,用于将热点逻辑单元的映射表从硬盘中读取到内存中。
本发明实施例中的映射表更新单元260包括:
第一更新模块261,用于在第一目标地址对应的存储空间所在的逻辑单元是热点逻辑单元时,在内存中将映射表中与第一目标地址相对应的映射表项更新为写入数据的暂存地址
第二更新模块262,用于在第一目标地址对应的存储空间所在的逻辑单元是热点逻辑单元时,在第一目标地址对应的硬盘的保留区中将与第一目标地址相对应的映射表项更新为写入数据的暂存地址。
在数据处理装置第二实施例中,通过将映射表分段存储在硬盘的保留区中,并且将热点逻辑单元的映射表读取到内存中,可以直接在内存中更新热点逻辑单元的映射表。因此,本发明实施例可以提高内存的存储空间的使用效率,节约系统资源。
参见图12,图12是本发明实施例提供的数据处理装置第一实施例中暂存块池创建单元的结构示意图。在本发明实施例中,数据处理装置中暂存块池创建单元110包括:
硬盘单元划分模块111,将组成RAID的硬盘按照预设硬盘单元进行等分;
暂存块池创建模块112,用于在硬盘中创建暂存块池,暂存块池由正整数个硬盘单元组成。
参见图13,图13是本发明实施例提供的数据处理装置第一实施例中映射表创建单元的结构示意图。
数据处理装置第一实施例中映射表创建单元120可以包括:
硬盘单元确定模块121,用于根据逻辑单元的空间确定逻辑单元占用的硬盘单元;
映射表创建模块122,用于创建RAID的逻辑单元的硬盘单元的地址和暂存块池的硬盘单元的地址之间的映射表。
在数据处理装置第三实施例中,通过将硬盘分成相同长度的硬盘单元,利用暂存块池中等长度的硬盘单元来暂存需要写入RAID的逻辑单元的硬盘单元的数据,可以实现局部的日志管理,从而减小随机小写命令的延迟时间,提高RAID的性能。
参见图14,图14是本发明实施例提供的数据处理装置第一实施例中数据写入单元的示意图。在本发明实施例中,数据写入单元150包括:
映射表查询模块151,用于查询当前待写入的硬盘单元的映射表项;
暂存空间分配模块152,用于在逻辑单元中当前待写入的硬盘单元的映射表项为第一预设值,向逻辑单元中当前待写入的硬盘单元分配暂存块池中的硬盘单元;
页边界判断模块153,用于判断逻辑单元中当前待写入的数据的前端和后端是否为页边界对齐;
写入控制模块154,用于在当前待写入的数据的前端和后端为页边界对齐时,控制数据写入模块156将当前待写入的数据顺序写入暂存块池的硬盘单元中,以及,
在数据获取模块155将当前待写入的数据合并成页边界对齐后,控制数据写入156模块将合并后页边界对齐的数据顺序写入暂存块池的硬盘单元中;
数据合并模块155,用于在当前待写入的数据的前端和后端不是页边界对齐时,从逻辑单元的硬盘单元中获取缺失的数据,与当前待写入的数据合并成页边界对齐;
数据写入模块156,用于将当前待写入的数据顺序写入暂存块池的硬盘单元中,以及将合并后页边界对齐的数据顺序写入暂存块池的硬盘单元中。
在本发明实施例中,上述数据写入单元还包括:
第一触发模块157,用于在逻辑单元中当前待写入的硬盘单元的映射表项不为第一预设值,触发页边界判断模块153判断逻辑单元中当前待写入硬盘单元的数据的前端和后端是否为页边界对齐。
在本发明实施例中,数据写入单元150通过在页边界不对齐的情况下,从逻辑单元的硬盘单元中获取缺失的数据,可以避免逻辑单元的硬盘单元中的数据被覆盖,保证数据的安全性。
需要说明的是,上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上对本发明所数据处理方法以及实现该方法的数据处理装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。