一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据存储方法及相关设备与流程

2023-01-16 22:33:20 来源:中国专利 TAG:


1.本技术涉及数据存储技术领域,特别涉及一种数据存储方法以及相关设备。


背景技术:

2.在高速发展的现代社会,各行各业都需要安全高效的存储数据。raid(redundant array of independent disks,独立磁盘组成的具有冗余性的阵列)技术是存储中的重要技术,主要使用条带、镜像和校验来保证数据安全性,并提高raid阵列的i/o性能。其中,缓存作为raid阵列的重要组件,可以极大的提高i/o性能,加速读写响应,存储系统只需将数据写入缓存,便立即向主机发送数据写成功信号,然后继续处理主机发起的其他i/o请求,数据写入缓存的速度远远大于写入物理磁盘的速度,而暂存在缓存中的i/o数据会被线程池中多个线程并发的写入raid阵列中的各个磁盘中,因此极大的减少了i/o的响应延迟。
3.目前在存储领域,业界在软raid存储技术基础上提出了硬raid存储技术(即raid卡),使用raid卡技术,可以有效提高读写数据的i/o性能和数据安全性。在raid卡的缓存写策略中有wb(write back,写回模式)写策略和wt(write through,写通模式)写策略,wb写策略相对于wt写策略具有更低的响应延迟,因为wb写策略将写数据和校验数据写入缓存后,立刻向主机发送数据写成功信号,而wt写策略只有写数据和校验数据全部写入raid卡的物理磁盘后,才向主机发送数据写成功信号,因此wb写策略比wt写策略具有更高的i/o性能。
4.其中,业界在wb写策略的实现细节上是,在接收到写数据之后,先对写数据进行条带切分,并等待由各个切分后条带中的数据分块异或运算得出校验分块,在得出校验分块之后才将各个条带中的校验分块写入缓存,最后才响应主机,显然,这个等待过程会增加wb写策略的响应延迟。
5.因此,如何在数据存储过程中有效降低面向主机端的响应延迟,从而实现快速响应是本领域技术人员亟待解决的问题。


技术实现要素:

6.本技术的目的是提供一种数据存储方法,该数据存储方法可以在数据存储过程中有效降低面向主机端的响应延迟,从而实现快速响应;本技术的另一目的是提供一种数据存储装置、设备及计算机可读存储介质,均具有上述有益效果。
7.第一方面,本技术提供了一种数据存储方法,所述方法包括:根据数据存储请求确定目标数据;获取目标缓存节点,确定所述目标缓存节点中指定的目标缓存区域;对所述目标数据进行条带划分,获得各数据条带;响应于条带划分完成提示,将各所述数据条带写入所述目标缓存区域;反馈存储完成信号至所述数据存储请求的发起端。
8.可选地,所述获取目标缓存节点,包括:
从全局空闲缓存节点链表中获取空闲缓存节点;将所述空闲缓存节点作为所述目标缓存节点;其中,所述数据存储请求的数量与所述目标缓存节点的数量相同。
9.可选地,所述确定所述目标缓存节点中指定的目标缓存区域,包括:对所述目标缓存节点进行字段解析,获得缓存区域字段;根据所述缓存区域字段的记录信息确定所述目标缓存区域。
10.可选地,所述目标缓存节点包括下刷状态字段、缓存区域字段、前指针字段、后指针字段;所述下刷状态字段用于记录缓存区的缓存下刷状态,所述缓存下刷状态包括缓存下刷已完成和缓存下刷未完成;所述缓存区域字段用于记录所述目标缓存区域在所述缓存区内的位置信息;所述前指针字段用于记录所述目标缓存节点在所述全局空闲缓存节点链表中的前一个缓存节点的节点信息;所述后指针字段用于记录所述目标缓存节点在所述全局空闲缓存节点链表中的后一个缓存节点的节点信息。
11.可选地,所述将各所述数据条带写入所述目标缓存区域之后,还包括:对于每一所述数据条带,根据所述数据条带中的各数据分块计算获得校验分块;将所述校验分块写入所述目标缓存区域内对应的数据条带中。
12.可选地,所述将所述校验分块写入所述目标缓存区域内对应的数据条带中之后,还包括:在全局校验表中获取空闲校验元素作为目标校验元素;在所述目标校验元素的条带校验字段中查找所述数据条带对应的校验状态位;将所述校验状态位更新为条带校验已完成。
13.可选地,所述目标校验元素包括全局校验状态字段、条带校验状态字段、指针字段;所述全局校验状态字段用于记录所述目标数据的全局校验状态,所述全局校验状态包括全局校验已完成和全局校验未完成;所述条带校验状态字段用于记录各所述数据条带的条带校验状态,所述条带校验状态包括条带校验已完成和条带校验未完成;所述指针字段用于记录所述目标校验元素在所述全局校验表中的下一个校验元素的元素信息。
14.可选地,所述方法还包括:当所述条带校验字段中所有校验状态位均为所述条带校验完成状态时,将所述全局校验状态字段更新为所述全局校验已完成。
15.可选地,所述将所述全局校验状态字段更新为所述全局校验已完成之后,还包括:对于所述缓存区中的每一所述数据条带,将所述数据条带中的各所述数据分块和所述校验分块下刷至物理磁盘。
16.可选地,所述下刷状态字段与位图元数据相关联,所述位图元数据用于记录各所述数据条带的条带下刷状态,所述条带下刷状态包括条带下刷已完成和条带下刷未完成;
相应地,所述将所述数据条带中的各所述数据分块和所述校验分块下刷至物理磁盘之后,还包括:在所述位图元数据中查找所述数据条带对应的下刷状态位;将所述下刷状态位更新为所述条带下刷已完成。
17.可选地,所述方法还包括:当所述位图元数据中所有所述下刷状态位均为所述条带下刷已完成时,将所述下刷状态字段更新为所述缓存下刷已完成。
18.可选地,所述方法还包括:当所述全局校验状态字段更新为所述全局校验已完成时,释放所述目标校验元素;当所述下刷状态字段更新为所述缓存下刷已完成时,释放所述目标缓存节点。
19.第二方面,本技术还公开了一种数据存储装置,所述装置包括:确定模块,用于根据数据存储请求确定目标数据;获取模块,用于获取目标缓存节点,确定所述目标缓存节点中指定的目标缓存区域;划分模块,用于对所述目标数据进行条带划分,获得各数据条带;写入模块,用于响应于条带划分完成提示,将各所述数据条带写入所述目标缓存区域;反馈模块,用于反馈存储完成信号至所述数据存储请求的发起端。
20.第三方面,本技术还公开了一种数据存储设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如上所述的任一种数据存储方法的步骤。
21.第四方面,本技术还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的任一种数据存储方法的步骤。
22.应用本技术所提供的技术方案,在根据数据存储请求确定需要写入至存储系统的目标数据之后,可以先在目标缓存节点中确定该目标数据对应的目标缓存区域,并对目标数据进行条带划分,在此过程中,可以对条带划分情况进行实时监测,一旦监测到条带划分完成提示,则立即将划分后得到的各数据条带写入目标缓存区域,并直接向发起端反馈存储完成信号,也就是说,该技术方案在完成数据条带划分之后并不等待校验分块的生成即可实现数据缓存并向请求端回复响应,可以在数据存储过程中有效降低面向请求端的响应延迟,进而实现快速响应,也有助于提高存储端的系统性能。
附图说明
23.为了更清楚地说明现有技术和本技术实施例中的技术方案,下面将对现有技术和本技术实施例描述中需要使用的附图作简要的介绍。当然,下面有关本技术实施例的附图描述的仅仅是本技术中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本技术
的保护范围。
24.图1为本技术所提供的一种数据存储方法的流程示意图;图2为本技术所提供的一种条带划分示意图;图3为本技术所提供的一种缓存模块的结构示意图;图4为本技术所提供的一种全局校验表的结构示意图;图5为本技术所提供的一种缓存节点的结构示意图;图6为本技术所提供的一种全局空闲缓存节点链表的结构示意图;图7为本技术所提供的另一种数据存储方法的流程示意图;图8为本技术所提供的一种数据存储装置的结构示意图;图9为本技术所提供的一种数据存储设备的结构示意图。
具体实施方式
25.本技术的核心是提供一种数据存储方法,该数据存储方法可以在数据存储过程中有效降低面向主机端的响应延迟,从而实现快速响应;本技术的另一核心是提供一种数据存储装置、设备及计算机可读存储介质,均具有上述有益效果。
26.为了对本技术实施例中的技术方案进行更加清楚、完整地描述,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行介绍。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
27.本技术实施例提供了一种数据存储方法。
28.请参考图1,图1为本技术所提供的一种数据存储方法的流程示意图,该数据存储方法可以包括如下s101至s105。
29.s101:根据数据存储请求确定目标数据。
30.本步骤旨在实现目标数据的确定,该目标数据即为需要进行存储的数据。具体而言,当需要将某数据写入存储系统进行存储时,主机端(发起数据存储请求的发起端)可以将该数据作为目标数据添加至数据存储请求,并将其发送至存储系统,由存储系统通过对数据存储请求进行解析,获得目标数据。
31.s102:获取目标缓存节点,确定目标缓存节点中指定的目标缓存区域。
32.本步骤旨在实现目标缓存节点的获取。具体而言,可以在存储系统中预先创建缓存区,并将其划分出多个缓存区域,每个缓存区域用于存储一份目标数据,且每个缓存区域均由一个缓存节点记录其位置信息,因此,每一个缓存节点用于处理一个数据存储请求。
33.在此基础上,当根据数据存储请求确定目标数据之后,可以先获取一个缓存节点,作为用于处理该数据存储请求的目标缓存节点,由于该目标缓存节点中记录有一个缓存区域的位置信息,因此,可以将该缓存区域作为目标数据的目标缓存区域,以便于将目标数据写入该目标缓存区域。
34.需要说明的是,上述目标缓存节点应当是处于空闲状态的缓存节点,换而言之,目标缓存节点所指定的目标缓存区域应当为未写入任何目标数据的缓存区域。
35.s103:对目标数据进行条带划分,获得各数据条带。
36.本步骤旨在实现目标数据的条带划分。可以理解的是,物理磁盘对数据的存储是
采用分块(strip)的形式,即将一个分区分成多个大小相等的、地址相邻的块(block),这些块则称为分块,分块通常被认为是条带(stripe)的元素,而条带则是不同分区上的位置相关的分块的集合。因此,为方便后续将缓存区的目标数据下刷至物理磁盘,同样可以对目标数据进行条带划分,得到各个数据条带,使得目标数据以数据条带的形式存储于缓存区的目标缓存区域。
37.请参考图2,图2为本技术所提供的一种条带划分示意图,图中所示101即为划分后的数据条带stripe0~stripe2,strip1~strip20表示20个数据分块,parity1~parity5表示5个校验分块。
38.s104:响应于条带划分完成提示,将各数据条带写入目标缓存区域。
39.本步骤旨在实现将各数据条带写入目标缓存区域。如上所述,在接收到写数据之后,先对写数据进行条带切分,并等待由各个切分后条带中的数据分块异或运算得出校验分块,在得出校验分块之后才将各个条带中的校验分块写入缓存,最后才响应主机,显然,这个等待过程会增加wb写策略的响应延迟。但是,在本技术实施例中,此处,可以对条带划分过程进行实时监测,一旦监测到条带划分完成提示,则立即将各数据条带写入目标缓存区域,由此可见,将各数据条带写入目标缓存区域是在将目标数据划分为多个数据条带之后,对每个数据条带计算校验分块之前(即校验分块中未写入校验值)执行的,也就是说,每个数据条带中的校验分块以空分块的形式写入目标缓存区域,在此之后,再在目标缓存区域内进行校验值的计算核校验分块的填充。
40.s105:反馈存储完成信号至数据存储请求的发起端。
41.本步骤旨在实现存储完成信号的反馈,具体是在将各数据条带写入目标缓存区域之后,立即向数据存储请求的发起端(即上述主机端)反馈存储完成信号。在s104的基础上,向数据存储请求的发起端反馈存储完成信号是在计算校验值、填充校验分块之前执行的,实现了无需等待校验值处理即可向发起端回复响应,有效地降低了响应延迟。
42.可见,本技术实施例所提供的数据存储方法,在根据数据存储请求确定需要写入至存储系统的目标数据之后,可以先在目标缓存节点中确定该目标数据对应的目标缓存区域,并对目标数据进行条带划分,在此过程中,可以对条带划分情况进行实时监测,一旦监测到条带划分完成提示,则立即将划分后得到的各数据条带写入目标缓存区域,并直接向发起端反馈存储完成信号,也就是说,该技术方案在完成数据条带划分之后并不等待校验分块的生成即可实现数据缓存并向请求端回复响应,可以在数据存储过程中有效降低面向请求端的响应延迟,进而实现快速响应,也有助于提高存储端的系统性能。
43.在本技术的一个实施例中,上述获取目标缓存节点,可以包括:从全局空闲缓存节点链表中获取空闲缓存节点;将空闲缓存节点作为目标缓存节点;其中,数据存储请求的数量与目标缓存节点的数量相同。
44.本技术实施例提供了一种目标缓存节点的获取方法。具体而言,可以预先创建全局空闲缓存节点链表,用于管理空闲缓存节点,由此,则可以直接从全局空闲缓存节点链表中直接调取空闲缓存节点作为目标缓存节点,需要说明的是,由于一个缓存节点用于处理一个数据存储请求,因此,接收到多少个数据存储请求就调取多少个空闲缓存节点,并依次分配给每一个数据存储请求进行后续处理。
45.在本技术的一个实施例中,上述确定目标缓存节点中指定的目标缓存区域,可以
包括:对目标缓存节点进行字段解析,获得缓存区域字段;根据缓存区域字段的记录信息确定目标缓存区域。
46.本技术实施例提供了一种确定目标缓存区域的实现方法。如上所述,每个缓存区域均由一个缓存节点记录其位置信息,因此,在获得缓存节点之后,可以对其进行字段解析,获得用于存储目标缓存区域的位置信息的缓存区域字段,然后根据该缓存区域字段中的记录信息确定目标缓存区域,当然,该记录信息即为目标缓存区域的位置信息。
47.在本技术的一个实施例中,目标缓存节点可以包括下刷状态字段、缓存区域字段、前指针字段、后指针字段;下刷状态字段用于记录缓存区的缓存下刷状态,缓存下刷状态包括缓存下刷已完成和缓存下刷未完成;缓存区域字段用于记录目标缓存区域在缓存区内的位置信息;前指针字段用于记录目标缓存节点在全局空闲缓存节点链表中的前一个缓存节点的节点信息;后指针字段用于记录目标缓存节点在全局空闲缓存节点链表中的后一个缓存节点的节点信息。
48.本技术实施例提供了一种具体形式的缓存节点,该缓存节点可以包括四个字段,分别为下刷状态字段、缓存区域字段、前指针字段、后指针字段。其中,下刷状态字段用于记录缓存区的缓存下刷状态,该缓存下刷状态即为缓存区中的缓存数据是否下刷至物理磁盘,因此,缓存下刷状态包括缓存下刷已完成和缓存下刷未完成,缓存下刷已完成表示缓存区的缓存数据已经下刷至物理磁盘,缓存下刷未完成表示缓存区的缓存数据未下刷至屋里磁盘;前指针字段和后指针字段用于确认当前缓存节点的前后缓存节点,保证缓存节点的连贯顺序,进而保证处理数据存储请求的连贯顺序。
49.在本技术的一个实施例中,上述将各数据条带写入目标缓存区域之后,还可以包括:对于每一数据条带,根据数据条带中的各数据分块计算获得校验分块;将校验分块写入目标缓存区域内对应的数据条带中。
50.本步骤旨在实现校验值的计算核校验分块的填充。需要说明的是,该步骤的进行可以是在反馈存储完成信号至请求端之后,也可以是在反馈存储完成信号至请求端的同时,但不会是在反馈存储完成信号至请求端之前。在实现过程中,对于划分后的每一个数据条带,可以根据其中的各个数据分块进行校验分块的计算,此处,具体可以采用对各个数据分块进行异或运算的方法,得到校验分块,然后将该校验分块写入目标缓存区域内对应的数据条带中。
51.在本技术的一个实施例中,上述将校验分块写入目标缓存区域内对应的数据条带中之后,还可以包括:在全局校验表中获取空闲校验元素作为目标校验元素;在目标校验元素的条带校验字段中查找数据条带对应的校验状态位;将校验状态位更新为条带校验已完成。
52.本技术实施例提供了一种记录各个数据条带校验状态的实现方法,此处,条带校验状态用于指示相应的数据条带是否完成校验,包括条带校验已完成和条带校验未完成。在实现过程中,可以预先创建全局校验表,其中包括有多个处于空闲状态的校验元素,每一个校验元素用于记录目标数据中各个数据条带的校验状态,具体的,每一个校验元素可以通过其中的条带校验字段记录目标数据中各个数据条带的校验状态。在此基础上,可以从全局校验表中获取一个空闲校验元素作为对应于目标数据的目标校验元素,并在其中查找到条带校验字段,该条带校验字段中包括有多个校验状态位,每一个校验状态位用于记录
一个数据条带的校验状态,因此,在将校验分块写入目标缓存区域内对应的数据条带中之后,则可以在上述条带校验字段中查找到该数据条带对应的校验状态位,并将其更新为条带校验已完成的状态,例如,校验状态位置0时,表示对应的数据条带校验未完成,校验状态位置1时,表示对应的数据条带校验已完成。
53.在本技术的一个实施例中,目标校验元素可以包括全局校验状态字段、条带校验状态字段、指针字段;全局校验状态字段用于记录目标数据的全局校验状态,全局校验状态包括全局校验已完成和全局校验未完成;条带校验状态字段用于记录各数据条带的条带校验状态,条带校验状态包括条带校验已完成和条带校验未完成;指针字段用于记录目标校验元素在全局校验表中的下一个校验元素的元素信息。
54.本技术实施例提供了一种具体形式的校验元素,该校验元素可以包括三个字段,分别为全局校验状态字段、条带校验状态字段、指针字段。其中,用于记录目标数据的全局校验状态,该全局校验状态用于指示目标数据中的所有数据条带是否全部校验完成,因此,全局校验状态包括全局校验已完成和全局校验未完成,全局校验已完成表示目标数据中的所有数据条带均已完成校验,全局校验未完成表示目标数据中仍然存在未完成校验的数据条带;指针字段则用于指向下一个校验元素。
55.在本技术的一个实施例中,该方法还可以包括:当条带校验字段中所有校验状态位均为条带校验完成状态时,将全局校验状态字段更新为全局校验已完成。
56.如上所述,校验元素中的条带校验字段用于记录目标数据中每一个数据条带的校验状态,全局校验状态字段用于记录目标数据中所有数据条带的校验状态,因此,当条带校验字段中所有校验状态位均为条带校验完成状态时,则可以将全局校验状态字段更新为全局校验已完成。例如,0表示校验未完成,1表示校验已完成,那么,当条带校验字段中所有校验状态位均为1时,全局校验状态字段置为1,当条带校验字段中存在置0的校验状态位时,全局校验状态字段置为0。
57.在本技术的一个实施例中,上述将全局校验状态字段更新为全局校验已完成之后,还可以包括:对于缓存区中的每一数据条带,将数据条带中的各数据分块和校验分块下刷至物理磁盘。
58.本技术实施例所提供的数据存储用于实现缓存区缓存数据向物理磁盘的下刷,在将全局校验状态字段更新为全局校验已完成之后,也即确认目标数据已经完成了全局校验,则可以将各个数据条带中的各个数据分块和校验分块下刷至物理磁盘。在一种可能的实现方式中,可以等待缓存区中的所有缓存区域均已完成全局校验之后,再一同执行下刷操作。
59.在本技术的一个实施例中,下刷状态字段与位图元数据相关联,位图元数据用于记录各数据条带的条带下刷状态,条带下刷状态包括条带下刷已完成和条带下刷未完成;相应地,上述将数据条带中的各数据分块和校验分块下刷至物理磁盘之后,还可以包括:在位图元数据中查找数据条带对应的下刷状态位;将下刷状态位更新为条带下刷已完成。
60.本技术实施例提供了一种记录各个数据条带下刷状态的实现方法,此处,条带下刷状态用于指示相应的数据条带是否完成下刷,包括带下刷已完成和条带下刷未完成。在实现过程中,可以预先创建位图元数据,其中包括有多个处于下刷状态位,每一个下刷状态
位用于记录一个数据条带的下刷状态。由此,在将数据条带中的各数据分块和校验分块下刷至物理磁盘之后,则可以在位图元数据中查找到该数据条带对应的下刷状态位,并将该下刷状态位更新为条带下刷已完成的状态,例如,下刷状态位置0时,表示对应的数据条带下刷未完成,下刷状态位置1时,表示对应的数据条带下刷已完成。
61.其中,位图元数据与缓存节点中的下刷状态字段相关联,用于实现下刷状态字段的更新。
62.在本技术的一个实施例中,该方法还可以包括:当位图元数据中所有下刷状态位均为条带下刷已完成时,将下刷状态字段更新为缓存下刷已完成。
63.如上所述,位图元数据用于记录目标数据中每一个数据条带的下刷状态,缓存节点中的下刷状态字段用于记录目标数据中所有数据条带的下刷状态,且位图元数据与下刷状态字段相关联,因此,当位图元数据中所有的下刷状态位均为条带下刷已完成时,则可以将下刷状态字段更新为缓存下刷已完成。例如,0表示下刷未完成,1表示下刷已完成,那么,当位图元数据中所有下刷状态位均为1时,下刷状态字段置为1,当位图元数据中存在置0的下刷状态位时,下刷状态字段置为0。
64.在本技术的一个实施例中,该方法还可以包括:当全局校验状态字段更新为全局校验已完成时,释放目标校验元素;当下刷状态字段更新为缓存下刷已完成时,释放目标缓存节点。
65.本技术实施例用于实现目标校验元素和目标缓存节点的释放,当全局校验状态字段更新为全局校验已完成时,也即确认目标数据完成全局校验时,释放目标校验元素,以便为后续新的数据存储请求提供服务;当下刷状态字段更新为缓存下刷已完成时,也即确认目标数据完成全局下刷时,释放目标缓存节点,以便为后续新的数据存储请求提供服务。
66.基于上述各实施例,本技术实施例提供了另一种数据存储方法。
67.首先,请参考图3,图3为本技术所提供的一种缓存模块的结构示意图,该缓存模块即为raid卡中的缓存模块,包括上层缓存210、下层缓存211和缓存区212。其中:1、上层缓存210:上层缓存210用于维护全局校验表,可以使用单向链表和位图相结合的元数据组织方式管理全局校验表。
68.请参考图4,图4为本技术所提供的一种全局校验表的结构示意图,对于全局校验表中的每一个校验元素:(1)301指示的parity_ok字段(全局校验状态字段)为bool类型,当目标数据切分后的条带全部计算出校验分块后,赋值parity_ok字段为true,否则赋值为false。
69.(2)302指示的stripe[32]字段(条带校验状态字段)是int类型的数组,一个int类型数据包含8个bit位,一个bit位对应一个条带,如果条带已计算得出校验分块则置位对应的bit位为1,否则为0(304指示),因此当与条带对应的bit位都为1时,赋值parity_ok字段为true,否则赋值为false。
[0070]
(3)303指示的nextstripe字段(指针字段)指向全局校验表中的下一个校验元素。
[0071]
2、下层缓存211:下层缓存211使用双向链表元数据组织方式管理缓存节点,一个缓存节点管理控制一次主机i/o请求(数据存储请求),双向链表元数据利用缓存节点中的前指针字段和后
指针字段将缓存节点连接在一起,如果目标数据全部下刷到物理磁盘,则将管理控制该次主机i/o请求的缓存节点(目标缓存节点)释放回全局空闲缓存节点链表中,因此,下层缓存211还会维护一个全局空闲缓存节点链表。当新的主机i/o请求到来时,raid卡控制器会从全局空闲缓存节点链表取出空闲缓存节点,并将该空闲缓存节点作为目标缓存节点加入到双向链表元数据组织方式管理的缓存节点链表中,当对应主机i/o请求的目标数据全部下刷到物理磁盘后,将该目标缓存节点释放回全局空闲缓存节点链表中。
[0072]
请参考图5,图5为本技术所提供的一种缓存节点的结构示意图,其中:(1)401指示的destage_control字段(下刷状态字段)为bool类型,该字段关联一个位图元数据(405),位图元数据中的一个bit位对应一个条带,bit位为1则表示相对应的条带已下刷到物理磁盘,同理bit位为0则表示相对应的条带没有下刷到物理磁盘,当所有条带都下刷到物理磁盘后,即对应的各个bit位都为1时,赋值destage_control字段为true,反之赋值destage_control字段为false。
[0073]
(2)402指示的cache_ptr字段(缓存区域字段)是指向目标数据需要暂存在缓存区中的具体区域(如图3中212指示的缓存区);(3)403指示的pre_pointer字段(前指针字段)是指向前一个缓存节点的前指针;(4)404指示的next_pointer字段(前指针字段)是指向后一个缓存节点的后指针。
[0074]
进一步,请参考图6,图6为本技术所提供的一种全局空闲缓存节点链表的结构示意图,基于缓存节点实现逻辑控制的实现流程包括:500指示的是下层缓存维护的全局空闲缓存节点链表,当三个主机i/o写请求到来后,raid卡控制器从全局空闲缓存节点链表的头部取出三个缓存节点,一个缓存节点对应一个主机i/o写请求,因此,被取出三个缓存节点后的全局空闲缓存节点链表如510所示。由于条带中的数据分块和校验分块在写入缓存后,还没有被线程池中的工作线程下刷到物理磁盘,因此,缓存节点中destage_control字段所关联的位图元数据中的bit位为0(图6所示521)。
[0075]
最后,请参考图7,图7为本技术所提供的另一种数据存储方法的流程示意图,其实现流程可以包括:第一步:主机向raid卡发出主机i/o请求,raid卡的驱动程序接收此命令并解析。
[0076]
第二步:根据解析的命令参数,从上层缓存维护的全局校验表中申请主机i/o请求对应的校验元素,同理从下层缓存维护的全局空闲缓存节点链表中取出缓存节点放入双向链表元数据组织方式管理的缓存节点中(图6所示520)。
[0077]
第三步:raid卡控制器的主控线程将目标数据切分为条带,切分后的各个条带都没有计算得出校验分块,因此,将校验元素中stripe[32]字段所对应各个条带的bit位都置位为0。由于当切分后的各个条带全部计算得出校验分块后,赋值parity_ok字段为true,因此,在本步骤中,赋值校验元素中parity_ok字段为false。
[0078]
第四步:将各个条带中的数据分块写入缓存节点中cache_ptr字段指向的缓存区中的具体区域(目标缓存区域)。
[0079]
第五步:raid卡立即向主机发送数据写入完成信号(即立即响应主机)。
[0080]
第六步:线程池中的工作线程利用暂存在缓存中的条带的数据分块异或运算得出条带的校验分块,然后将校验分块写入缓存中。由于已计算得出条带的校验分块,因此,将
校验元素中stripe[32]字段所对应各个条带的各bit位都置位为1,并赋值校验元素中的parity_ok字段为true。由于条带的数据分块和校验分块还没有下刷到物理磁盘,因此,将与缓存节点中destage_control字段关联的位图元数据中的各个bit位都置位为0,并赋值destage_control字段为false。
[0081]
第七步:线程池中的工作线程将暂存在缓存中的数据分块和校验分块下刷到物理磁盘,由于数据分块和校验分块都已下刷到物理磁盘,所以在此步骤中将与缓存节点中destage_control字段关联的位图元数据中的各个bit位都置位为1,并赋值destage_control字段为true。
[0082]
第八步:判断校验元素中的parity_ok字段是否为true,并联合判断缓存节点中的destage_control字段是否为true,如果判断不通过则返回到第六步。
[0083]
第九步:判断通过,释放校验元素资源到校验表中,同理释放双向链表元数据组织方式管理的缓存节点到全局空闲缓存节点链表中。
[0084]
可见,本技术实施例所提供的数据存储方法,在根据数据存储请求确定需要写入至存储系统的目标数据之后,可以先在目标缓存节点中确定该目标数据对应的目标缓存区域,并对目标数据进行条带划分,在此过程中,可以对条带划分情况进行实时监测,一旦监测到条带划分完成提示,则立即将划分后得到的各数据条带写入目标缓存区域,并直接向发起端反馈存储完成信号,也就是说,该技术方案在完成数据条带划分之后并不等待校验分块的生成即可实现数据缓存并向请求端回复响应,可以在数据存储过程中有效降低面向请求端的响应延迟,进而实现快速响应,也有助于提高存储端的系统性能。
[0085]
本技术实施例提供了一种数据存储装置。
[0086]
请参考图8,图8为本技术所提供的一种数据存储装置的结构示意图,该数据存储装置可以包括:确定模块1,用于根据数据存储请求确定目标数据;获取模块2,用于获取目标缓存节点,确定目标缓存节点中指定的目标缓存区域;划分模块3,用于对目标数据进行条带划分,获得各数据条带;写入模块4,用于响应于条带划分完成提示,将各数据条带写入目标缓存区域;反馈模块5,用于反馈存储完成信号至数据存储请求的发起端。
[0087]
可见,本技术实施例所提供的数据存储装置,在根据数据存储请求确定需要写入至存储系统的目标数据之后,可以先在目标缓存节点中确定该目标数据对应的目标缓存区域,并对目标数据进行条带划分,在此过程中,可以对条带划分情况进行实时监测,一旦监测到条带划分完成提示,则立即将划分后得到的各数据条带写入目标缓存区域,并直接向发起端反馈存储完成信号,也就是说,该技术方案在完成数据条带划分之后并不等待校验分块的生成即可实现数据缓存并向请求端回复响应,可以在数据存储过程中有效降低面向请求端的响应延迟,进而实现快速响应,也有助于提高存储端的系统性能。
[0088]
在本技术的一个实施例中,上述获取模块2可具体用于从全局空闲缓存节点链表中获取空闲缓存节点;将空闲缓存节点作为目标缓存节点;其中,数据存储请求的数量与目标缓存节点的数量相同。
[0089]
在本技术的一个实施例中,上述获取模块2可具体用于对目标缓存节点进行字段解析,获得缓存区域字段;根据缓存区域字段的记录信息确定目标缓存区域。
[0090]
在本技术的一个实施例中,目标缓存节点可以包括下刷状态字段、缓存区域字段、前指针字段、后指针字段;下刷状态字段用于记录缓存区的缓存下刷状态,缓存下刷状态包括缓存下刷已完成和缓存下刷未完成;缓存区域字段用于记录目标缓存区域在缓存区内的位置信息;前指针字段用于记录目标缓存节点在全局空闲缓存节点链表中的前一个缓存节点的节点信息;后指针字段用于记录目标缓存节点在全局空闲缓存节点链表中的后一个缓存节点的节点信息。
[0091]
在本技术的一个实施例中,该装置还可以包括校验模块,用于在上述将各数据条带写入目标缓存区域之后,对于每一数据条带,根据数据条带中的各数据分块计算获得校验分块;将校验分块写入目标缓存区域内对应的数据条带中。
[0092]
在本技术的一个实施例中,该装置还可以包括条带校验状态更新模块,用于在上述将校验分块写入目标缓存区域内对应的数据条带中之后,在全局校验表中获取空闲校验元素作为目标校验元素;在目标校验元素的条带校验字段中查找数据条带对应的校验状态位;将校验状态位更新为条带校验已完成。
[0093]
在本技术的一个实施例中,目标校验元素可以包括全局校验状态字段、条带校验状态字段、指针字段;全局校验状态字段用于记录目标数据的全局校验状态,全局校验状态包括全局校验已完成和全局校验未完成;条带校验状态字段用于记录各数据条带的条带校验状态,条带校验状态包括条带校验已完成和条带校验未完成;指针字段用于记录目标校验元素在全局校验表中的下一个校验元素的元素信息。
[0094]
在本技术的一个实施例中,该装置还可以包括全局校验状态更新模块,用于当条带校验字段中所有校验状态位均为条带校验完成状态时,将全局校验状态字段更新为全局校验已完成。
[0095]
在本技术的一个实施例中,该装置还可以包括下刷模块,用于在上述将全局校验状态字段更新为全局校验已完成之后,对于缓存区中的每一数据条带,将数据条带中的各数据分块和校验分块下刷至物理磁盘。
[0096]
在本技术的一个实施例中,下刷状态字段与位图元数据相关联,位图元数据用于记录各数据条带的条带下刷状态,条带下刷状态包括条带下刷已完成和条带下刷未完成;相应地,该装置还可以包括条带下刷状态更新模块,用于在上述将数据条带中的各数据分块和校验分块下刷至物理磁盘之后,在位图元数据中查找数据条带对应的下刷状态位;将下刷状态位更新为条带下刷已完成。
[0097]
在本技术的一个实施例中,该装置还可以包括缓存下刷状态更新模块,用于当位图元数据中所有下刷状态位均为条带下刷已完成时,将下刷状态字段更新为缓存下刷已完成。
[0098]
在本技术的一个实施例中,该装置还可以包括释放模块,用于当全局校验状态字段更新为全局校验已完成时,释放目标校验元素;当下刷状态字段更新为缓存下刷已完成时,释放目标缓存节点。
[0099]
对于本技术实施例提供的装置的介绍请参照上述方法实施例,本技术在此不做赘述。
[0100]
本技术实施例提供了一种数据存储设备。
[0101]
请参考图9,图9为本技术所提供的一种数据存储设备的结构示意图,该数据存储
设备可包括:存储器,用于存储计算机程序;处理器,用于执行计算机程序时可实现如上述任意一种数据存储方法的步骤。
[0102]
如图9所示,为数据存储设备的组成结构示意图,数据存储设备可以包括:处理器10、存储器11、通信接口12和通信总线13。处理器10、存储器11、通信接口12均通过通信总线13完成相互间的通信。
[0103]
在本技术实施例中,处理器10可以为中央处理器(central processing unit,cpu)、特定应用集成电路、数字信号处理器、现场可编程门阵列或者其他可编程逻辑器件等。
[0104]
处理器10可以调用存储器11中存储的程序,具体的,处理器10可以执行数据存储方法的实施例中的操作。
[0105]
存储器11中用于存放一个或者一个以上程序,程序可以包括程序代码,程序代码包括计算机操作指令,在本技术实施例中,存储器11中至少存储有用于实现以下功能的程序:根据数据存储请求确定目标数据;获取目标缓存节点,确定目标缓存节点中指定的目标缓存区域;对目标数据进行条带划分,获得各数据条带;响应于条带划分完成提示,将各数据条带写入目标缓存区域;反馈存储完成信号至数据存储请求的发起端。
[0106]
在一种可能的实现方式中,存储器11可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及至少一个功能所需的应用程序等;存储数据区可存储使用过程中所创建的数据。
[0107]
此外,存储器11可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。
[0108]
通信接口12可以为通信模块的接口,用于与其他设备或者系统连接。
[0109]
当然,需要说明的是,图9所示的结构并不构成对本技术实施例中数据存储设备的限定,在实际应用中数据存储设备可以包括比图9所示的更多或更少的部件,或者组合某些部件。
[0110]
本技术实施例提供了一种计算机可读存储介质。
[0111]
本技术实施例所提供的计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如上述任意一种数据存储方法的步骤。
[0112]
该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0113]
对于本技术实施例提供的计算机可读存储介质的介绍请参照上述方法实施例,本技术在此不做赘述。
[0114]
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明
即可。
[0115]
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0116]
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom或技术领域内所公知的任意其它形式的存储介质中。
[0117]
以上对本技术所提供的技术方案进行了详细介绍。本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术的保护范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献