一种高速缓冲存储器cache刷新方法及装置
技术领域
1.本技术涉及存储领域,尤其涉及一种高速缓冲存储器cache刷新方法及装置。
背景技术:2.目前,存储设备中,lun(logical unit number,逻辑单元号)收到写请求时会先将写请求请求写入的数据写入cache,而不是直接写入raid(redundant array of independent disks,独立磁盘冗余阵列)和磁盘,当达到设定条件后,cache构造刷新写入请求将其缓存的数据再异步刷新到raid中,raid再通过raid算法写入磁盘。通过这样的方式,就可以充分利用cache的高速缓存特性,解决磁盘读写性能不足的问题,从而提高存储的整体性能。然而,当前端处理读写请求压力较大时,cache需要不停刷新才能接收新的读写请求,然而,刷新的性能就会影响到整个存储设备处理读写请求的性能。在存储设备中,由于需要通过raid将数据写入磁盘,raid的构成和算法对cache的刷新性能也有很大的影响。
3.在相关技术方案中,写cache中的脏数据,通常是按照设定的刷新机制在当脏cache块达到设定的比例后将所述脏cache块刷新到raid,或者当写入cache中的脏cache块达到设定的老化时间后刷新到raid,以使写入的脏cache块被刷新以后,这些写入的脏cache块中存放的数据被初始化,写入的脏cache块相应地也被释放,变为空闲cache,以被提供给新接收的读写请求使用。可见,在上述技术方案的中,写入的脏cache块通过刷新将脏数据写入磁盘后被释放,不能被后续的读写请求命中,只能被用来重新申请后读或写入新数据,实际上cache中的数据仍然是有效的,这样被释放后变空闲的cache的实现方式大大降低了cache的可用性。
4.另外,当脏cache块达到设定的比例后将脏cache块刷新到raid之后,raid在处理cache下发的读写请求时,针对cache下发的满条带,则会直接刷入磁盘,针对cache下发的非满条带,则需要先按照raid条带拆分读写请求,并判断拆分后的读写请求是否与正在处理的读写请求存在条带冲突,及写请求的大小是否以条带对齐。存在条带冲突的多个访问请求需要串行执行,而未以条带对齐的写请求将触发写惩罚,进行多次回读与校验写,因此降低了读写请求的处理效率,增加了raid处理条带开销。
技术实现要素:5.有鉴于此,本技术提供一种高速缓冲存储器cache刷新方法及装置,以在提高cache可用性的同时,降低raid处理条带开销。
6.具体地,本技术是通过如下技术方案实现的:
7.第一方面,本技术实施例提供了一种高速缓冲存储器cache刷新方法,应用于存储设备,所述方法包括:
8.当需要刷新cache时,若检测到所述cache不存在满条带,则从所述cache中获取脏cache块,并从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效
cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带;所述刷新有效链表包括有效数据标识,所述有效数据标识用于关联所述cache中脏cache块被刷新后的刷新有效cache块;
9.判断所述cache是否存在已构成的满条带,若存在,则向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识;
10.若不存在,则向raid写入已构成的非满条带,在完成向所述raid写入所述非满条带之后,保持所述非满条带内cache块存放的数据有效,基于所述非满条带内的cache块更新所述刷新有效链表中的有效数据标识。
11.第二方面,本技术实施例提供了一种高速缓冲存储器cache刷新装置,应用于存储设备,所述装置包括:
12.条带构造单元,用于当需要刷新cache时,若检测到所述cache不存在满条带,则从所述cache中获取脏cache块,并从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带;判断所述cache是否存在已构成的满条带,若存在,则触发第一满条带刷新单元,若不存在,则触发非满条带刷新单元;所述刷新有效链表包括有效数据标识,所述有效数据标识用于关联所述cache中脏cache块被刷新后的刷新有效cache块;
13.所述第一满条带刷新单元,用于向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识;
14.所述非满条带刷新单元,用于向raid写入已构成的非满条带,在完成向所述raid写入所述非满条带之后,保持所述非满条带内cache块存放的数据有效,基于所述非满条带内的cache块更新所述刷新有效链表中的有效数据标识。
15.由以上可见,本技术实施例提供了一种高速缓冲存储器cache刷新方法,在本技术中,当需要刷新cache时,若检测到cache不存在满条带,则从cache中获取脏cache块,并使用已配置的刷新有效链表查找与脏cache块为同一条带内的所有刷新有效cache块,以与所获取的脏cache块构成满条带或非满条带,并基于已构成的满条带或非满条带向raid写入满条带或非满条带,在完成向raid写入满条带或非满条带之后,保持满条带或非满条带内cache块存放的数据有效,并基于满条带或非满条带内的cache块更新所述刷新有效链表。可见,本技术实施例提供的技术方案使用配置的用于记录cache中脏cache块被刷新后的刷新有效cache块的刷新有效链表,为正在刷新的单个cache块与刷新有效链表中记录的刷新完有效cache块构成满条带或非满条带,以使得写入raid时能够以更多的满条带写,降低raid下条带冲突和数据回读带来的开销,使cache能够循环利用,具有更高的可用性,优化cache刷盘的性能。
附图说明
16.图1是展示的一种满条带的结构示意图;
17.图2是本技术一示例性实施例示出的一种高速缓冲存储器cache刷新方法的流程
图;
18.图3是本技术一示例性实施例示出的一种满条带构造的结构示意图;
19.图4是本技术一示例性实施例示出的一种非满条带构造的结构示意图;
20.图5是本技术一示例性实施例示出的一种针对读请求的处理方法的流程图;
21.图6是本技术一示例性实施例示出的一种针对写请求下的处理方法的流程图;
22.图7是本技术一示例性实施例示出的一种高速缓冲存储器cache刷新装置的结构示意图;
23.图8是本技术提供一种电子设备的结构示意图。
具体实施方式
24.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
25.在本技术使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
26.应当理解,尽管在本技术可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
27.目前,存储设备中,lun中的数据通过设定的逻辑关系最终被映射到磁盘,但是由于磁盘读写速度较慢,不能满足业务读写的性能需求,通常按照性能需求为lun分配读写cache,以被用来缓存lun的数据。lun收到写请求时会先将写请求请求写入的数据写入cache,而不是直接写入raid(redundant array of independent disks,独立磁盘冗余阵列)和磁盘,当达到设定条件后,cache构造刷新写入请求将其缓存的数据再异步刷新到raid中,raid再通过raid算法写入磁盘。通过这样的方式,就可以充分利用cache的高速缓存特性,解决磁盘读写性能不足的问题,从而提高存储的整体性能。然而,当前端处理读写请求压力较大时,cache需要不停刷新才能接收新的读写请求,然而,刷新的性能就会影响到整个存储设备处理读写请求的性能。在存储设备中,由于需要通过raid将数据写入磁盘,raid的构成和算法对cache的刷新性能也有很大的影响。
28.raid通常由多块数据盘和校验盘组成。以5块磁盘构成的raid为例,如图1所示,一个条带内包含四个固定大小的数据块h1、数据块h2、数据块h3和数据块h4,还包含一个同样大小的校验块p。不同条带中的校验块(如图1中的斜纹块),按照设定规则,离散分布在不同的物理磁盘中。校验数据为同一个条带内的四个数据块做异或运算得到。如果要在数据块h1中写入数据,就需要先回读出同一条带内其他3个数据块,再计算出校验数据。但如果同时在h1、h2、h3和h4中写入完整的数据,则不需要读取任何旧数据,并可以利用新数据计算
出对应的新校验,这类写入称为“满条带写”。
29.raid处理写请求的流程,具体为:cache刷新构造读写请求发给raid,raid会检查该读写请求是否与正在处理的读写请求的条带冲突,若是,等待正在处理的冲突读写完成,若否,则检查条带对齐请情况,判断该读写请求是否以条带对齐,若是,则按照raid算法校验,读写磁盘,若否,进行回读,按照raid算法校验。可见,如果一个读写请求以条带对齐,也就是构成一个满条带,可以减少条带冲突和数据回读的开销,对raid和磁盘而言,是最效率最高,性能最好的。因此,基于以上分析,cache刷新时,应该尽量构成满条带写io下发给raid,对raid的开销最少,性能也最好。
30.而在相关技术方案中,写入cache中的脏数据,通常是按照设定的刷新机制在当脏cache块达到设定的比例后将所述脏cache块刷新到raid,或者当写入cache中的脏cache块达到设定的老化时间后刷新到raid,以使写入的脏cache块被刷新以后,这些写入的脏cache块中存放的数据被初始化,写入的脏cache块相应地也被释放,变为空闲cache,以被提供给新接收的读写请求使用,具体参见如下流程:当cache刷新时,cache会判断是否存在满条带,若否,则取出一个脏cache块,以非满条带刷入raid,刷完之后,释放cahce块,并将该cache块设置为无效,若是,以满条带刷入raid,刷完之后,释放cahce块,并将该cache块设置为无效。可见,在上述技术方案的中,写入的脏cache块通过刷新将脏数据写入磁盘后被释放,不能被后续的读写请求命中,只能被用来重新申请后读或写入新数据,实际上cache中的数据仍然是有效的,这样被释放后变空闲的cache的实现方式大大降低了cache的可用性。
31.另外,当脏cache块达到设定的比例后将脏cache块刷新到raid之后,raid在处理cache下发的读写请求时,针对cache下发的满条带,则会直接刷入磁盘,针对cache下发的非满条带,则需要先按照raid条带拆分读写请求,并判断拆分后的读写请求是否与正在处理的读写请求存在条带冲突,及写请求的大小是否以条带对齐。存在条带冲突的多个访问请求需要串行执行,而未以条带对齐的写请求将触发写惩罚,进行多次回读与校验写,因此降低了读写请求的处理效率,增加了raid处理条带开销。
32.为了解决上述技术问题,本技术实施例提供了一种高速缓冲存储器cache刷新方法,应用于存储设备,所述方法包括:当需要刷新cache时,若检测到所述cache不存在满条带,则从所述cache中获取脏cache块,并从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带;所述刷新有效链表包括有效数据标识,所述有效数据标识用于关联所述cache中脏cache块被刷新后的刷新有效cache块;判断所述cache是否存在已构成的满条带,若存在,则向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识;若不存在,则向raid写入已构成的非满条带,在完成向所述raid写入所述非满条带之后,保持所述非满条带内cache块存放的数据有效,基于所述非满条带内的cache块更新所述刷新有效链表中的有效数据标识。
33.由上可见,本技术实施例提供的技术方案使用配置的用于记录cache中脏cache块被刷新后的刷新有效cache块的刷新有效链表,为正在刷新的单个cache块与刷新有效链表
中记录的刷新完有效cache块构成满条带或非满条带,以使得写入raid时能够以更多的满条带写,降低raid下条带冲突和数据回读带来的开销,使cache能够循环利用,具有更高的可用性,优化cache刷盘的性能。
34.现以具体实施例对上述cache刷新方法进行描述,具体为:
35.参见图2,图2是本技术实施例示出的一种高速缓冲存储器cache刷新方法的流程图,该方法应用于存储设备。
36.上述图2所示流程图包括如下步骤:
37.步骤201,当需要刷新cache时,若检测到cache不存在满条带,则执行步骤202。
38.本步骤中未检测到cache中的满条带,这就意味着cache中的满条带已经刷完或不存在。在这样的情况下,执行步骤202。
39.作为一个实施例,若检测cache存在满条带,则向raid写入满条带,在完成向raid写入所述满条带之后,保持满条带内的cache块存放的数据有效,基于满条带内的cache块更新刷新有效链表中的有效数据标识。
40.本技术中,刷新有效链表包括有效数据标识,有效数据标识用于关联cache中脏cache块被刷新后的刷新有效cache块。
41.实际应用中,满条带内的cache块被写入raid之后的cache块存放的数据仍然是有效的,可以被循环使用,基于此,本技术实施例引入了刷新有效链表概念。
42.可见,本技术实施例在将满条带写入raid之后,仍然保持满条带内的cache块存放的数据有效,基于满条带内的cache块更新刷新有效链表,以为刷新有效链表中补充刷新有效cache块,使得刷新有效链表能够得到充足的刷新有效cache块以为后续构造满条带或非满条带。
43.步骤202,从cache中获取脏cache块,并从已配置的刷新有效链表查找与脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带。
44.本实施例中的脏cache块为cache中存放数据的cache块,从cache中获取脏cache块的实现方式很多,如可以按照已配置的脏数据链表,脏数据链表包括脏数据块标识,脏数据块标识用于关联cache中存放脏数据的脏cache块,基于脏数据链表选择脏数据块标识,从cache中获取与选择的脏数据块标识关联的脏cache块,也可以按照已配置的脏数据文件中从cache中获取脏cache块。上述脏数据链表或脏数据文件用于记录所述cache中存放脏数据的脏cache块。
45.本实施例的脏cache块可以是一个,也可以是至少两个,如果是一个脏cache块,本实施例对此不再限定,后续将会详细描述如何从所述cache中获取脏cache块,该脏cache块为有效cache块。
46.本步骤从cache中获取的cache块均为非满条带的单个cache块,并从已配置的刷新有效链表查找与脏cache块为同一条带内的所有刷新有效cache块,将查找到的刷新有效cache块补充到由正在刷新的cache块所属的条带中,如果能够补齐构成满条带,则可以构造满条带刷。如果不能补齐构成满条带,则仍然构造非满条带刷,相对于未构造非满条带前,构造后的非满条带内的有效cache数据更多,仍然可以减少raid的回读损耗,进而实现减少raid的开销。
47.步骤203,判断所述cache是否存在已构成的满条带,若存在,则执行步骤204,若不存在,则执行步骤205。
48.步骤204,向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识。
49.本步骤在向raid写入所述满条带之后,不再将这些写入的脏cache块中存放的数据被初始化,即不再释放条带内cache块存放的数据,以保持满条带内cache块存放的数据有效,同时会基于满条带内的cache块中的有效数据标识更新刷新有效链表,以使刷新有效链表中的有效数据标识更加丰富和充足,以够后续读出更多的有效数据到刷新有效cache中,以使用刷新cache时构造满条带和非满条带。
50.步骤205,向raid写入已构成的非满条带,在完成向所述raid写入所述非满条带之后,保持所述非满条带内cache块存放的数据有效,基于所述非满条带内的cache块更新所述刷新有效链表中的有效数据标识。
51.本步骤在向raid写入非满条带之后,不再将这些写入的脏cache块中存放的数据被初始化,即不再释放条带内cache块存放的数据,以保持满条带内cache块存放的数据有效,同时会基于非满条带内的cache块更新刷新有效链表中的有效数据标识,以使刷新有效链表中的有效数据标识更加丰富和充足,以够后续读出更多的有效数据到刷新有效cache中,以使用刷新cache时构造满条带和非满条带。
52.至此,完成图2的流程步骤。
53.由以上可见,本技术实施例提供了一种高速缓冲存储器cache刷新方法,在本技术中,当需要刷新cache时,若检测到cache不存在满条带,则从cache中获取脏cache块,并使用已配置的刷新有效链表查找与脏cache块为同一条带内的所有刷新有效cache块,以与所获取的脏cache块构成满条带或非满条带,并基于已构成的满条带或非满条带向raid写入满条带或非满条带,在完成向raid写入满条带或非满条带之后,保持满条带或非满条带内cache块存放的数据有效,并基于满条带或非满条带内的cache块更新所述刷新有效链表。可见,本技术实施例提供的技术方案使用配置的用于记录cache中脏cache块被刷新后的刷新有效cache块的刷新有效链表,为正在刷新的单个cache块与刷新有效链表中记录的刷新完有效cache块构成满条带或非满条带,以使得写入raid时能够以更多的满条带写,降低raid下条带冲突和数据回读带来的开销,使cache能够循环利用,具有更高的可用性,优化cache刷盘的性能。
54.在完成图2所执行的步骤之后,作为一个实施例,实现步骤201中从cache中获取脏cache块的具体步骤包括:
55.步骤a,从已配置的脏数据链表中选择位于同一条带记录的、且为有效的脏cache块关联的脏数据块标识,并基于选择的脏数据块标识从cache中获取与其关联的脏cache块。
56.本实施例中的脏cache块可以是一个,也可以是至少两个,本实施例对此并不限定。
57.脏数据链表中脏数据块标识关联的脏cache块都是未被刷新的cache块,也就是为被写入raid中的cache块。
58.如果需要刷新的脏cache块为一个,则直接从cache中获取当前需要刷新的脏cache块,也可以,基于cache中已配置的脏数据链表中的脏数据块标识,利用该脏数据链表具备的超链接直接从cache中获取当前需要刷新的脏cache块。如果需要刷新的脏cache块为至少两个,则从cache中已配置的脏数据链表中选择获取位于同一条带记录的、且为有效的脏cache块的脏数据表标识,并基于选择的脏数据块标识从cache中获取与其关联的脏cache块,之后执行步骤b。针对从cache中未能查找到获取位于同一条带记录的各脏cache块关联的脏数据块标识,则可以针对每一脏数据块标识关联的脏cache块,基于当前单个脏cache块位于的条带,则执行步骤b。
59.基于步骤a,实现步骤201中从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带的具体步骤可以包括:
60.步骤b,基于获取的脏cache块对应逻辑单元号lun的逻辑地址lba,从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,从cache中获得查找到的有效数据标识关联的所有刷新有效cache块,按照获得的所有刷新有效cache块对应lun的lba,将获得的所有刷新有效cache块补齐到已获取到的脏cache块所属的条带中,以构成满条带或非满条带。
61.一个条带是由多个lba连续的cache块组成的,构成一个满条带的条件有两个,一个条件是条带内的所有cache块都能找到,另一个是所有cache块内的数据必须是全部有效的。假设一个满条带由n个cache块组成,这n个cache块对应lun的lba是连续的。如果一个条带内第一个cache块的lba(logical block address,逻辑区块地址)为l1,那么第2个cache块的lba(l2)为l1+cache块大小,以此类推,第n个cache块的lba(ln)为l1+cache块大小*(n-1),n为一个条带内cache块的序号。如图3所示,脏cache链表包括的脏数据块标识,根据脏数据块标识关联的脏cache块对应的lba,如lba为l1的cache块d1,lba为l3的cache块d3,
……
,lba为ls的cache块ds,s为脏cache链表中记录的cache块的序号。基于刷新有效cache链表中有效数据标识,获得与该有效数据标识关联的脏cache块,这些获得的刷新有效cache块对应lun的lba,如lba为l2的刷新有效cache块fv1,lba为l4的刷新有效cache块fv2,
……
,lba为lg的刷新有效cache块fvg,g为刷新有效cache链表中记录的刷新有效cache块的序号。以n为4为例,刷新时,首先从脏cache链表中获得同一条带内的脏数据块标识,并确定出与这些脏数据块关联的脏cache块d1和脏cache块d2,对应的lba分别是l1和l3,并且脏cache块d1和脏cache块d2存放的全部数据都是有效的。从刷新有效链表中查找与脏cache块d1和脏cache块d2各自对应的lba位于同一条带的刷新有效cache块关联的有效数据标识,基于这些有效数据标识,从cache中获得刷新有效cache块fv1和刷新有效cache块fv2,并按照获得的所有刷新有效cache块对应lun的lba,将刷新有效cache块fv1和刷新有效cache块fv2补充在脏cache块d1和脏cache块d2所在的条带中,这样,脏cache块d1、刷新有效cache块fv1、脏cache块d2和刷新有效cache块fv2就能够组成一个满条带,当前刷新的单个cache或者非满条带在此方案下可以用刷新有效cache组成满条带后下发给raid。
62.使用刷新有效cache链表构成非满条带的技术方案如图4所示,仍以n=4为例。刷新时,首先基于脏cache链表中的脏数据块标识,从cache中取出在同一条带内脏数据块标
识关联的脏cache块d3,对应的lba是l4。由于此时一个满条带由4个cache组成,那么,脏cache块d3无法构成满条带。再到刷新有效cache链表中查找到与脏cache块d3位于同一个条带内的刷新有效cache块fv3关联的有效数据标识,从cache中获得查找到的有效数据标识关联的所有刷新有效cache块,以及确定出有效数据标识关联的刷新有效cache块对应lun的lba,如l3,脏cache块d3和刷新有效cache块各自对应的lba是l3和l4,并且脏cache块d3和刷新有效cache块fv3的全部数据都是有效的。此时,脏cache块d3和刷新有效cache块fv3就能够组成一个非满条带了。
63.需要注意的是,如果条带内的cache块都找到了,但是这些cache块存放的数据并不是全部有效的,也不能构成满条带的读写请求。
64.作为一个实施例,如图5所示,在步骤201之前,该方法还包括如下步骤:
65.步骤2011,接收读请求,若所述读请求请求读取的数据全部命中所述刷新有效链表中有效数据标识关联的第一刷新有效cache块,则执行步骤2012;若所述读请求请求读取的数据部分命中所述刷新有效链表中有效数据标识关联的第二刷新有效cache块,则执行步骤2013。
66.读请求请求读取的数据全部命中所述刷新有效链表中有效数据标识关联的第一刷新有效cache块,这就表示,读请求请求读取的数据全部在刷新有效cache块中,就可以直接从cache中获得。
67.第一刷新有效cache块和第二刷新有效cache块并不特指某两个固定的刷新有效cache块,而是可以cache上任意两个刷新有效cache块,本技术实施例后续不再复述。
68.读请求请求读取的数据部分命中所述刷新有效链表中有效数据标识关联的第二刷新有效cache块,这就表示,读请求请求读取的数据一部分在cache中,余下部分已被cache刷新下发给raid。
69.步骤2012,从所述cache中读取所述第一刷新有效cache块中存储的有效数据。
70.步骤2013,从所述第二刷新有效cache块中读取存储的有效数据,并从所述raid中读取所述读请求请求读取的数据中未命中所述刷新有效链表中有效数据标识关联的刷新有效cache块的第一目标数据,将所述第一目标数据存放到指定的刷新有效cache块中,基于已存放所述第一目标数据的刷新有效cache块更新所述刷新有效链表中的有效数据标识。
71.第一目标数据只是为便于和后文的其他目标数据区分而进行的命名,并非用于限定某一目标数据。
72.针对部分未命中的情况,这也就意味着,有部分不在刷新有效cache块中,需要从raid获得未命中的数据并存到刷新有效cache块中,这样刷新有效cache中的有效数据得到了补充,以使得后续能够读出更多的有效数据到刷新有效cache中,以便更多的凑出满条带来。
73.本实施例中,第一目标数据和从第二刷新有效cache块中读取的数据就是读请求请求读取的数据。
74.读请求使用刷新有效cache后刷新的技术方案可以理解为:读请求命中刷新有效cache链表,如果读请求请求读取的数据全部存放在cache中,直接将读请求读取的数据返回;如果读请求请求读取的数据未全部存放在cache中,那么会从raid读出新数据到刷新有
效cache块中,使cache中能够保存更多的有效数据。在刷新时,仍然可以按照步骤201~步骤205以实现用该刷新有效cache块与同一条带内的待刷新脏cache块组成满条带或者非满条带。
75.作为另一种实施例,针对读请求请求读取的数据全部未命中刷新有效链表,则从所述raid中读取所述读请求请求读取的数据中,将读取的数据存放到指定的刷新有效cache块中,基于已存放读取的数据的刷新有效cache块更新所述刷新有效链表中的有效数据标识。该实施例能够对刷新有效cache中的有效数据得到了补充。
76.由此可见,本实施例提供的技术方案中,读请求命中并使用刷新有效cache块并不会影响刷新,反而可以补齐刷新有效cache缺失的部分数据。
77.作为一个实施例,如图6所示,在步骤201之前,该方法还包括如下步骤:
78.步骤2014,接收写请求,若所述写请求请求写入的数据命中所述刷新有效链表中有效数据标识关联的第三刷新有效cache块,则执行步骤2015。
79.这里,第三刷新有效cache块只是为便于和后文的其他刷新有效cache块区分而进行的命名,并非用于限定某一刷新有效cache块。
80.写请求请求写入的数据命中所刷新有效链表中有效数据标识关联的第三刷新有效cache块,这就表示,cache已将第三刷新有效cache块存放的数据写入raid。
81.步骤2015,从所述刷新有效链表中移除所述第三刷新有效cache块的记录,将所述第三刷新有效cache块变成脏cache块,并将写请求对应待写入的数据写入到所述脏cache块中。
82.本实施例中,如果是写请求命中了刷新有效cache块,那么刷新有效cache块就从刷新有效链表移到了脏cache链表,这就意味着该刷新有效cache块变成脏cache块,会被写入新的数据,那么这个脏cache块也会主动刷新。
83.写请求使用刷新有效cache链表后的刷新方案如下:写请求命中刷新有效cache链表,写请求命中的刷新有效cache块会从刷新有效链表中移除,并加入到脏数据链表,同时写入新的脏数据,也就是更新原有数据或者增加新的脏数据。在刷新时,执行步骤201~步骤205。
84.此,完成实施例的描述。
85.下面对本技术提供的装置进行描述:
86.参见图7,图7为本技术提供的一种高速缓冲存储器cache刷新装置700的结构示意图,应用于存储设备,所述装置包括:
87.条带构造单元701,用于当需要刷新cache时,若检测到所述cache不存在满条带,则从所述cache中获取脏cache块,并从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带;判断所述cache是否存在已构成的满条带,若存在,则触发第一满条带刷新单元702,若不存在,则触发非满条带刷新单元703;所述刷新有效链表包括有效数据标识,所述有效数据标识用于关联所述cache中脏cache块被刷新后的刷新有效cache块;
88.所述第一满条带刷新单元702,用于向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内cache块存放的数据有效,基于所述满条带内的
cache块更新所述刷新有效链表中的有效数据标识;
89.所述非满条带刷新单元703,用于向raid写入已构成的非满条带,在完成向所述raid写入所述非满条带之后,保持所述非满条带内cache块存放的数据有效,基于所述非满条带内的cache块更新所述刷新有效链表中的有效数据标识。
90.作为一个实施例,所述条带构造单元701包括,用于从所述cache中获取脏cache块的脏cache块单元,具体用于:
91.从已配置的脏数据链表中选择位于同一条带记录的、且为有效的脏cache块关联的脏数据块标识,并基于选择的脏数据块标识从cache中获取与其关联的脏cache块;其中,所述脏数据链表包括脏数据块标识,所述脏数据块标识用于关联所述cache中存放脏数据的脏cache块;
92.所述条带构造单元中从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带,具体用于:
93.基于获取的脏cache块对应逻辑单元号lun的逻辑地址lba,从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,按照查找到有效数据标识关联的所有刷新有效cache块对应lun的lba,从cache中获得有效数据标识关联的所有刷新有效cache块,以将获得的所有刷新有效cache块补齐到已获取到的脏cache块所属的条带中,以构成满条带或非满条带。
94.作为一个实施例,该装置还包括:第二满条带写入子单元,具体用于:
95.若检测到所述cache存在满条带,向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内的cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识。
96.作为一个实施例,该装置还包括:
97.请求处理单元,用于接收读请求,若所述读请求请求读取的数据全部命中所述刷新有效链表中有效数据标识关联的第一刷新有效cache块,则触发第一读取单元,若所述读请求请求读取的数据部分命中所述刷新有效链表中有效数据标识关联的第二刷新有效cache块,则触发第二读取单元;
98.所述第一读取单元,用于从所述cache中读取所述第一刷新有效cache块中存储的有效数据;
99.所述第二读取单元,用于从所述第二刷新有效cache块中读取存储的有效数据,并从所述raid中读取所述读请求请求读取的数据中未命中所述刷新有效链表中有效数据标识关联的刷新有效cache块的第一目标数据,将所述第一目标数据存放到指定的刷新有效cache块中,基于已存放所述第一目标数据的刷新有效cache块更新所述刷新有效链表中的有效数据标识。作为一个实施例,该装置还包括:
100.写请求处理单元,用于接收写请求,若所述写请求请求写入的数据命中所述刷新有效链表中有效数据标识关联的第三刷新有效cache块,则从所述刷新有效链表中移除所述第三刷新有效cache块的记录,将所述第三刷新有效cache块变成脏cache块,并将写请求对应待写入的数据写入到所述脏cache块中。
101.至此,完成图7示的描述。
102.由此可见,在本技术实施例的技术方案中,
103.当需要刷新cache时,若检测到cache不存在满条带,则从cache中获取脏cache块,并使用已配置的刷新有效链表查找与脏cache块为同一条带内的所有刷新有效cache块,以与所获取的脏cache块构成满条带或非满条带,并基于已构成的满条带或非满条带向raid写入满条带或非满条带,在完成向raid写入满条带或非满条带之后,保持满条带或非满条带内cache块存放的数据有效,并基于满条带或非满条带内的cache块更新所述刷新有效链表。可见,本技术实施例提供的技术方案使用配置的用于记录cache中脏cache块被刷新后的刷新有效cache块的刷新有效链表,为正在刷新的单个cache块与刷新有效链表中记录的刷新完有效cache块构成满条带或非满条带,以使得写入raid时能够以更多的满条带写,降低raid下条带冲突和数据回读带来的开销,使cache能够循环利用,具有更高的可用性,优化cache刷盘的性能。
104.上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
105.本技术实施例提供的电子设备,从硬件层面而言,硬件架构示意图可以参见图8所示。包括:机器可读存储介质和处理器,其中:所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现上述示例公开的cache刷新操作。
106.本技术实施例提供的机器可读存储介质,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现上述示例公开的cache刷新操作。
107.这里,机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radom access memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
108.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
109.为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本技术时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
110.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
111.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一
流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
112.而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
113.这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
114.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本技术方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
115.以上所述仅为本技术的较佳实施例而已,并不用以限制本技术,凡在本技术的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本技术保护的范围之内。
技术特征:1.一种高速缓冲存储器cache刷新方法,其特征在于,应用于存储设备,所述方法包括:当需要刷新cache时,若检测到所述cache不存在满条带,则从所述cache中获取脏cache块,并从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带;所述刷新有效链表包括有效数据标识,所述有效数据标识用于关联所述cache中脏cache块被刷新后的刷新有效cache块;判断所述cache是否存在已构成的满条带,若存在,则向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识;若不存在,则向raid写入已构成的非满条带,在完成向所述raid写入所述非满条带之后,保持所述非满条带内cache块存放的数据有效,基于所述非满条带内的cache块更新所述刷新有效链表中的有效数据标识。2.根据权利要求1所述的方法,其特征.在于,所述从所述cache中获取脏cache块,包括:从已配置的脏数据链表中选择位于同一条带记录的、且为有效的脏cache块关联的脏数据块标识,并基于选择的脏数据块标识从cache中获取与其关联的脏cache块;其中,所述脏数据链表包括脏数据块标识,所述脏数据块标识用于关联所述cache中存放脏数据的脏cache块;所述从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带,包括:基于获取的脏cache块对应逻辑单元号lun的逻辑地址lba,从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,从cache中获得查找到的有效数据标识关联的所有刷新有效cache块,按照获得的所有刷新有效cache块对应lun的lba,将获得的所有刷新有效cache块补齐到已获取到的脏cache块所属的条带中,以构成满条带或非满条带。3.根据权利要求1所述的方法,其特征在于,若检测到所述cache存在满条带,该方法还包括:向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内的cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识。4.根据权利要求1~3中任一项所述的方法,其特征在于,在该方法之前,该方法还包括:接收读请求,若所述读请求请求读取的数据全部命中所述刷新有效链表中有效数据标识关联的第一刷新有效cache块,则从所述cache中读取所述第一刷新有效cache块中存储的有效数据;若所述读请求请求读取的数据部分命中所述刷新有效链表中有效数据标识关联的第二刷新有效cache块,则从所述第二刷新有效cache块中读取存储的有效数据,并从所述raid中读取所述读请求请求读取的数据中未命中所述刷新有效链表中有效数据标识关联
的刷新有效cache块的第一目标数据,将所述第一目标数据存放到指定的刷新有效cache块中,基于已存放所述第一目标数据的刷新有效cache块更新所述刷新有效链表中的有效数据标识。5.根据权利要求1~3中任一项所述的方法,其特征在于,在该方法之前,还包括:接收写请求,若所述写请求请求写入的数据命中所述刷新有效链表中有效数据标识关联的第三刷新有效cache块,则从所述刷新有效链表中移除所述第三刷新有效cache块的记录,将所述第三刷新有效cache块变成脏cache块,并将写请求对应待写入的数据写入到所述脏cache块中。6.一种高速缓冲存储器cache刷新装置,其特征在于,应用于存储设备,所述装置包括:条带构造单元,用于当需要刷新cache时,若检测到所述cache不存在满条带,则从所述cache中获取脏cache块,并从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带;判断所述cache是否存在已构成的满条带,若存在,则触发第一满条带刷新单元,若不存在,则触发非满条带刷新单元;所述刷新有效链表包括有效数据标识,所述有效数据标识用于关联所述cache中脏cache块被刷新后的刷新有效cache块;所述第一满条带刷新单元,用于向raid写入所述满条带,在完成向所述raid写入所述满条带之后,保持所述满条带内cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识;所述非满条带刷新单元,用于向raid写入已构成的非满条带,在完成向所述raid写入所述非满条带之后,保持所述非满条带内cache块存放的数据有效,基于所述非满条带内的cache块更新所述刷新有效链表中的有效数据标识。7.根据权利要求6所述的装置,其特征在于,所述条带构造单元包括,用于从所述cache中获取脏cache块的脏cache块单元,具体用于:从已配置的脏数据链表中选择位于同一条带记录的、且为有效的脏cache块关联的脏数据块标识,并基于选择的脏数据块标识从cache中获取与其关联的脏cache块;其中,所述脏数据链表包括脏数据块标识,所述脏数据块标识用于关联所述cache中存放脏数据的脏cache块;所述条带构造单元中从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,以使用查找的有效数据标识关联的刷新有效cache块与所获取的脏cache块构成满条带或非满条带,具体用于:基于获取的脏cache块对应逻辑单元号lun的逻辑地址lba,从已配置的刷新有效链表查找与所述脏cache块为同一条带内的所有刷新有效cache块关联的有效数据标识,从cache中获得查找到的有效数据标识关联的所有刷新有效cache块,按照获得的所有刷新有效cache块对应lun的lba,将获得的所有刷新有效cache块补齐到已获取到的脏cache块所属的条带中,以构成满条带或非满条带。8.根据权利要求6所述的装置,其特征在于,该装置还包括:第二满条带写入子单元,具体用于:若检测到所述cache存在满条带,向raid写入所述满条带,在完成向所述raid写入所述
满条带之后,保持所述满条带内的cache块存放的数据有效,基于所述满条带内的cache块更新所述刷新有效链表中的有效数据标识。9.根据权利要求6~8中任一项所述的装置,其特征在于,该装置还包括:请求处理单元,用于接收读请求,若所述读请求请求读取的数据全部命中所述刷新有效链表中有效数据标识关联的第一刷新有效cache块,则触发第一读取单元,若所述读请求请求读取的数据部分命中所述刷新有效链表中有效数据标识关联的第二刷新有效cache块,则触发第二读取单元;所述第一读取单元,用于从所述cache中读取所述第一刷新有效cache块中存储的有效数据;所述第二读取单元,用于从所述第二刷新有效cache块中读取存储的有效数据,并从所述raid中读取所述读请求请求读取的数据中未命中所述刷新有效链表中有效数据标识关联的刷新有效cache块的第一目标数据,将所述第一目标数据存放到指定的刷新有效cache块中,基于已存放所述第一目标数据的刷新有效cache块更新所述刷新有效链表中的有效数据标识。10.根据权利要求6~8中任一项所述的装置,其特征在于,该装置还包括:写请求处理单元,用于接收写请求,若所述写请求请求写入的数据命中所述刷新有效链表中有效数据标识关联的第三刷新有效cache块,则从所述刷新有效链表中移除所述第三刷新有效cache块的记录,将所述第三刷新有效cache块变成脏cache块,并将写请求对应待写入的数据写入到所述脏cache块中。
技术总结本申请提供一种高速缓冲存储器CACHE刷新方法及装置,本申请中,当需要刷新CACHE时,若检测到CACHE不存在满条带,则从CACHE中获取脏CACHE块,并使用已配置的刷新有效链表查找与脏CACHE块为同一条带内的所有刷新有效CACHE块,以与所获取的脏CACHE块构成满条带或非满条带,并基于已构成的满条带或非满条带向RAID写入满条带或非满条带,在完成向RAID写入满条带或非满条带之后,保持满条带或非满条带内CACHE块存放的数据有效,并基于满条带或非满条带内的CACHE块更新所述刷新有效链表。可见,本申请能够降低RAID下条带冲突和数据回读带来的开销以及提高CACHE的可用性。来的开销以及提高CACHE的可用性。来的开销以及提高CACHE的可用性。
技术研发人员:李丰
受保护的技术使用者:杭州宏杉科技股份有限公司
技术研发日:2022.07.25
技术公布日:2022/11/1