基于贝叶斯决策的负载感知的IO性能优化方法
技术领域
本发明属于计算机系统性能优化领域,具体属于数据存储子系统性能优化领域,特别是针对一种基于贝叶斯决策的负载感知的IO性能优化方法。
背景技术
随着计算机科学技术的迅速发展,计算机系统在社会生产和社会生活的各个领域都得到了日益广泛的应用,计算机系统的应用已经对社会生产力的提高和人民生活质量的提高起了不可替代的重要作用。目前和人们的生产生活密切相关的典型的计算机系统有数据库系统、文件服务器系统和web服务器系统等。这些计算机系统服务质量的高低与它们的性能高低直接相关,高性能的计算机系统将带来高质量的服务,反之亦然。所以要进一步发挥计算机系统在社会生产和社会生活中的重要作用,就需要不断的改进计算机系统的性能。
计算机系统的性能主要由处理子系统的性能和IO子系统的性能两部分决定。处理子系统就是中央处理单元(CPU),CPU发展迅速,其处理速度始终保持着高速增长,因而能够满足不断提高的应用需求。按照位于计算机系统的位置不同,IO子系统划分为系统内部IO子系统和外部存储系统。系统内部IO子系统包括实现系统互连的系统总线、各级缓存、计算机内部存储设备(简称内存活着主存)和IO总线等,系统内部的IO子系统在不断的更新换代中保持了IO速度的高增长,能够满足不断提升的计算机系统应用需求。外部存储系统包括外部存储设备、外部存储设备适配器(也称为存储卡,例如SCSI卡和主机总线适配器)和相关互连网络等,外部存储系统虽然也在不断的更新换代,但是它的性能,尤其是IO请求的响应时间,的改进比较缓慢,在过去的20年,CPU的处理速度提升了成千上万倍,而外部存储系统的IO请求的处理速度只提高了约10倍,外部存储系统的IO性能(注意:外部存储系统的性能/IO性能通常也被称为外部存储设备的性能/IO性能,所以在本发明的描述过程中这两种称谓是指同一个事物,在背景技术中采用前一种称谓,在其他部分采用更加通俗和常用的第二种称谓。)已经不能满足日益提高的应用需求,并且成为进一步提升计算机系统整体性能的瓶颈,外部存储系统的IO性能能否有大的改进对于计算机系统在社会生产和社会生活中的进一步推广应用至关重要。为此,众多科学技术人员进行了外部存储系统的IO性能优化方面的研究,提出了一些有成效的优化方法。
然而,目前的大多数IO性能优化方法缺乏通用性和自适应性。目前的IO性能优化的思路是在设备驱动层或存储设备硬件层为某一类应用系统量身定做一个固定的优化方法,这种固定的优化方法只适应于该应用系统的IO负载,如果上层应用系统改变了,那上层应用系统带来的IO负载的特征也就会改变,而原有的设备驱动层和存储设备硬件层不会改变,此时原有的优化方法就无法适应新的应用和新的IO负载。在这种情况下,原有的优化方法不仅不能发挥IO性能优化的作用,往往还会成为外部存储系统IO性能得以发挥的障碍,甚至严重的限制了计算机系统对外部存储设备的IO性能。例如,如果计算机系统上的原有应用系统是视频服务器,那么IO负载的主要特征是数据的顺序读,针对这个特征设备驱动采用了顺序预读策略,即按存储地址顺序递增提前读取外部存储设备上的数据以备后来使用,这个优化方法对于视频服务器而言是恰如其分,但是如果上层应用系统变为web服务器,其负载的主要特征是随机的小量读取,此时,没有发生变化的设备驱动中的顺序预读策略和这种负载特征不匹配,不能实现IO性能优化的作用,反而这种优化策略的实现需要的处理器开销和IO子系统的开销降低了计算机系统的整体性能。
目前也出现了自适应的IO性能优化方法,这一类方法通过挖掘IO负载的特征,试图获取IO访问的数据块之间的相关性,然后利用这种相关性指导数据预读、数据分布和缓存调度。一种典型的做法是使用数据挖掘的方法获取数据访问流中的频繁序列,然后根据频繁序列的内容制定IO性能优化策略,最后执行这些策略以指导数据预读、数据分布和缓存调度。上述的频繁序列是一种有序集,它是由相互关联的数据块组成,它体现了数据块与数据块之间的关联规律。在本发明中,将由若干个相关的数据块构成的、体现了数据块之间关联规律的有序集或者集合统称为相关数据块集,简称相关集。目前的自适应IO性能优化方法都是通过挖掘数据访问流中的相关集来指导IO性能的优化,这些方法在本质上利用了数据块之间的关联性来指导IO性能的优化,没有获取、更没有利用相关集之间的关联性来指导IO性能的优化。换句话说,这些IO性能优化方法只停留在数据块之间的相关性上,而没有上升到相关集之间的相关性上。
本发明将在已有的自适应的IO性能优化方法的基础上,通过贝叶斯决策的方法挖掘出相关数据块集之间的相关性,然后利用这种相关性指导数据预读和缓存调度,最终实现能够感知负载特征变化的自适应的IO性能优化方法。
发明内容
本发明为了提高计算机系统中的IO请求的平均响应速度,提出了一种基于贝叶斯决策的负载感知的IO性能优化方法。这种方法在现有的自适应的IO性能优化方法的基础上,首先使用贝叶斯决策的方法挖掘出相关数据块集之间的相关性,然后利用这种相关性来指导数据预读和缓存调度,最终实现能够感知负载特征变化的自适应的IO性能优化方法。这种方法能够动态的感知IO负载的特征变化并且自动的调整IO性能的优化策略,是一种自适应的、智能的IO性能优化方法。
图1是本发明所述计算机系统的结构示意图,即本发明所述方法实现于如图1所示的计算机系统中,更加具体地说,本发明所述方法实现于如图1所示的操作系统内的外部存储设备驱动程序中。如图1所示,计算机系统的结构包括三层:应用程序层、操作系统层和硬件层。最上层的应用程序层由若干中应用程序构成,直接面向计算机用户提供服务,在图1中只是示意性的给出应用程序的例子,本发明的适用范围不受此限制;中间的操作系统层负责管理和维护底层硬件,并为上层应用程序提供运行环境,操作系统层包括很多复杂的组成部分,图1中只是示意性的给出和本发明有关的系统调用模块和外部存储设备驱动程序(外部存储设备驱动程序简称驱动程序),其他组成部分省略;底层的硬件层由多种计算机硬件电路和外部硬件设备构成,是计算机上层应用程序的发出的操作最终实现的层次,硬件层包括很多复杂的硬件组成部分,图1中只是示意性的给出和本发明有关的外部存储设备控制器和外部存储设备,其他组成部分省略。
图2是本发明所述计算机系统处理IO请求的一般流程的示意图。如图2所示,IO请求处理流程包括三个步骤:第一步,应用程序层的某个应用程序通过系统调用向外部存储设备驱动程序发出IO请求;第二步,IO请求到达驱动程序,驱动程序按照一定规则将到达的IO请求插入IO请求处理队列;第三步,驱动程序按照一定规则从IO请求处理队列中取出下一个处理的IO请求,根据该请求是读请求还是写请求以及其他相关信息,完成该IO请求所需的操作。
本发明所述方法在外部存储设备驱动程序中实现,在外部存储设备驱动程序运行时执行,图3,图4和图5将对本发明所述方法在外部存储设备驱动程序中的执行流程作详细描述。
图3是应用了本发明所述方法之前,外部存储设备驱动程序处理IO请求的流程示意图。如图3所示,第一步,外部存储设备驱动程序启动;第二步,外部存储设备驱动程序检查是否有IO请求需要处理,没有则继续检查,有则进入下一步;第三步,外部存储设备驱动程序取出一个IO请求进行处理,执行该请求所需的读操作或者写操作,执行完成后返回第二步。
图4是应用了本发明所述方法之后,外部存储设备驱动程序处理IO请求的流程示意图。如图4所示,第一步,外部存储设备驱动程序启动;第二步,外部存储设备驱动程序检查是否有IO请求需要处理,没有则继续检查,有则进入下一步;第三步,外部存储设备驱动程序取出一个IO请求进行处理,执行该请求所需的读操作或者写操作;第四步,外部存储设备驱动程序执行本发明所述的IO性能优化方法的相关步骤,执行完后返回第二步。
图5是本发明所述方法的流程示意图。如图5所示,本发明所述方法包括如下十个步骤:
第一步:在数据统计的时间间隔TD内,记录IO访问流中的IO访问地址,TD的取值与计算机系统的硬件条件有关,由外部存储设备驱动程序的研发人员和计算机系统的管理员来设定,将TD间隔内记录的所有IO访问地址按照时间先后顺序组成一个地址序列,称为IO地址序列,将IO地址序列中第j个IO访问地址记作A[j];
第二步:使用数据挖掘的方法,从第一步得到的IO访问序列中挖掘出出现次数超过常数阈值FT的频繁序列,并且这些频繁序列所跨越的时间长度要小于时间阈值GT,FT和GT的取值与计算机系统的硬件条件有关,由外部存储设备驱动程序的研发人员和计算机系统的管理员来设定;
第三步:找出第一步得到的IO地址序列中所有的没有被任何一个第二步得到的频繁序列包含的IO访问地址,将这些地址按照时间先后顺序看作一个只出现一次的频繁序列;
第四步:计算第二步和第三步得到的每一个频繁序列的出现概率,设第i个频繁序列是F[i],设第一步得到的IO地址序列中F[i]出现的次数与F[i]元素数的乘积为M[i],则F[i]的出现概率P(F[i])的计算公式如下,其中n为频繁序列的个数:
第五步:对所有第四步得到的频繁序列F[i]和第一步得到的IO访问地址A[j],计算在决策时间间隔JT内,F[i]出现的条件下,A[j]出现的概率P(A[j]|F[i]),JT的取值与计算机系统的硬件条件有关,由外部存储设备驱动程序的研发人员和计算机系统的管理员来设定,P(A[j]|F[i])等于第一步得到的IO地址序列中A[j]和F[i]在JT间隔内都出现的次数与IO地址序列中F[i]出现的次数的商;
第六步:对所有第四步得到的频繁序列F[i]和第一步得到的IO访问地址A[j],预测在第五步得到的决策间隔JT内,在IO访问地址A[j]出现的条件下,频繁序列F[i]出现的概率P(F[i]|A[j]),P(F[i]|A[j])的计算公式如下:
第七步:设i和k是两个互不相等的正整数,对所有第四步得到的频繁序列F[i]和F[k],预测在第五步得到的决策间隔JT内,在频繁序列F[i]出现的条件下,频繁序列F[k]出现的概率P(F[k]|F[i]),P(F[k]|F[i])的计算公式如下:
第八步:确定第一步得到的IO地址序列中按照时间顺序最后出现的N个频繁序列,将这N个频繁序列按照出现时间的先后顺序排列,记其中的第l个频繁序列为FL[l]对每一个FL[l]确定第七步得到的P(F[k]|FL[l])数值最大的M个频繁序列,一共确定了N*M个频繁序列,N和M的取值与计算机系统的硬件条件有关,由外部存储设备驱动程序的研发人员和计算机系统的管理员来设定;
第九步:确定第八步得到的N*M个频繁序列所包含的IO访问地址,将这些IO访问地址所对应的数据从外部存储设备预读到系统内存,如果系统内存短缺,则新预读数据按照最近一次被使用的数据将被保留的原则替换原有缓存数据;
第十步:将第一步得到的统计间隔TD向后推移,使得TD的终止时刻位于计算机系统时钟的当前时刻,在驱动程序处理完下一个IO请求后转到第一步。
本发明所述方法首先使用贝叶斯理论挖掘出IO访问流中频繁序列之间的相关性,然后利用这种相关性指导数据预读和缓存替换,最终达到优化IO性能的目的。这种方法能够动态的感知IO负载特征的变化,并且自适应的调整IO性能优化策略,是一种适应多种应用环境的通用的IO性能优化方法。
本发明所述方法的优点主要在于:
1.原理简单,易于实现。
2.纯软件实现,成本低廉。
3.只需要在外部存储设备驱动程序内部做改动,具有良好的可移植性和软硬件兼容性。
4.显著降低了应用程序IO请求的平均响应时间。
5.能够动态提取不断变化的IO负载特征。
6.能够根据IO负载特征的变化动态调整优化策略。
7.具有对计算机系统上层应用的自适应性和通用性。
8.具有对IO负载的自适应性和通用性。
附图说明
图1是本发明所述计算机系统的结构示意图。
图2是本发明所述计算机系统处理IO请求的一般流程的示意图。
图3是应用了本发明所述方法之前,外部存储设备驱动程序处理IO请求的流程示意图。
图4是应用了本发明所述方法之后,外部存储设备驱动程序处理IO请求的流程示意图。
图5是本发明所述方法的流程示意图。
图6是实施例计算机系统示意图。
图7是实施例计算机系统处理IO请求的流程示意图。
图8是应用了本发明所述方法之前,实施例计算机系统的SCSI磁盘阵列驱动程序处理IO请求的流程示意图。
图9是应用了本发明所述方法之后,实施例计算机系统的SCSI磁盘阵列驱动程序处理IO请求的流程示意图。
图10是实施例计算机系统中采用的本发明所述方法的流程示意图。
具体实施方式
本发明提出的一种自适应的外部存储设备IO性能优化方法是一种以减少计算机系统应用程序的IO请求平均响应时间为目的,在外部存储设备驱动程序内部实现的IO性能优化方法,换句话说,本发明所述方法通过在原有的外部存储设备驱动程序内部合适的位置插入本方法的实现步骤来实现,而不对任何原有部分进行改变。下面将对本发明所述方法的一个具体的实施例进行说明。
图6是实施例计算机系统示意图。如图6所示,整个计算机系统分为三层,最上层是应用程序层,包括一个oracle 9i的数据库管理系统和一个tomcat5.0Web服务器;中间层是操作系统层,由Windows2003 Server构成,Windows2003 Server内部包括和本发明相关的系统调用和外部存储设备驱动程序,其中,外部存储设备驱动程序是SCSI磁盘阵列驱动程序;最底层是硬件层,硬件层由众多计算机硬件部件构成,其中图6给出了和本发明相关的外部存储设备控制器和外部存储设备,其中,外部存储设备控制器是SCSI磁盘阵列控制器,外部存储设备是型号为14xSeagatel40G SCSI Disks的SCSI磁盘阵列。
图7是实施例计算机系统处理IO请求的流程示意图。如图7所示,IO请求处理流程包括三个步骤:第一步,应用程序层的oracle 9i数据库管理系统通过系统调用向SCSI磁盘阵列驱动程序发出IO请求;第二步,IO请求到达SCSI磁盘阵列驱动程序,驱动程序按照一定规则将到达的IO请求插入IO请求处理队列;第三步,SCSI磁盘阵列驱动程序按照一定规则从IO请求处理队列中取出下一个处理的IO请求,根据该请求是读请求还是写请求以及其他相关信息,完成该IO请求所需的操作。
图8是应用了本发明所述方法之前,实施例计算机系统的SCSI磁盘阵列驱动程序处理IO请求的流程示意图。如图8所示,第一步,SCSI磁盘阵列驱动程序启动;第二步,SCSI磁盘阵列驱动程序检查是否有IO请求需要处理,没有则继续检查,有则进入下一步;第三步,SCSI磁盘阵列驱动程序取出一个IO请求进行处理,执行该请求所需的读操作或者写操作,执行完成后返回第二步。
图9是应用了本发明所述方法之后,实施例计算机系统的SCSI磁盘阵列驱动程序处理IO请求的流程示意图。如图9所示,第一步,SCSI磁盘阵列驱动程序启动;第二步,SCSI磁盘阵列驱动程序检查是否有IO请求需要处理,没有则继续检查,有则进入下一步;第三步,SCSI磁盘阵列驱动程序取出一个IO请求进行处理,执行该请求所需的读操作或者写操作;第四步,SCSI磁盘阵列驱动程序执行本发明所述的IO性能优化方法的相关步骤,执行完后返回第二步。
图10是实施例计算机系统中采用的本发明所述方法的流程示意图。如图10所示,实施例计算机系统中采用的本发明所述方法包括如下十个步骤:
第一步:在TD=2小时的统计间隔内,记录IO访问流中的逻辑块地址,将所有逻辑块地址按照时间顺序组成一个地址序列,称为逻辑块地址序列,将逻辑块地址序列中第j个逻辑块地址记作A[j];
第二步:使用背景介绍中提到的已有的方法,从上一步得到的逻辑块地址序列中挖掘出出现频率超过FT=200的频繁序列,并且这些频繁序列所跨越的时间长度要小于GT=1秒;
第三步:找出逻辑块地址序列中所有的没有被任何一个频繁序列包含的逻辑块地址,将这些逻辑块地址按照时间顺序看作一个只出现一次的频繁序列;
第四步:计算每一个频繁序列的出现概率。设第i个频繁序列是F[i],设逻辑块地址序列中F[i]出现的次数与F[i]元素数的乘积为M[i],则P(F[i])的计算公式如下:
第五步:对所有的F[i]和A[j],计算在决策间隔JT=10秒内,频繁序列F[i]出现的条件下,A[j]出现的概率P(A[j]|F[i])。P(A[j]|F[i])等于逻辑块地址序列中A[j]和F[i]在JT间隔内都出现的次数与逻辑块地址序列中F[i]出现的次数的商;
第六步:对所有的F[i]和A[j],预测在决策间隔JT=10秒内,在逻辑块地址A[j]出现的条件下,频繁序列F[i]出现的概率P(F[i]|A[j]),P(F[i]|A[j])的计算公式如下:
第七步:对所有的F[i]和F[k],i不等于k,预测在决策间隔JT=10秒内,在频繁序列F[i]出现的条件下,频繁序列F[k]出现的概率P(F[k]|F[i]),P(F[k]|F[i])的计算公式如下:
第八步:确定逻辑块地址序列中最后出现的N=10个频繁序列,记为FL[l],l从1到N。通过查询、比较第六步所得结果,对每一个FL[l],确定P(F[k]|FL[l])最大的M=3个频繁序列F[k],一共确定了N*M=30个频繁序列F[k];
第九步:确定上一步得到的N*M=30个频繁序列所包含的逻辑块地址,将这些逻辑块地址所对应的数据从外部存储设备预读到系统内存,在本步骤中需要预读的并且提前已经存在于系统内存的数据保持原状不做预读,如果系统内存短缺,则新预读数据按照最近使用的数据将被保留的原则替换原有缓存数据;
第十步:将第一步得到的统计间隔TD向后推移,使得TD的终止时刻位于计算机系统时钟的当前时刻,在驱动程序处理完下一个IO请求后转到第一步。