保障请求优先级的方法、装置及计算机设备与流程

文档序号:16246084发布日期:2018-12-11 23:35阅读:267来源:国知局
保障请求优先级的方法、装置及计算机设备与流程

本发明涉及固态硬盘,更具体地说是指保障请求优先级的方法、装置及计算机设备。

背景技术

当前主流固态硬盘(ssd)的控制器均采用多核(cpu)设计,核与核之间的通信可以采用先进先出(即fifo)机制,一个核负责生成请求往fifo中放,另一个核从fifo中取出请求处理,如图1所示。实际场景中,请求之间有优先级之分,为了能让优先级高的请求在时间上优先处理,现有技术中采用多fifo方法,如图2所示,cpu0将高优先级请求放在高优先级fifo中,低优先级请求放在低优先级fifo中,cpu1每次优先从高优先级fifo中取请求,这样就可以保证高优先级请求的优先执行。

现有的固件设计中,固件除了需要处理主机下发的io命令,还需要处理ssd内部的命令,而且设计中限制同时处理的内部请求最大为8个,它们和io命令混合在一起处理,内部请求的优先级高于io命令,ssd要求这些内部请求在很短的时间内完成,假设20毫秒,io命令一般比较长,假设为1秒。

现有的固件设计中,ftl(即闪存转换层)采用4kb映射单元,所以cpu0对每个命令按照4kb为单元切割成数个节点请求,然后将节点请求发给cpu1处理,如图3所述,现有技术中为了提升cpu间的通信效率,一次性尽可能的将一窜节点请求放入fifo中,cpu0处理三个命令,第一个命令为io命令切割成4个节点请求,第二个命令为内部请求切割成1个节点请求,第三个为io命令切割成3个节点请求,cpu0和cpu1的交互过程为:cpu0将第一个io命令的节点链表放入低优先级fifo,如图4所示;由于cpu0和cpu1是异步并行工作的,cpu1在空闲期一直在尝试先从高优先级fifo获取请求,如果空则尝试从低优先级fifo获取请求,一旦低优先级fifo填入了请求,cpu1就从低优先级fifo中取出第一窜节点请求进行处理;cpu0继续工作,由于internal命令的优先级要高,所以internal节点被放入高优先级fifo,第二个io命令的节点请求放入低优先级fifo,如图5所示;等到cpu1处理完第一个io命令的一窜节点后,继续优先从高优先级fifo取出请求处理,处理低优先级fifo中请求。

现有技术通过设置高优先级fifo,体现了cpu1对internal请求的优先响应,但是ssd对内部请求的完成时间要求很苛刻,而cpu1需要处理完手头的节点请求链表后才能从高优先级fifo取出内部请求,如果cpu1手头的节点请求链表很长,处理时间超过20毫秒,那么内部请求的处理依然会超时。

因此,有必要设计一种方法,实现避免内部请求的处理超时的现象发生。



技术实现要素:

本发明的目的在于克服现有技术的缺陷,提供保障请求优先级的方法、装置及计算机设备。

为实现上述目的,本发明采用以下技术方案:保障请求优先级的方法,包括有:

设置节点请求链表长度;

初始化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请求数量进行限定,该节点请求链表长度依据最差处理速度以及内部请求的超时阈值设定,当io请求链表的io请求数量等于节点请求链表长度,则将io请求链表放入低优先级先进先出列队中,从而达到在cpu1最低处理效率情况下,也能在内部请求超时前将内部请求从高优先级fifo中取出并处理完,实现避免内部请求的处理超时的现象发生。

下面结合附图和具体实施例对本发明作进一步描述。

附图说明

图1为现有技术的cpu间fifo通信机制的示意流程图;

图2为现有技术的高低优先级fifo的示意性框图;

图3为现有技术的按4kb切割命令的示意流程图;

图4为现有技术的cpu0提交请求链表至cpu1的示意流程图;

图5为现有技术的cpu1取出请求处理且cpu0继续提交请求的示意流程图;

图6为本发明具体实施例提供的保障请求优先级的方法的示意流程图;

图7为本发明具体实施例提供的保障请求优先级的方法的子步骤示意流程图;

图8为本发明具体实施例提供的保障请求优先级的方法的子步骤示意流程图;

图9为本发明具体实施例提供的保障请求优先级的方法的子步骤示意流程图;

图10为本发明具体实施例提供的切割节点请求的示意流程图;

图11为本发明具体实施例提供的限制fifo中节点链表长度的示意流程图;

图12为本发明具体实施例提供的保障请求优先级的装置的示意性框图;

图13为本发明具体实施例提供的长度设置单元的示意性框图;

图14为本发明具体实施例提供的io请求处理单元的示意性框图;

图15为本发明具体实施例提供的优先级处理单元的示意性框图;

图16为本发明具体实施例提供的一种计算机设备的示意性框图。

具体实施方式

为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

如图6~16所示的具体实施例,本实施例提供的保障请求优先级的方法、装置及计算机设备,可以运用于固态硬盘等固态存储介质内,实现避免内部请求的处理超时的现象发生。

请参阅图6,图6是本实施例提供的保障请求优先级的方法的示意流程图,如图6所示,保障请求优先级的方法,包括有步骤s101~s106。

s101、设置节点请求链表长度。

限制每次提交至低优先级fifo中节点请求链接的长度,即限制fifo中每个格子挂载的节点请求链表长度,以使得cpu1从低优先级fifo中取出的节点请求链表满足要求,避免出现内部请求的处理超时的现象发生。

在一实施例中,如图7所示,上述的s101可包括有步骤s1011~s1014。

s1011、获取芯片最差处理速度;

s1012、获取内部请求的超时阈值;

s1013、根据芯片最差处理速度以及超时阈值获取节点请求链表长度;

s1014、将先进先出列队中每个格子挂载的节点请求链表长度设置为节点请求链表长度。

请参阅图11,这个链表长度(l)的确定需要根据cpu1的最差处理速度以及内部请求的超时阈值决定,假设内部请求的超时阈值为20毫秒(to_th),每个内部请求切割成1个节点请求,固件设计限制内部请求的个数最大为8;cpu1可能会触发内部任务(如垃圾处理,磨损均衡等),这种情况下cpu1处理主机请求的效率最低,假设这种最差情况下cpu1处理一个主机节点请求需要耗费1毫秒(t_cpu1),那么必须满足(l+8)*(t_cpu1)<=to_th,代入数据得出l<=12,即链表长度最大为12,以有效保证高优先级请求能在预设时间内被ssd处理完毕。

s102、初始化io请求链表以及io请求的数量。

具体地,在本实施例中,上述的cpu0会在其内部初始化一个io请求链表以及计数器c,c记录挂在该链表上的io请求数,也就是初始化io请求的数量,保证每次进行io请求处理时,该io请求是一个新的io请求链表,且其数量从零开始计数。

s103、获取请求;

s104、判断请求是否为io请求;

s105、若是,则对io请求的数量进行处理,并根据数量与节点请求链表长度的关系,进行io请求链表处理;

对于io请求的处理时,会依据节点请求链表长来限定io请求的数量,确保io请求存储到低优先级先进先出列队中不会超过节点请求链表长,即使在cpu1最低处理效率情况下,也能在内部请求超时前将内部请求从高优先级fifo中取出并处理完。

在一实施例中,请参阅图8,上述的步骤s105可包括有s1051~s1053。

s1051、对io请求的数量加一,形成新数量;

s1052、判断新数量是否等于节点请求链表长度;

若否,则返回所述步骤s103;

s1053、若是,则将io请求链表放入低优先级先进先出列队中,并返回步骤s102。

对于io请求进行处理和计数,具体是先获取到的该io请求挂在io请求链表上,并将io请求链表上的io请求数量c=c+1,进一步判断c是否等于l,如果c=l,则将链表放入低优先级fifo;如果c<l,则获取请求,并对io请求挂载io请求链表上。

s106、若否,则对io请求以及内部请求进行优先级处理;

返回所述步骤s102。

当遇到请求为内部请求时,则先将之前获取的io请求(此时已挂在io请求链表上)进行存储处理,再针对内部请求进行存储处理,以对两个请求进行优先级分离处理。

在一实施例中,请参阅图9,上述的s106可包括有s1061~s1062。

s1061、将io请求链表放入低优先级先进先出列队中;

s1062、将内部请求放入高优先级先进先出列队中。

直接将io请求链表放入低优先级先进先出列队内,然后将该内部请求放入高优先级先进先出列队,则在处理请求时,会先进行高优先级先进先出列队内的内部请求处理,cpu0对放入fifo中的请求链表长度做了合理限制,解决了现有技术中cpu1对内部请求的超时处理问题。

在一实施例中,获取请求的步骤之前,还包括:

切割节点请求,形成节点池。

请参阅图10,cpu0切割了很多节点请求形成节点池,中间夹杂着一部分内部请求,获取请求时,具体是在节点池内获取该请求,对每个请求进行重新做io请求链表的存储,也就是按照节点请求链表长限定每个io请求链表的最多io请求个数,从而达到在cpu1最低处理效率情况下,也能在内部请求超时前将内部请求从高优先级fifo中取出并处理完。在固态硬盘固件设计中改进cpu间通信的方式,使得高优先级请求能在预设时间内被ssd处理完毕。

举个例子,上述的节点请求链表长为12个io请求,则每获取到一个io请求时,将该io请求挂载当前的io请求链表上,并对io请求链表匹配的计数器的数量进行加一处理,此后,对计数器的计数值进行判断,若获取io请求都是io请求(也就是中间未出现内部请求等高优先级处理请求时),计数值到达12个io请求时,将该io请求链表放置在低优先级先进先出列队中,并重新初始化io请求链表以及计数器的计数值;若获取到的请求不是io请求,即请求为内部请求时,则不管io请求链表所对应的计数器计数值是多少,都将io请求链表放置到低优先级先进先出列队中,将内部请求放置在高优先级先进先出列队中,以及时处理内部请求。

上述的保障请求优先级的方法,通过设定节点请求链表长度,对io请求链长的最大io请求数量进行限定,该节点请求链表长度依据最差处理速度以及内部请求的超时阈值设定,当io请求链表的io请求数量等于节点请求链表长度,则将io请求链表放入低优先级先进先出列队中,从而达到在cpu1最低处理效率情况下,也能在内部请求超时前将内部请求从高优先级fifo中取出并处理完,实现避免内部请求的处理超时的现象发生。

请参阅图12,图12是具体实施例提供的保障请求优先级的装置的示意性框图,如图12所示,保障请求优先级的装置,包括有:

长度设置单元1,用于设置节点请求链表长度;

初始化单元2,用于初始化io请求链表以及io请求的数量;

请求获取单元3,用于获取请求;

请求判断单元4,用于判断请求是否为io请求;

io请求处理单元5,用于若是,则对io请求的数量进行处理,并根据数量与节点请求链表长度的关系,进行io请求链表处理;

优先级处理单元6,用于若否,则对io请求以及内部请求进行优先级处理。

具体地,如图13所示,长度设置单元1包括有:

速度获取模块11,用于获取芯片最差处理速度;

阈值获取模块12,用于获取内部请求的超时阈值;

长度获取模块13,用于根据芯片最差处理速度以及超时阈值获取节点请求链表长度;

设置模块14,用于将先进先出列队中每个格子挂载的节点请求链表长度设置为节点请求链表长度。

在一实施例中,如图14所示,io请求处理单元5包括有:

数量处理模块51,用于对io请求的数量加一,形成新数量;

数量判断模块52,用于判断新数量是否等于节点请求链表长度;

链表处理模块53,用于若是,则将io请求链表放入低优先级先进先出列队中。

另外,如图15所示,优先级处理单元6包括有:

io请求放置模块61,用于将io请求链表放入低优先级先进先出列队中;

内部请求放置模块62,用于将内部请求放入高优先级先进先出列队中。

在一实施例中,上述的装置还包括请求切割单元,用于切割节点请求,形成节点池。

上述的保障请求优先级的装置,通过设定节点请求链表长度,对io请求链长的最大io请求数量进行限定,该节点请求链表长度依据最差处理速度以及内部请求的超时阈值设定,当io请求链表的io请求数量等于节点请求链表长度,则将io请求链表放入低优先级先进先出列队中,从而达到在cpu1最低处理效率情况下,也能在内部请求超时前将内部请求从高优先级fifo中取出并处理完,实现避免内部请求的处理超时的现象发生。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的保障请求优先级的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

上述保障请求优先级的装置可以实现为一种计算机程序的形式,计算机程序可以在如图16所示的计算机设备上运行。

请参阅图16,图16是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备700设备可以是终端或服务器。

参照图16,该计算机设备700包括通过系统总线710连接的处理器720、存储器和网络接口750,其中,存储器可以包括非易失性存储介质730和内存储器740。

该非易失性存储介质730可存储操作系统731和计算机程序732。该计算机程序732被执行时,可使得处理器720执行任意一种保障请求优先级的方法。

该处理器720用于提供计算和控制能力,支撑整个计算机设备700的运行。

该内存储器740为非易失性存储介质730中的计算机程序732的运行提供环境,该计算机程序732被处理器720执行时,可使得处理器720执行任意一种保障请求优先级的方法。

该网络接口750用于进行网络通信,如发送分配的任务等。本领域技术人员可以理解,图16中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备700的限定,具体的计算机设备700可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。其中,所述处理器720用于运行存储在存储器中的程序代码,以实现以下步骤:

设置节点请求链表长度;

初始化io请求链表以及io请求的数量;

获取请求;

判断请求是否为io请求;

若是,则对io请求的数量进行处理,并根据数量与节点请求链表长度的关系,进行io请求链表处理;

若否,则对io请求以及内部请求进行优先级处理;

返回所述初始化io请求链表以及io请求的数量的步骤。

在一实施例中,所述处理器720用于运行存储在存储器中的程序代码以实现所述设置节点请求链表长度的步骤,具体实现了以下步骤:

获取芯片最差处理速度;

获取内部请求的超时阈值;

根据芯片最差处理速度以及超时阈值获取节点请求链表长度;

将先进先出列队中每个格子挂载的节点请求链表长度设置为节点请求链表长度。

在一实施例中,所述处理器720用于运行存储在存储器中的程序代码以实现所述对io请求的数量进行处理,并根据数量与节点请求链表长度的关系,进行io请求链表处理的步骤,具体实现以下步骤:

对io请求的数量加一,形成新数量;

判断新数量是否等于节点请求链表长度;

若否,则返回所述获取请求的步骤;

若是,则将io请求链表放入低优先级先进先出列队中,并返回所述初始化io请求链表以及io请求的数量的步骤。

在一实施例中,所述处理器720用于运行存储在存储器中的程序代码以实现所述对io请求以及内部请求进行优先级处理的步骤,具体实现以下步骤:

将io请求链表放入低优先级先进先出列队中;

将内部请求放入高优先级先进先出列队中。

在一实施例中,所述处理器720用于运行存储在存储器中的程序代码以实现所述获取请求的步骤之前,还实现了以下步骤:

切割节点请求,形成节点池。

上述的一种计算机设备,通过设定节点请求链表长度,对io请求链长的最大io请求数量进行限定,该节点请求链表长度依据最差处理速度以及内部请求的超时阈值设定,当io请求链表的io请求数量等于节点请求链表长度,则将io请求链表放入低优先级先进先出列队中,从而达到在cpu1最低处理效率情况下,也能在内部请求超时前将内部请求从高优先级fifo中取出并处理完,实现避免内部请求的处理超时的现象发生。

应当理解,在本申请实施例中,处理器720可以是中央处理单元(centralprocessingunit,cpu),该处理器720还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

本领域技术人员可以理解,图16中示出的计算机设备700结构并不构成对计算机设备700的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本领域普通技术人员可以理解的是实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。如本发明实施例中,该计算机程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各保障请求优先级的方法的实施例的流程步骤。

该计算机可读存储介质可以是磁碟、光盘、u盘、移动硬盘、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的几个实施例中,应该理解到,所揭露的保障请求优先级的装置和方法,可以通过其它的方式实现。例如,以上所描述的保障请求优先级的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本申请实施例装置中的单元可以根据实际需要进行合并、划分和删减。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。

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