本发明实施例涉及计算机,具体涉及一种高速缓存管理系统及方法。
背景技术:
1、为了减少io延时,提高iops(input/output operations per second,每秒输入输出量)能力,目前通常使用哈希链表管理高速缓存(cache),但哈希链表管理需要消耗很多时间以及额外内存,导致具有较长的延时。
技术实现思路
1、鉴于上述问题,本发明实施例提供了一种高速缓存管理系统及方法,用于解决现有技术中存在的高速缓存的管理存在延时长、需要占据额外内存的问题。
2、根据本发明实施例的一个方面,提供了一种高速缓存管理系统,该系统包括:
3、缓存行管理模块和存储模块;缓存行管理模块和存储模块通信连接;
4、缓存行管理模块用于对接收到的输入输出请求产生响应,并基于输入输出请求对输入输出请求对应的缓存行进行操作,以及向存储模块发送操作指令;存储模块用于对操作指令对应的存储数据执行操作指令对应的操作;操作指令包括读数据和写数据;
5、缓存行管理模块包括锁单元、等待队列和脏缓存行队列;锁单元用于存储缓存行的状态信息,状态信息包括占用状态和空闲状态;等待队列用于存储对应的缓存行处于占用状态的输入输出请求;若对应的缓存行处于空闲状态,则并取出并唤醒等待队列中存储的输入输出请求;脏缓存行队列用于将脏缓存行按照访问顺序排列并存储。
6、在一种可选的实施方式中,存储模块包括片外存储单元和片内存储单元;片内存储单元和片外存储单元通信连接;
7、脏缓存行队列中的脏缓存行中的数据对应于片内存储单元中的存储数据;片外存储单元中的存储数据为被释放的脏缓存行对应的数据;
8、若脏缓存行队列中脏缓存行的数量超过预设数量,则缓存行管理模块释放脏缓存行队列中的脏缓存行并将脏缓存行队列中脏缓存行对应的数据从片内存储单元存储到片外存储单元中。
9、在一种可选的实施方式中,缓存行管理模块还包括预读窗口单元;预读窗口单元用于在接收到读命令时创建预读窗口或扩展预读窗口的窗口长度,预读窗口用于表征片内存储单元从片外存储单元中扩展读取的数据范围。
10、在一种可选的实施方式中,缓存行管理模块还包括数据映射单元;
11、数据映射单元用于存储数据映射信息;数据映射信息与缓存行一一对应。
12、根据本发明实施例的另一方面,提供了一种高速缓存管理方法,可应用于如上任意的高速缓存管理系统中,该方法包括:
13、获取当前请求,并确定当前请求对应的目标缓存行;当前请求为当前获得仲裁的输入输出请求;
14、基于当前请求对目标缓存行的操作类型,或者基于操作类型和目标缓存行的状态信息,确定并执行对当前请求和目标缓存行的操作;状态信息是从锁单元中获取到的;对当前请求的操作包括执行当前请求,返回当前请求的响应信息,以及将当前请求放入等待队列;对目标缓存行的操作包括分配目标缓存行,释放目标缓存行,以及将目标缓存行放入脏缓存行队列;
15、若执行当前请求,则基于当前请求,确定并执行对存储模块和/或目标缓存行的操作。
16、在一种可选的实施方式中,基于操作类型和目标缓存行的状态信息,确定并执行对当前请求和目标缓存行的操作,包括:
17、若操作类型为申请缓存行,则在数据映射单元中查找目标缓存行对应的数据映射信息;
18、若数据映射单元中存在目标缓存行对应的数据映射信息,则获取目标缓存行的状态信息;
19、若状态信息为空闲状态,或者数据映射单元中不存在目标缓存行对应的数据映射信息,则向当前请求分配目标缓存行;
20、执行当前请求,更新数据映射单元中目标缓存行对应的数据映射信息,并将目标缓存行的状态信息更改为占用状态。
21、在一种可选的实施方式中,获取目标缓存行的状态信息之后,还包括:
22、若状态信息为占用状态,则将当前请求放入等待队列,直到状态信息从占用状态更改为空闲状态,从等待队列中取出当前请求。
23、在一种可选的实施方式中,基于操作类型,确定并执行对当前请求和目标缓存行的操作,包括:
24、若操作类型为释放缓存行,则在数据映射单元中查找目标缓存行对应的数据映射信息;
25、若数据映射单元中存在目标缓存行对应的数据映射信息,则确定目标缓存行释放成功;
26、返回当前请求的响应信息,将目标缓存行的状态信息更改为空闲状态,并从等待队列中取出输入输出请求;
27、若目标缓存行为脏缓存行,则将目标缓存行放入脏缓存行队列。
28、在一种可选的实施方式中,该方法还包括:
29、若脏缓存行队列中脏缓存行的数量超过预设数量,则取出脏缓存行队列中的多个脏缓存行,并对多个脏缓存行进行排序;
30、若排序后的多个脏缓存行为连续的脏缓存行,则将多个脏缓存行进行聚合,得到聚合请求;
31、对多个脏缓存行或聚合请求进行刷新,以将多个脏缓存行或聚合请求对应的数据从片内存储单元存储到片外存储单元中。
32、在一种可选的实施方式中,该方法还包括:
33、若第一读请求对应的起始读地址不在已有的预读窗口中,则以第一读请求对应的起始读地址为起始地址创建第一预读窗口;
34、若第二读请求对应的起始读地址位于第一预读窗口中,则基于第二读请求对应的起始读地址在第一预读窗口中的位置,对第二读请求对应的结束读地址进行扩展,得到扩展读地址;
35、将第二读请求对应的起始读地址到扩展读地址所对应的数据,从片外存储单元读取到片内存储单元中,并更新对应的缓存行。
36、在一种可选的实施方式中,基于第二读请求对应的起始读地址在第一预读窗口中的位置,对第二读请求对应的结束读地址进行扩展,得到扩展读地址,包括:
37、若第二读请求对应的起始读地址位于第一预读窗口的非末端区域,则将第一预读窗口的结束地址作为扩展读地址;
38、若第二读请求对应的起始读地址位于第一预读窗口的末端区域,则从第一预读窗口的结束地址处扩展第二预设长度,得到扩展读地址。
39、在一种可选的实施方式中,基于当前请求,确定并执行对存储模块和/或目标缓存行的操作,包括:
40、若当前请求的请求类型为回写请求,则下发前端读写指令,以指示片内存储单元获取并存储数据;
41、基于片内存储单元存储的数据,对目标缓存行进行数据更新;
42、若当前请求的请求类型为读请求,并且脏缓存行队列中存在目标缓存行,则下发前端读写指令,以指示片内存储单元发送当前请求对应的数据;
43、若当前请求的请求类型为读请求,并且脏缓存行队列中不存在目标缓存行,则下发后端读写指令,以指示片外存储单元发送当前请求对应的数据。
44、本发明实施例在缓存行管理模块中设置锁单元、等待队列和脏缓存行队列,通过锁单元对输入输出请求对应的缓存行的状态信息进行管理,从而在读或写内存前先判断对应的缓存行是否可用,在对应的缓存行处于空闲状态时再与内存进行交互,完成输入输出请求对应的相关操作,从而在不在内存中设置互斥锁的情况下实现对输入输出请求的响应和操作,不需要和内存频繁交互,降低了延迟,并且多个输入输出请求可以同时操作缓存行,提高了并行度。
45、上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
1.一种高速缓存管理系统,其特征在于,所述系统包括:缓存行管理模块和存储模块;所述缓存行管理模块和所述存储模块通信连接;
2.根据权利要求1所述的系统,其特征在于,所述存储模块包括片外存储单元和片内存储单元;所述片内存储单元和所述片外存储单元通信连接;
3.根据权利要求2所述的系统,其特征在于,所述缓存行管理模块还包括预读窗口单元;所述预读窗口单元用于在接收到读命令时创建预读窗口或扩展所述预读窗口的窗口长度,所述预读窗口用于表征所述片内存储单元从所述片外存储单元中扩展读取的数据范围。
4.根据权利要求1所述的系统,其特征在于,所述缓存行管理模块还包括数据映射单元;
5.一种高速缓存管理方法,其特征在于,应用于如权利要求1-4任一所述的高速缓存管理系统中,所述方法包括:
6.根据权利要求5所述的方法,其特征在于,基于所述操作类型和所述目标缓存行的状态信息,确定并执行对所述当前请求和所述目标缓存行的操作,包括:
7.根据权利要求6所述的方法,其特征在于,所述获取所述目标缓存行的状态信息之后,还包括:
8.根据权利要求5所述的方法,其特征在于,基于所述操作类型,确定并执行对所述当前请求和所述目标缓存行的操作,包括:
9.根据权利要求5所述的方法,其特征在于,所述方法还包括:
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
11.根据权利要求10所述的方法,其特征在于,所述基于所述第二读请求对应的起始读地址在所述第一预读窗口中的位置,对所述第二读请求对应的结束读地址进行扩展,得到扩展读地址,包括:
12.根据权利要求5-11任一所述的方法,其特征在于,所述基于所述当前请求,确定并执行对存储模块和/或所述目标缓存行的操作,包括:
