一种自适应的外部存储设备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请求队列中有按照先到先处理的原则进行排队的10个IO请求,第1个请求的数据量是1GB,而后面9个请求的尺寸都小于1MB,此时第1个请求先处理,因为它的数据量大,所以响应时间会很长,而其余9个请求虽然已经从上层的应用系统发出并且进入处理队列,但是需要在队列中等待很长的时间才能得到处理,IO请求的响应时间等于请求等待时间和请求处理时间,虽然后续9个IO请求的请求处理时间由于数据量小而比较小,但是等待时间很长导致了响应时间很长。在这种情况下,所有的10个IO请求的响应时间都很长,带来的结果就是外部存储系统整体的IO响应速度慢,每个IO请求的平均响应时间长,IO性能低下。
第二点:目前的IO性能的优化方法缺乏通用性和自适应性。目前的IO性能优化的思路是在设备驱动层或存储设备硬件层为某一类应用系统量身定做一个固定的优化方法,这种固定的优化方法只适应于该应用系统的IO负载,如果上层应用系统改变了,那上层应用系统带来的IO负载的特征也就会改变,而原有的设备驱动层和存储设备硬件层不会改变,此时原有的优化方法就无法适应新的应用和新的IO负载。在这种情况下,原有的优化方法不仅不能发挥IO性能优化的作用,往往还会成为外部存储系统IO性能得以发挥的障碍,甚至严重的限制了计算机系统对外部存储设备的IO性能。例如,如果计算机系统上的原有应用系统是视频服务器,那么IO负载的主要特征是数据的顺序读,针对这个特征设备驱动采用了顺序预读策略,即按存储地址顺序递增提前读取外部存储设备上的数据以备后来使用,这个优化方法对于视频服务器而言是恰如其分,但是如果上层应用系统变为web服务器,其负载的主要特征是随机的小量读取,此时,没有发生变化的设备驱动中的顺序预读策略和这种负载特征不匹配,不能实现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请求所需的操作。至此,IO请求处理流程结束。
本发明提出了一种自适应的外部存储设备IO性能优化方法,这是实现于外部存储设备驱动程序内部的一种优化方法。本发明所述方法由外部存储设备驱动程序内部执行的两个优化策略构成,这两个优化策略是IO请求处理队列的优化排队策略和负载自适应预读策略。IO请求处理队列的优化排队策略适用于所有IO请求,每当外部存储设备驱动程序接收到一个IO请求后都会执行一次这个策略,因而可以表述为到达驱动程序的一个IO请求触发IO请求处理队列的优化排队策略的一次执行;负载自适应预读策略只适用于IO读请求,每当外部存储设备驱动程序处理一个IO读请求时,如果该IO请求的处理需要驱动程序向外部存储设备控制器发送若干条IO读命令来获取数据,则驱动程序在发送完最后一条IO读命令后会执行一次这个策略,因而可以表述为某一条IO读命令触发下一次负载自适应预读策略的一次执行。
图3是应用了本发明所述方法之前,外部存储设备驱动程序处理一个IO请求的流程示意图。如图3所示,第一步,IO请求到达驱动程序;第二步,驱动程序按照先入先出的原则将IO请求插到IO请求处理队列尾部;第三步,驱动程序取出IO请求处理队列排头的请求;第四步,驱动程序判断该请求是读请求还是写请求,如果是读请求转入第五步,否则转入第八步;第五步,驱动程序判断该读请求所需数据是否已经在驱动程序维护的数据缓存中,如果是转入第六步,否则转入第七步;第六步,驱动程序将所需数据从数据缓存返回给发出该IO读请求的应用程序;第七步,驱动程序向外部存储设备控制程序发送IO读命令,将所需数据读入数据缓存,再将所需数据从数据缓存返回给发出该IO读请求的应用程序;第八步,如果写请求是同步写请求,就将数据直接写入外部存储设备,如果是异步写请求,先将数据写入驱动程序维护的数据缓存中,等系统空闲时再写入外部存储设备。至此,应用了本发明所述方法之前,外部存储设备驱动程序处理一个IO请求的流程结束。
图4是应用了本发明所述方法后,外部存储设备驱动程序处理IO请求的示意图。如图4所示,第一步,IO请求到达驱动程序;第二步,驱动程序执行IO请求处理队列的优化排队策略;第三步,驱动程序取出优先级最高IO请求进行处理,如果优先级最高的IO请求有多个,任取其中一个;第四步,驱动程序判断该请求是读请求还是写请求,如果是读请求转入第五步,否则转入第八步;第五步,驱动程序判断该读请求所需数据是否已经在驱动程序维护的数据缓存中,如果是,转入第六步,否则转入第七步;第六步,驱动程序将所需数据从数据缓存返回给发出该IO读请求的应用程序;第七步,驱动程序向外部存储设备控制器发送若干个IO读命令将所需数据读入数据缓存,然后将这些数据从数据缓存返回给发出该IO读请求的应用程序,最后发送的一条IO读命令触发一次负载自适应预读策略的执行。至此应用了本发明所述方法后,外部存储设备驱动程序处理一次IO请求的流程结束。
本发明所述方法的IO请求处理队列的优化排队策略包含一个步骤,本发明所述方法的负载自适应预读策略包括四个步骤,所以本发明所述方法共有五个步骤。为了以下表述的方便,将IO请求处理队列的优化排队策略包含的一个步骤称为本发明所述方法的第一步,将负载自适应预读策略包括的四个步骤称为本发明所述方法的第二步到第五步。本发明所述方法的五个步骤是外部存储设备驱动程序在处理IO请求过程中采用的优化处理流程,是IO请求处理队列的优化排队策略和负载自适应预读策略的具体执行过程。
本发明所述方法的五个步骤,包括:
第一步:当IO处理队列的优化排队策略被触发时执行本步骤。依据基于时间分片的优先级策略为到达驱动程序的IO请求设定优先级,将设定优先级的IO请求插入到驱动程序的IO请求处理队列。至此,IO请求处理队列的优化排队策略执行完毕。
第二步:当负载自适应预读策略被触发时执行本步骤。使用IO访问地址增量统计方法获得IO访问地址增量的统计数据。转入第三步:
第三步:对IO访问地址增量的统计数据进行预处理,得到合理的IO访问地址增量的统计数据。转入第四步:
第四步:使用合理的IO访问地址增量的统计数据计算预读数据地址与当前IO访问地址之间的增量,最终得到预读数据的访问地址。转入第五步:
第五步:计算预读数据量的大小,并从上一步得到的预读数据的访问地址开始从外部存储设备读取预读数据量的大小的数据到数据缓存。至此,负载自适应预读策略的一次执行完毕。
所述的基于时间分片的优先级策略既要为了降低IO请求的平均响应时间,将实际处理时间较长的IO请求设置为较低的优先级,将实际处理时间较短的IO请求设置为较高的优先级,又要防止先到达的实际处理时间较长的IO请求被后到达实际处理时间较短的IO请求一味的推后处理,甚至到无限期延期的地步。针对以上要求,基于时间分片的优先级策略包括以下步骤:设定一个计数变量,记为C,计算机系统启动时C=0,每过一定的时间间隔TD,计数变量C增加1,时间间隔TD的大小随着不同的计算机系统的具体情况而不同,根据计算机系统的硬件条件来确定;预先约定IO请求的优先级使用实数来表示,数字越大代表的优先级别越高;从计算机系统启动开始,第i个到达驱动程序的IO请求的优先级记为P[i],数据量记为S[i]比特,将P[i]设置为(1/S[i])-C,也就是将P[i]设置为S[i]的倒数减去C得到的差。基于时间片的优先级策略使得在同一个时间间隔内到达驱动程序的IO请求,请求数据量大的优先级低,请求数据量小的优先级高;同时,在前一个时间间隔内到达驱动程序的IO请求的优先级高于在后一个时间间隔内到达驱动程序的任何IO请求的优先级,因而能够有效的满足本段开头提到的要求。
所述的IO请求由到达驱动程序并且已经设定优先级的IO请求构成,IO请求处理队列的形成和生长方法有两种:
第一种方法首先考虑IO请求的到达驱动程序的顺序,其次考虑IO请求的优先级。先到达驱动程序的IO请求排在队列前面,后到达该驱动程序的IO请求排在后面。同时到达驱动程序的IO请求,优先级高的排在队列前面,优先级低的排在后面。相同优先级并且同时到达驱动程序的IO请求,相对顺序任意。在这种情况下,驱动程序从IO请求处理队列中选择下一个处理的IO请求时,需要遍历整个队列找到优先级最高的IO请求。
第二种方法首先考虑IO请求的优先级,其次考虑IO请求到达驱动程序的顺序。先到达驱动程序的IO请求排在队列前面,后到达该驱动程序的IO请求排在后面。同时到达驱动程序的IO请求,优先级高的排在队列前面,优先级低的排在后面。相同优先级并且同时到达驱动程序的IO请求,相对顺序任意。在这种情况下,驱动程序从IO请求处理队列中选择下一个处理的IO请求时,只需要读取IO请求处理队列中排头的那个IO请求。
所述的IO访问地址增量统计方法用于:计算触发负载自适应预读策略的IO读命令中的访问地址的增量;将计算得到的IO访问地址增量以及相关有用信息记录下来以备负载自适应预读策略后续步骤使用;删除负载自适应预读策略后续步骤不需要的IO访问地址增量的纪录信息。IO访问地址增量统计方法具体包括一个预先规定和两个步骤:
预先规定:从计算机系统启动开始,第j次触发负载自适应预读策略的IO读命令的访问地址记为A[j],称A[j]为第j个访问地址。第j个访问地址和第j-1个访问地址之间的增量记为D[j],D[j]=A[j]-A[j-1],其中A[0]=0,D[j]称为第j个访问地址增量。第j个触发负载自适应预读策略的IO读命令的发送时间记为T[j],称为第j个IO时刻。
首先,当负载自适应预读策略被第j次触发时,记录第j个访问地址A[j]和第j个IO时刻T[j],计算并记录第j个访问地址增量D[j]。图5是A[j]、T[j]和D[j]的记录格式的示意图。如图5所示,每一个记录项由A[j]、T[j]、D[j]和下一个记录项的地址四部分构成,所有的记录项构成一个记录链表;
最后,设当前时间,即计算机系统时钟的时间,记为T,遍历整个记录链表,将T[j]<T-TD的记录项从记录链表中删除,因为在本发明所述方法中,T[j]<T-TD的记录项不再有用,为了节约内存使用量将无用的记录项删除。
所述的预处理是对记录链表中的数据进行的预先分析和处理。预处理包括如下三个步骤:
首先,设DL=max{D[j]}-min{D[j]},如果DL小于某一常数阈值DT,则不对记录链表做任何处理,常数阈值DT与计算机系统的硬件系统相关,根据硬件系统的具体情况来确定;
然后,如果DL大于常数阈值DT,计算记录链表中所有D[j]的标准差SD(标准差的计算在一般的概率统计教材中可以见到详细说明,在本发明中不做说明),如果标准差SD小于某一常数阈值ST,则不对记录链表做任何处理,常数阈值ST与计算机系统的硬件系统相关,根据硬件系统的具体情况来确定;
最后,如果标准差SD大于常数阈值ST,将记录链表中所有记录项的D[j]的均值记为ave{D[j]},标记记录链表中D[j]与ave{D[j]}之间的距离大于ST的记录项。如果所有的记录项都被标记,则去除T[j]距离当前时间最近的N个记录项的标记,常数阈值N与计算机系统的硬件系统相关,根据硬件系统的具体情况来确定。删除记录链表中被标记的记录项。
所述的合理的IO访问地址增量的统计数据就是经过上述预处理后,得到的记录链表的所有记录项数据。
所述预读数据地址是指将数据预先从外部存储设备读入驱动程序维护的数据缓存时,驱动程序向外部设备控制器的发送的IO读命令的IO访问地址,记为PA。
所述的当前IO访问地址是指触发负载自适应预读策略本次执行的IO读命令的访问地址,也是当前记录链表中,T[j]值最大的记录项的D[j]。
所述的预读数据地址与当前IO访问地址之间的增量简称为预读地址增量,等于当前记录链表中所有记录项的D[j]的均值ave{D[j]}。预读数据地址PA等于当前IO访问地址与预读地址增量的和。
所述的预读数据量是指从预读数据地址读取的数据量大小,记为PS。根据自适应的原则,预读数据量的大小随IO负载的变化动态的变化,同时依据IO负载的时间局部性、空间局部性和自相似性,预读数据量等于驱动程序最近处理的M个IO请求的请求数据量的均值的K倍与常数阈值MS的最小值,M、K和MS与计算机系统的硬件系统相关,根据硬件系统的具体情况来确定。预读数据量PS确定以后,驱动程序在系统较为空闲时执行预读动作,从预读数据地址PA开始,将数据量等于PS的数据从外部存储设备读入驱动程序维护的数据缓存。
本发明所述方法的优点主要在于:
1.原理简单,易于实现。
2.纯软件实现,成本低廉。
3.只需要在外部存储设备驱动程序内部做改动,具有良好的可移植性和软硬件兼容性。
4.显著降低了应用程序IO请求的平均响应时间。
5.能够动态提取不断变化的IO负载特征。
6.能够根据IO负载特征的变化动态调整优化策略。
7.具有对计算机系统上层应用的自适应性和通用性。
8.具有对IO负载的自适应性和通用性。
附图说明
图1是本发明所述计算机系统的结构示意图。
图2是本发明所述计算机系统处理IO请求的一般流程的示意图。
图3是应用了本专利所述方法之前,外部存储设备驱动程序处理一次IO请求的流程示意图。
图4是应用了本专利所述方法后,外部存储设备驱动程序处理IO请求的示意图。
图5是A[j]、T[j]和D[j]的记录格式的示意图。
图6是实施例计算机系统示意图。
图7是实施例计算机系统采用本发明所述方法后的IO请求处理流程的示意图;
图8是实施例计算机系统的SCSI磁盘阵列驱动程序采用本发明所述方法优化IO请求处理的流程示意图。
具体实施方式
本发明提出的一种自适应的外部存储设备IO性能优化方法是一种以减少计算机系统应用程序的IO请求平均响应时间为目的,在外部存储设备驱动程序内部实现的IO性能优化方法,换句话说,本发明所述方法通过在原有的外部存储设备驱动程序内部合适的位置插入本方法的实现步骤来实现,而不对任何原有部分进行改变。下面将对本发明所述方法的一个具体的实施例进行说明。
图6是实施例计算机系统示意图。如图6所示,整个计算机系统分为三层,最上层是应用程序层,包括一个oracle 9i的数据库管理系统和一个tomcat5.0 Web服务器;中间层是操作系统层,由Windows2003 Server构成,Windows2003 Server内部包括和本发明相关的系统调用和外部存储设备驱动程序,其中,外部存储设备驱动程序是SCSI磁盘阵列驱动程序;最底层是硬件层,硬件层由众多计算机硬件部件构成,其中图6给出了和本发明相关的外部存储设备控制器和外部存储设备,其中,外部存储设备控制器是SCSI磁盘阵列控制器,外部存储设备是型号为14xSeagate140GSCSI Disks的SCSI磁盘阵列。
图7是实施例计算机系统采用本发明所述方法后的IO请求处理流程示意图。如图7所示,IO请求处理流程包括三个步骤:第一步,应用程序层的Oracle9i数据库管理系统通过系统调用向SCSI磁盘阵列驱动程序发出IO请求;第二步,该IO请求到达SCSI磁盘阵列驱动程序,驱动程序采用IO请求处理队列的优化排队策略为该请求分配优先级,并将该请求插入IO请求处理队列;第三步,驱动程序按照IO请求处理队列的优化排队策略的原则从IO请求处理队列中取出下一个处理的IO请求,根据该请求是读请求还是写请求以及其他相关信息,完成该IO请求所需的操作,在该请求是读请求的情况下,如果该读请求所需的操作包括向SCSI磁盘阵列控制器发送IO读命令,则在最后一条IO读命令发送后触发一次负载自适应预读策略的执行。至此,IO请求处理流程结束。
实施例计算机系统的SCSI磁盘阵列驱动程序在应用了本发明所述方法之前,处理一次IO请求的流程示意图与图3一致。
实施例计算机系统的SCSI磁盘阵列驱动程序在应用了本发明所述方法之后,处理一次IO请求的流程示意图与图5一致。
图8是实施例计算机系统的SCSI磁盘阵列驱动程序采用本发明所述方法优化IO请求处理的流程示意图。图8也是实施例计算机系统的SCSI磁盘阵列驱动程序执行本发明所述方法的IO请求处理队列的优化排队策略和负载自适应预读策略的具体流程。如图8所示,SCSI磁盘阵列驱动程序优化IO请求处理的流程含有五个步骤,包括:
第一步:当IO处理队列的优化排队策略被触发时执行本步骤。从实施例计算机系统启动开始,设定一个计数变量,记为C,实施例计算机系统启动时C=0,每过一定的时间间隔TD=1秒,计数变量C增加1,时间间隔TD=1秒是根据实施例计算机系统具体情况确定,本领域技术人员熟悉时间间隔TD的确定;IO请求的优先级使用实数来表示,数字越大代表的优先级别越高;从计算机系统启动开始,第i个到达驱动程序的IO请求的优先级记为P[i],数据量记为S[i]比特,将P[i]设置为(1/S[i])-C,也就是将P[i]设置为S[i]的倒数减去C得到的差;然后将带有优先级P[i]的第i个IO请求插入IO请求处理队列,SCSI磁盘阵列驱动程序选择下一个处理的IO请求时,遍历整个处理队列,找出优先级最高的,如果优先级最高的有多个,则任意选择一个进行处理。实施例IO处理队列的优化排队策略的一次执行结束。
第二步:当负载自适应预读策略被触发时执行本步骤。记录本次触发负载自适应预读策略的IO读命令的逻辑块地址A[j](逻辑块地址是一种具体的IO访问地址,是本实施例的IO访问地址)和IO读命令的发送时间T[j],计算并记录逻辑块地址增量D[j],使用A[j]、T[j]、D[j]和上一个记录项的地址组成一个记录项,将这个纪录项插入记录链表。转入第三步:
第三步:对记录链表中的逻辑块地址增量的统计数据进行预处理,得到合理的逻辑块地址增量的统计数据,具体包括如下三步:
首先,使用用记录链表中的逻辑块地址数据,计算DL=max{D[j]}-min{D[j]},如果DL小于常数阈值DT=2000,则不对记录链表做任何处理。常数阈值DT=2000是根据实施例计算机系统具体情况确定,本领域技术人员熟悉常数阈值DT的确定;
然后,如果DL大于常数阈值DT=2000,计算记录链表中所有D[j]的标准差SD(标准差的计算在一般的概率统计教材中可以见到详细说明,在本发明中不做说明),如果标准差SD小于某一常数阈值ST=1500,则不对记录链表做任何处理。常数阈值ST=1500是根据实施例计算机系统具体情况确定,本领域技术人员熟悉常数阈值ST的确定;
最后,如果标准差SD大于常数阈值ST=1500,将记录链表中所有记录项的D[j]的均值记为ave{D[j]},标记记录链表中D[j]与ave{D[j]}之间的距离大于ST=1500的记录项。如果所有的记录项都被标记,则去除T[j]距离当前时间最近的N=10个记录项的标记。删除记录链表中被标记的记录项。常数N=10是根据实施例计算机系统具体情况确定,本领域技术人员熟悉常数N的确定。
转入第四步:
第四步:首先计算预读地址增量,预读地址增量等于当前记录链表中所有记录项的逻辑块地址D[j]的均值ave{D[j]}。然后计算预读数据地址PA,PA等于触发当前执行的负载自适应预读策略的IO读命令的逻辑块地址与预读地址增量的和。转入第五步:
第五步:计算预读数据量PS,PS等于驱动程序最近处理的M=3~5个IO请求的请求数据量的均值的K=2倍与常数阈值MS=16MB的最小值,M=3~5、K=2和MS=16MB是根据实施例计算机系统具体情况确定,本领域技术人员熟悉M、K和MS的确定。预读数据量PS确定以后,驱动程序在系统较为空闲时执行预读动作,从预读数据地址PA开始,将数据量等于PS的数据从外部存储设备读入驱动程序维护的数据缓存。实施例负载自适应预读策略的一次执行结束。
上述五个步骤是实施例计算机系统中的SCSI磁盘阵列驱动程序应用了本发明所述方法后,在处理IO请求时采用的优化策略的流程,其中第一步是IO处理队列的优化排队策略的具体执行过程,第二步到第五步是负载自适应预读策略的具体执行过程。