自适应混合读/写缓存的方法

文档序号:9432203阅读:360来源:国知局
自适应混合读/写缓存的方法
【技术领域】
[0001]本发明涉及计算机存储技术,尤其涉及一种自适应混合读/写的缓存的方法。
【背景技术】
[0002]目前市面上大部分存储产品的缓存都是读写分离的,读缓存的数据结构与写缓存的数据结构不复用,在内存中表现为两个区域,两份数据。
[0003]上述读写方式的优点是比较容易管理,但具有以下缺点:(I)如果对同一段数据先读后写,那么要么必须同时更新两份缓存,要么将读缓存设置为失效或删除。(2)如果对同一段数据先写后读,那么要么将写缓存中的脏数据回写完成后才可以进行读,要么将写缓存复制到读缓存,然后再进行读缓存。(3)在最差的情况下,同一份数据在缓存中可能会有两份,浪费了内存资源。

【发明内容】

[0004]本发明提供一种自适应混合读/写缓存的方法,通过控制读缓存和写缓存的大小,自适应地调节读写缓存的比例。
[0005]根据上述目的,本发明提供一种自适应混合读/写缓存的方法,其特征在于,所述方法包括:
[0006]将缓存按设定的大小划分成多个块,并设置成每个缓存节点为一个块;
[0007]使用红黑树对所述每个缓存节点进行索引;
[0008]在写入或读取缓存时,找到对应的缓存节点,然后在所述缓存节点上进行相应的写入或读取;
[0009]其中,在进行写入或读取缓存时,统计所述读写缓存的使用情况及读写比例,对所述写入或读取的缓存比例进行调节。
[0010]其中,所述步骤S3具体包括:
[0011]当写入缓存时,找到对应的缓存节点,然后将数据填充到所找到的缓存节点上;
[0012]当读取缓存时,找到对应的缓存节点,然后在找到的缓存节点上查找缓存。
[0013]其中,所述步骤S3还包括:
[0014]在读取缓存时,如果没有读取到完整的数据,则读取所述缓存对应的外存,并将读取的数据存入到所述缓存。
[0015]其中,对所述写入或读取的缓存比例进行调节的过程具体包括:统计每个磁盘阵列组RAID的读写缓存的使用情况以及读写输入输出1的比例,如果读1比例升高,则升高读缓冲在该RAID缓存的占比,反之升高写缓存在该RAID缓存中的占比。
[0016]其中,所述步骤S3还包括:
[0017]当所述缓存的空间不足时,释放热度最低的非脏缓存,将所述非脏缓存释放到指定的占比位置。
[0018]其中,所述步骤S3还包括:
[0019]在写缓存使用超过一定百分比时或写缓存余量不足时,则放缓或停止执行写1/0,启动回写动作,待清空掉足够的脏数据之后再启动写I/O。
[0020]其中,根据缓存的最后一次操作判定所述缓存为读缓冲还是写缓存,如果最后一次是读取,则为读缓存,否则为写缓存。
[0021 ] 其中,所述方法还包括:
[0022]使用双控I/O锁对缓存的访问进行保护;所述对缓存的访问包括读取、写入和回与ο
[0023]根据本发明的另一个方面,提供一种自适应混合读/写缓存的系统,所述系统包括:
[0024]缓冲块划分模块,用于将所述存储器的缓存按设定的大小划分成多个块;
[0025]索引模块,用于使用红黑树对所述每个缓存节点进行索引;
[0026]缓存读/写模块,用于进行缓存读写。
[0027]其中,所述缓存读/写模块包括:
[0028]读缓存单元,用于读取缓存;
[0029]写缓存单元,用于写入缓存;
[0030]缓存占比调节单元,用于以磁盘阵列组RAID的形式统计读写缓存的使用情况以及读写输入输出1的比例并进行调节;
[0031]缓存释放单元,用于在所述存储器空间不足时释放所述缓存;
[0032]回写单元,用于在写缓存超过设定比例或写缓存余量不足时进行回写动作。
[0033]本发明的自适应混合读/写缓存的方法及系统,通过控制读缓存的大小和写缓存的大小,很容易保证缓存的读写一致性,并可以自适应地调节读写缓存的比例,从而可以对缓存做到内存资源的合理利用,同时在读取时查找速度快,并且不需要二次遍历。
【附图说明】
[0034]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0035]图1示出了本发明的自适应混合读/写缓存的方法的流程图。
[0036]图2示出了本发明的自适应混合读/写缓存的系统的结构框图。
[0037]图3示出了本发明的自适应混合读/写缓存的系统的缓存读/写模块的结构框图。
【具体实施方式】
[0038]下面将结合附图对本发明的实施例进行详细描述。
[0039]图1示出了本发明的自适应混合读/写缓存的方法的流程图。
[0040]参照图1,本发明的自适应混合读/写缓存的方法包括步骤:
[0041]S1、将缓存按设定的大小划分成多个块,并设置成每个缓存节点为一个块;从而将缓存的每个扇区的地址转换为块地址。
[0042]S2、使用红黑树对所述每个缓存节点进行索引,从而可以加快查找速度。
[0043]S3、在写入或读取缓存时,找到对应的缓存节点,然后在所述缓存节点上进行相应的写入或读取;
[0044]具体地,当写入缓存时,找到对应的缓存节点,然后将数据填充到所找到的缓存节点上;
[0045]当读取缓存时,找到对应的缓存节点,然后在找到的缓存节点上查找缓存。读缓冲时查找到的缓存可能是上一次读取出来的读缓冲,也可能是之前被写入的写缓存。如果没有读取到完整的数据,则读取所述缓存对应的外存,并将读取的数据存入到所述缓存。
[0046]另外,在进行写入或读取缓存时,统计所述读写缓存的使用情况及读写比例,对所述写入或读取的缓存比例进行调节。其过程为:
[0047]统计每个磁盘阵列组RAID的读写缓存的使用情况以及读写输入输出1的比例,如果读1比例
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1