一种数据IO散列的方法技术领域
本发明涉及储存系统性能优化技术领域,特别是涉及一种数据IO
散列的方法。
背景技术
目前,随着数字化时代的到来,在人们的日常生活和科学研究中,
越来越多的传统业务开始数字化、网络化,促使数据爆炸式增长,存
储系统在整个业务处理系统中的地位也愈发重要,然而源源不断的数
据流导致存储系统产生严重的I/O输入输出的瓶颈问题。
计算机系统的性能主要由处理子系统性能和I/O子系统的性能两
部分决定。其中CPU的处理速度始终保持了高速的增长,而I/O子系
统其存储容量虽然增长较快,但其处理速度的增长远跟不上CPU速度
的增长,为解决上述问题,现代计算机系统中,从寄存器、L1/L2高
速缓存、内存、闪存,到磁盘/光盘/存储网络,各级存储器硬件组成
了一个金字塔结构,越是底层存储容量越大,访问速度也越慢。
其中,缓存系统的性能加速效果,对于整个系统的性能影响比较
明显,影响缓存性能的一个关键因素是磁盘块访问冲突和缓存命中率。
一般的,数据IO的读取先进入缓存块,从缓存块进入磁盘,通过简
单的数学运算建立磁盘块和缓存块的线性关系,虽然能够适应多数业
务类型,但是难以适应一些特殊业务类型,在某些情况下会造成磁盘
快访问冲突严重,从而影响整个系统的性能。
发明内容
本发明的目的是提供一种数据IO散列的方法,以实现有效地降
低了磁盘快访问冲突造成的性能影响,提升缓存性能。
为解决上述技术问题,本发明提供一种数据IO散列的方法,该
方法包括:
当有数据I/O请求下发到缓存后,通过缓存散列算法确定被访问
数据块在缓存集合cache_set中的散列编号;
将数据从缓存块迁移至与缓存块对应的磁盘块中。
优选的,所述通过缓存散列算法确定被访问数据块在缓存集合
cache_set中的散列编号,包括:
利用缓存散列算法计算缓存块线性编号对应的散列值,确定被访
问数据块在缓存集合cache_set中的散列编号。
优选的,所述计算缓存块线性编号对应的散列值之前,还包括:
通过数据I/O请求提取对磁盘操作的起始扇区号dbn。
优选的,所述通过数据I/O请求提取对磁盘操作的起始扇区号dbn
之后,还包括:
通过起始扇区号dbn和缓存集合cache_set的总数计算起始扇区对
应的缓存集合cache_set的线性编号。
优选的,所述通过起始扇区号dbn和缓存集合cache_set的总数计
算起始扇区对应的缓存集合cache_set的线性编号之后,还包括:
利用缓存散列算法计算起始扇区号dbn在缓存集合cache_set中对
应的缓存块线性编号,确定起始扇区对应的缓存集合cache_set的散列
编号。
优选的,所述将数据从缓存块迁移至与缓存块对应的磁盘块中之
前,还包括:
获取缓存集合cache_set参数配置的接口。
优选的,所述获取缓存集合cache_set参数配置的接口之后,还包
括:
通过缓存集合cache_set参数配置的接口确定缓存集合中缓存块
的个数;
通过缓存集合cache_set参数配置的接口调整缓存集合中缓存块
的大小。
本发明所提供的一种数据IO散列的方法,当有数据I/O请求下发
到缓存后,通过缓存散列算法确定被访问数据块在缓存集合cache_set
中的散列编号;将数据从缓存块迁移至与缓存块对应的磁盘块中。可
见,通过散列算法将对缓存块与磁盘快之间的线性对应关系进行改善,
将缓存块对应的磁盘块散列开来,有效地降低了磁盘快访问冲突造成
的性能影响,另外对于提升缓存命中率也有显著效果,如此通过散列
算法建立缓存块和磁盘块之间的散列对应关系,能够提升相同缓存对
应的磁盘块范围,并且对于避免缓存块访问冲突有显著效果,能够有
效提供整个系统的缓存命中率,提高整个缓存系统的性能,实现有效
地降低了磁盘快访问冲突造成的性能影响,提升缓存性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面
将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而
易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通
技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附
图获得其他的附图。
图1为本发明所提供的一种数据IO散列的方法的流程图;
图2为本发明缓存集合散列的示意图;
图3为本发明缓存块散列的示意图。
具体实施方式
本发明的核心是提供一种数据IO散列的方法,以实现有效地降
低了磁盘快访问冲突造成的性能影响,提升缓存性能。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本
发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整
地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是
全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有
做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护
的范围。
请参考图1,图1为本发明所提供的一种数据IO散列的方法的流
程图,该方法包括:
S11:当有数据I/O请求下发到缓存后,通过缓存散列算法确定
被访问数据块在缓存集合cache_set中的散列编号;
其中,通过缓存散列算法确定被访问数据块在缓存集合cache_set
中的散列编号的过程具体为:利用缓存散列算法计算缓存块线性编号
对应的散列值,确定被访问数据块在缓存集合cache_set中的散列编
号。
利用缓存散列算法计算缓存块线性编号对应的散列值之前,还包
括:通过数据I/O请求提取对磁盘操作的起始扇区号dbn。
另外,通过数据I/O请求提取对磁盘操作的起始扇区号dbn之后,
通过起始扇区号dbn和缓存集合cache_set的总数计算起始扇区对应的
缓存集合cache_set的线性编号。
通过起始扇区号dbn和缓存集合cache_set的总数计算起始扇区对
应的缓存集合cache_set的线性编号之后,利用缓存散列算法计算起始
扇区号dbn在缓存集合cache_set中对应的缓存块线性编号,确定起始
扇区对应的缓存集合cache_set的散列编号。
S12:将数据从缓存块迁移至与缓存块对应的磁盘块中。
其中,将数据从缓存块迁移至与缓存块对应的磁盘块中之前,获
取缓存集合cache_set参数配置的接口。
获取缓存集合cache_set参数配置的接口之后,通过缓存集合
cache_set参数配置的接口确定缓存集合中缓存块的个数,通过缓存集
合cache_set参数配置的接口调整缓存集合中缓存块的大小。
可见,该方法通过散列算法将对缓存块与磁盘快之间的线性对应
关系进行改善,将缓存块对应的磁盘块散列开来,有效地降低了磁盘
快访问冲突造成的性能影响,另外对于提升缓存命中率也有显著效果。
具体的,通过散列算法将缓存块与被访问磁盘块的线性对应关系
打破,重新建立散列的对应关系,能够提升相同缓存对应的磁盘块范
围,并且对于避免缓存块访问冲突有显著效果,能够有效提供整个系
统的缓存命中率,提高整个缓存系统的性能。从缓存层面有效的保证
业务的需求,降低业务的延迟,加快业务的响应时间,并能有效提高
缓存的利用率。
更详细的,该方法的具体过程为:
(1)当有I/O请求下发到缓存后,通过I/O提取对磁盘操作的起
始扇区号dbn;
(2)通过起始扇区号dbn和缓存集合cache_set总数计算起始扇区
对应缓存集合cache_set的线性编号;
(3)通过缓存散列算法,计算缓存集合cache_set线性编号的散列
值,确定起始扇区对应缓存集合cache_set的散列编号;
(4)进一步计算起始扇区号dbn在缓存集合cache_set中对应的缓
存块线性编号;
(5)通过缓存散列算法,计算缓存块线性编号对应的散列值,确
定被访问数据块在缓存集合cache_set中的散列编号,将数据从缓存块
迁移至与缓存块对应的磁盘块中。
本发明提出的一种数据IO散列的方法,通过缓存散列算法打破
缓存块与磁盘块之间的线性对应关系,使缓存块与磁盘块的对应关系
成散列状态,这样的设计可以使相同缓存对应的磁盘区域更为广泛,
从而有效避免了磁盘块访问冲突造成的等待时间,能够有效提高缓存
性能,对于缓存命中率也有显著的提升效果。
具体的,为了实现本发明所述的功能,本发明的方法可应用于缓
存集合组织模块、缓存块组织模块、缓存集合散列模块和缓存块散列
模块。
其中,缓存集合组织模块包含两个功能:一是缓存集合cache_set
的组织管理功能;二是提供缓存集合cache_set参数配置的接口,其中
缓存集合cache_set包含多个缓存块,其中,缓存集合中缓存块的个数
可以通过接口配置。
其中,缓存块组织模块也同样具有两个功能:意识缓存块的组织
管理功能;二是提供缓存块相关配置参数的管理接口,缓存块的大小
可以通过接口进行调整。
其中,缓存集合散列模块主要负责实现缓存集合的散列,缓存集
合个数和起始扇区经过简单的数学运算后能够得出被访问磁盘块与缓
存集合的线性对应关系,随后缓存集合散列模块会对通过散列算法打
破这个线性关系,重新建立新的散列对应关系。
其中,缓存块散列模块的功能是实现某个缓存集合内部的缓存块
与磁盘块之间的散列对应关系。
图2为本发明缓存集合散列的示意图,其中虚线部分为缓存集合
与磁盘块的线性对应关系,通过缓存散列算法重建了缓存集合和磁盘
块的对应关系,两者之间不再是简单的线性对应。
图3为本发明缓存块散列示意图,同图2类似,缓存集合内部的
缓存块与磁盘块的对应关系原先为图中虚线所示的线性对应关系,该
设计中将其进行了重组,通过散列算法将其对应关系变成无序的散列
对应。
I/O请求下发到缓存后进行I/O散列的具体流程为:首先对缓存集
合进行散列化,建立缓存集合与磁盘块的散列对应关系;然后对缓存
集合中的每一个缓存块进行散列化操作,让每一个缓存块与磁盘之间
的对应关系都变成无需的散列对应。
综上,本发明所提供的一种数据IO散列的方法,当有数据I/O请
求下发到缓存后,通过缓存散列算法确定被访问数据块在缓存集合
cache_set中的散列编号;将数据从缓存块迁移至与缓存块对应的磁盘
块中。可见,通过散列算法将对缓存块与磁盘快之间的线性对应关系
进行改善,将缓存块对应的磁盘块散列开来,有效地降低了磁盘快访
问冲突造成的性能影响,另外对于提升缓存命中率也有显著效果,如
此通过散列算法建立缓存块和磁盘块之间的散列对应关系,能够提升
相同缓存对应的磁盘块范围,并且对于避免缓存块访问冲突有显著效
果,能够有效提供整个系统的缓存命中率,提高整个缓存系统的性能,
实现有效地降低了磁盘快访问冲突造成的性能影响,提升缓存性能。
以上对本发明所提供的一种数据IO散列的方法进行了详细介绍。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上
实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指
出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前
提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入
本发明权利要求的保护范围内。