一种固态盘系统中的读写优化调度方法与流程

文档序号:17387284发布日期:2019-04-13 00:15阅读:307来源:国知局
一种固态盘系统中的读写优化调度方法与流程

本发明属于计算机存储领域,更具体地,涉及一种固态盘系统中的读写优化调度方法。



背景技术:

基于NAND闪存(Flash)的固态盘(Solid State Disk,简称SSD)具有非易失性,低能耗,高性能等诸多优良的特性,因此被广泛应用于数据中心、云计算、在线事务交易等场景。与传统的机械硬盘相比,基于NAND闪存的固态盘不受限于机械部件的速度,因此可以提供更高的I/O性能,并有望能够缓解在许多重要的数据密集型应用中的I/O瓶颈。

目前,在采用NAND闪存的固态盘中,存在一些读写方面的问题:一旦写请求被下发到闪存介质,同一目标地址晶圆内位于其后的读请求必须等到耗时的写操作完成后才能开始执行,于是,读请求的延时急剧增加,造成读写之间不公平的资源利用率;与之相对的,如果一味的提高读请求的执行优先级,对于写请求来说也是不公平的,在一种极端情况下,由于读请求始终优先执行,写请求不断的被推后,最终造成写饥饿的现象,这同样是不可接受的;此外,读请求和写请求之间还可能存在相关性,贸然的改变读写顺序,则可能会造成读数据的过程中出现错误;与此同时,如果改变相同类型请求之间的相对顺序,则会造成相同类型请求之间不公平的现象。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种固态盘系统中的读写优化调度方法,其目的在于,通过动态调整读写请求的优先序列,有效提高固态盘系统的读性能,从而解决现有固态盘中存在的由于读操作速度远大于写操作速度导致的读请求被写请求阻塞,造成读延时较大、读性能差的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种固态盘系统中的读写优化调度方法,包括以下步骤:

(1)为请求设置写延时上限U,并创建空的预取队列用于存放接收到的来自上层文件系统的请求;

(2)判断是否需要处理预取队列中的请求,如果不需要则过程结束,如果需要则转入步骤(3);

(3)接收来自于上层文件系统的请求,将该请求顺序放入该预取队列中,并判断该请求是读请求还是写请求,如果是读请求则转入步骤(4),如果是写请求则返回步骤(2);

(4)获取执行该读请求所需时间tread及目标地址A;

(5)判断预取队列中该读请求的前面是否存在有请求,如果存在则转入步骤(6),否则返回步骤(2);

(6)判断预取队列中该读请求的前一个请求是读请求还是写请求,如果是写请求则转入步骤(7),如果是读请求则返回步骤(2);

(7)获取该写请求的相关信息,包括写请求的产生时间tgen、执行该写请求所需的时间twrite、需排队等待执行该写请求的时间tque、以及该写请求的目标地址B,并获取系统当前时间tsys;

(8)判断读请求和写请求是否具备相关性,并且twrite+tque+tsys-tgen+tread<=U是否成立,如果不具备相关性,且等式成立,则转入步骤(9),否则返回步骤(2);

(9)在预取队列中将读请求移动到写请求的前面,并返回步骤(5)。

优选地,步骤(8)中判断读请求和写请求是否具备相关性具体是判断二者的目标地址是否为固态盘SSD的同一个页。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

(1)本发明能够有效提高固态盘系统的读性能:由于采用了步骤(5)到步骤(9),读请求被适当的移动到写请求之前执行,从而减缓了由于读请求被写请求阻塞所造成的读延时急剧增加的现象,显著减小了系统读延时的均值和最大值,从而提高了系统的读性能。

(2)本发明能够保证写请求的正常执行:由于采用了步骤(4)到步骤(8),在调度过程中对最大写延时进行了限制,使写请求避免了因为不断被推后最终导致无法执行的现象;具体而言,一旦计算出写延时超过上限U,该写请求将获得较高的执行优先级,从而不能够被读请求推后,进而保证了写请求的正常执行。

(3)本发明能够避免调度过程中因读写相关性而造成的读数据错误:由于采用了步骤(8),读请求和写请求之间是否存在相关性成为了能否将读请求移动到写请求之前执行的判断条件之一,因此遵循了“若存在读写相关性,则先写后读”的原则,避免了读出来的数据为执行写操作之前的数据从而产生读数据错误的问题。

(4)本发明能够保证相同类型请求之间的公平性:由于采用了步骤(5)到步骤(6),读请求的前一个请求是否为写请求被作为能否将读请求向前移动的判断条件之一,从而保证了各读请求之间的执行公平性;此外,在调度的整体过程中,不对写请求进行移动,因此,各写请求之间的相对位置不发生改变,从而保证了各写请求之间的执行公平性。

附图说明

图1是本发明固态盘系统中的读写优化调度方法的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

本发明的整体思路在于,优先执行速度相对较快的读操作,推后执行速度相对较慢的写操作。所谓优先执行读操作,指的是在预取队列中,将位于写请求之后的读请求通过调度移动到该写请求之前,从而被优先于该写请求执行。读操作的优先执行,同时意味着写操作的推后执行。通过在预取队列中将读请求向前移动,达到提高读性能的目的,并且,本发明并不对调度范围之外的请求产生干扰。

本发明充分考虑到读请求和写请求之间的公平性,采取为写延时设置上限的机制。在进行读写调度的过程中,向前移动读请求之前,需要对被推后的写请求的延时进行计算,延时超过上限的写请求将获得较高的执行优先级,从而不能够被读请求推后。

本发明充分考虑读写相关性问题,所谓读写相关性,是指一个读请求和一个写请求的目标地址为同一个页。在预取队列中,如果一个读请求之前存在着与它具有相关性的写请求,那么需要遵循先写后读的原则,不能将读请求移动到该写请求之前,否则读出来的数据为执行写操作之前的数据,从而造成读数据错误。本发明中,通过在移动读请求之前判断读写相关性,避免了因此而产生的错误。

另外,本发明不破坏相同类型请求之间的执行公平性,即不改变两个读请求或两个写请求之间的相对位置关系。在预取队列内,将读请求向前移动的过程中,若遇到其余读请求则终止移动的过程,避免了两个读请求之间位置关系的改变。

如图1所示,本发明固态盘系统中的读写优化调度方法包括以下步骤:

(1)为请求设置写延时上限U,并创建空的预取队列用于存放接收到的来自上层文件系统的请求;具体而言,写延时上限的取值和预取队列的深度相关,预取队列越深,则写延时上限越大。

(2)判断是否需要处理预取队列中的请求,如果不需要则过程结束,如果需要则转入步骤(3);

(3)接收来自于上层文件系统的请求,将该请求顺序放入该预取队列中,并判断该请求是读请求还是写请求,如果是读请求则转入步骤(4),如果是写请求则返回步骤(2);

(4)获取执行该读请求所需时间tread及目标地址A;

(5)判断预取队列中该读请求的前面是否存在有请求,如果存在则转入步骤(6),否则返回步骤(2);

(6)判断预取队列中该读请求的前一个请求是读请求还是写请求,如果是写请求则转入步骤(7),如果是读请求则返回步骤(2);

(7)获取该写请求的相关信息,包括写请求的产生时间tgen、执行该写请求所需的时间twrite、需排队等待执行该写请求的时间tque、以及该写请求的目标地址B(即物理地址),并获取系统当前时间tsys;

(8)判断读请求和写请求是否具备相关性(即二者的目标地址为固态盘SSD的同一个页,A=B),并且twrite+tque+tsys-tgen+tread<=U是否成立,如果不具备相关性,且等式成立,则转入步骤(9),否则返回步骤(2);

(9)在预取队列中将读请求移动到写请求的前面,并返回步骤(5)。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1