存储设备中闪存任务调度方法、装置、存储介质及设备与流程

文档序号:31472092发布日期:2022-09-09 23:31阅读:70来源:国知局
存储设备中闪存任务调度方法、装置、存储介质及设备与流程

1.本发明涉及数据存储技术领域,尤其涉及一种存储设备中闪存任务调度方法、装置、存储介质及设备。


背景技术:

2.随着闪存技术不断发展,当前使用闪存作为存储介质的固态存储设备越来越被广泛地使用在各种领域,用户对固态存储设备的容量需求越来越大,性能需求越来越高,所以当前绝大部分大容量的固态存储设备都会在一个通道上连接多个闪存晶圆,同时一般固态存储设备也会通过增加通道数量来支持更大的容量和更高的性能,这样能够实现固态存储设备容量和性能的大幅提升。容量和性能提升的同时也带来了更多的挑战,因为一个通道,在某一时刻只能为一个闪存晶圆提供数据(除了用户数据本身,还包括命令,地址和状态信息等)传输服务,在这个通道上的多个闪存晶圆只能分时复用通道资源来完成数据传输,但是多个通道上的多个闪存晶圆同时并行工作,又可能会超出固态存储设备设定的功耗峰值,因此如何合理地调度闪存任务,充分利用多通道和多闪存晶圆等资源,在设定功耗范围内,为用户提供高带宽,低延时的存储服务是亟待解决的问题。
3.现有技术中提出了一种任务调度方法,是通过设置任务优先级来保证某写性能,例如:读任务优先级高于写任务,所以在执行写任务过程中任何时刻,只要收到读请求,就停止当前写任务,优先响应读请求。这种方法虽然可以有效降低读请求延时,但是这个方法需要闪存本身支持写任务随时可以被中断,然后还能支持读操作,而且该方法还可能会带来写任务迟迟得不到调度,导致固态存储设备中的各种资源被占用,无法释放,形成长时间死锁,反过来影响读请求的响应时间。
4.现有技术中还提出了另一种任务调度方法,通过使用不同的命令队列来分别存储读消息和写消息,以此避免读写消息在同一个队列中,读消息不能及时得到响应的状况。但是这一方式只能部分解决读请求被写请求阻挡住的问题,一旦当前正在执行写任务,就只能等待写任务完成,才能响应新到来的读请求。
5.可见,现有的任务调度方法仍然无法均衡、合理地实现闪存任务调度,且在任务调度过程中并未考虑到固态存储设备功耗的问题,无法为用户提供高带宽,低延时的存储服务。


技术实现要素:

6.鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的存储设备中闪存任务调度方法、装置、存储介质及设备。
7.本发明的一个方面,提供了一种存储设备中闪存任务调度方法,所述方法包括:对各个类型的闪存任务进行子任务拆分;为拆分出的各个子任务配置对应的功耗消耗值;在执行闪存任务调度时,获取当前可用的功耗阈值,并判断当前可用的功耗阈值
是否满足待执行子任务的功耗要求;若当前可用的功耗阈值满足待执行子任务的功耗要求则执行该子任务,否则按照预设的调度策略选择其他待执行子任务进行闪存任务调度。
8.进一步地,所述对各个类型的闪存任务进行子任务拆分包括:将闪存的读操作任务拆分为页加载子任务和至少一个读数据传输子任务;将闪存的写操作任务拆分为至少一个写数据传输子任务,以及编程子任务;将闪存的擦除操作任务拆分为命令传输子任务和数据清除子任务。
9.进一步地,所述将闪存的读操作任务拆分为页加载子任务和至少一个读数据传输子任务包括:预先配置多种可选的读数据传输长度,每一可选的读数据传输长度均符合闪存接口支持的数据传输单位;根据读操作任务请求数据长度从多种可选的读数据传输长度中选取第一目标数据传输长度,根据第一目标数据传输长度实现读数据传输子任务拆分。
10.进一步地,所述读数据传输子任务对应的数据传输长度的最大值根据闪存的页大小确定,所述读数据传输子任务对应的数据传输长度的最小值根据闪存接口支持的最小数据传输单位确定。
11.进一步地,所述读操作任务包括主机端读操作任务和后台端读操作任务;所述主机端读操作任务拆分成的读数据传输子任务对应的数据传输长度为第一数据传输长度,所述后台端读操作任务拆分成的读数据传输子任务对应的数据传输长度为第二数据传输长度,第一数据传输长度大于第二数据传输长度。
12.进一步地,所述将闪存的写操作任务拆分为至少一个写数据传输子任务包括:根据写数据带宽和延时要求确定写数据传输子任务的第二目标数据传输长度,根据第二目标数据传输长度实现写数据传输子任务拆分。
13.进一步地,所述根据写数据带宽和延时要求确定写数据传输子任务的第二目标数据传输长度包括:预先配置多种可选的写数据传输长度,每一可选的写数据传输长度均符合闪存接口支持的数据传输单位。
14.根据写数据带宽和延时要求从多种可选的写数据传输长度中选取第二目标数据传输长度。
15.进一步地,写操作任务包括主机端写操作任务和后台端写操作任务;所述主机端写操作任务拆分成的写数据传输子任务对应的数据传输长度为第三数据传输长度,所述后台端写操作任务拆分成的写数据传输子任务对应的数据传输长度为第四数据传输长度,第三数据传输长度大于第四数据传输长度。
16.进一步地,所述为拆分出的各个子任务配置对应的功耗消耗值包括:根据闪存颗粒执行各个子任务对应的功耗参数计算各个子任务的功耗消耗值。
17.进一步地,当待执行子任务为编程子任务或数据清除子任务时,所述判断当前可用的功耗阈值是否满足待执行子任务的功耗要求,包括:判断当前可用的功耗阈值是否大于所述编程子任务或数据清除子任务对应的功耗消耗值和页加载子任务对应的功耗消耗值之和;
若大于,则判断当前可用的功耗阈值满足待执行子任务的功耗要求。
18.进一步地,当待执行子任务为后台端的待执行子任务时,所述判断当前可用的功耗阈值是否满足待执行子任务的功耗要求,包括:判断当前可用的功耗阈值是否大于所述后台端的待执行子任务对应的功耗消耗值和页加载子任务对应的功耗消耗值之和;若大于,则判断当前可用的功耗阈值满足待执行子任务的功耗要求。
19.进一步地,所述方法还包括:在执行任一子任务时,从当前可用的功耗阈值中分配该子任务对应的功耗消耗值,并更新当前可用的功耗阈值;当该子任务执行完成之后,回收该子任务的功耗消耗值,增加到当前可用的功耗阈值中。
20.进一步地,所述按照预设的调度策略选择其他待执行子任务进行闪存任务调度包括:按照主机端的读操作任务优先,以及预设的读操作任务与写操作任务的调度比例,从其他待执行子任务中选择目标子任务进行调度。
21.本发明的另一方面,提供了一种存储设备中闪存任务调度装置,所述装置包括:任务拆分模块,用于对各个类型的闪存任务进行子任务拆分;配置模块,用于为拆分出的各个子任务配置对应的功耗消耗值;判断模块,用于在执行闪存任务调度时,获取当前可用的功耗阈值,并判断当前可用的功耗阈值是否满足待执行子任务的功耗要求;执行模块,用于在当前可用的功耗阈值满足待执行子任务的功耗要求时执行该子任务;调度模块,用于在当前可用的功耗阈值不满足待执行子任务的功耗要求时,按照预设的调度策略选择其他待执行子任务进行闪存任务调度。
22.本发明的第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上存储设备中闪存任务调度方法的步骤。
23.本发明的第四方面,还提供了一种固态存储设备,该设备包括存储控制器,所述存储控制器包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上存储设备中闪存任务调度方法的步骤。
24.本发明实施例提供的存储设备中闪存任务调度方法、装置、存储介质及设备,通过对类型的闪存任务进行不同粒度的子任务拆分,并且对每一个细粒度子任务赋予对应的功耗消耗值,若当前可用的功耗阈值满足当前选择调度的待执行子任务的功耗要求时则执行该子任务,若当前可用的功耗阈值不满足待执行子任务的功耗要求,则按照预设的调度策略选择其他待执行子任务进行闪存任务调度,进而能够有效提高闪存通道利用率,降低用户读写响应延时,并且能够很好的控制固态存储设备的峰值功耗,避免出现某些情况下,瞬时功耗峰值过大的情况。
25.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
26.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1为本发明实施例提供的存储设备中闪存任务调度方法的流程图;图2为本发明实施例提出的存储设备中闪存任务调度装置的结构框图。
具体实施方式
27.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
28.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
29.本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。
30.图1示意性示出了本发明一个实施例的存储设备中闪存任务调度方法的流程图。参照图1,本发明实施例的存储设备中闪存任务调度方法具体包括以下步骤:s11、对各个类型的闪存任务进行子任务拆分。
31.其中,各个类型的闪存任务包括主机端的读操作任务、写操作任务和擦除操作任务,以及固态存储设备后台端涉及到的读操作任务、写操作任务和擦除操作任务。通过对类型的闪存任务进行不同粒度的子任务拆分。对主机端闪存任务和后台端闪存任务采用不同粒度的任务拆分方式进行子任务拆分。
32.s12、为拆分出的各个子任务配置对应的功耗消耗值。具体的,对每一个细粒度子任务赋予合理的功耗消耗值。
33.s13、在执行闪存任务调度时,获取当前可用的功耗阈值,并判断当前可用的功耗阈值是否满足待执行子任务的功耗要求;其中,待执行子任务是按照预设的调度策略选择调度的子任务。具体的,闪存初始化时,初始化当前功耗阈值,按照闪存支持情况和用户对写请求延时的要求,合理拆分闪存任务,并对每个任务赋予合理的功耗消耗值,并设置总功耗阈值。并结合用户对主机写延时要求,设定调度策略,如:按照主机读请求优先,以及主机读写任务调度比例,选择合适的闪存任务进行调度,初始化预留功耗阈值p=0。
34.若当前可用的功耗阈值满足待执行子任务的功耗要求则执行步骤s14,否则执行步骤s15;s14、执行该子任务;s15、按照预设的调度策略选择其他待执行子任务进行闪存任务调度。
35.本发明实施例提供的存储设备中闪存任务调度方法,通过对类型的闪存任务进行不同粒度的子任务拆分,并且对每一个细粒度子任务赋予对应的功耗消耗值,若当前可用的功耗阈值满足当前选择调度的待执行子任务的功耗要求时则执行该子任务,若当前可用的功耗阈值不满足待执行子任务的功耗要求,则按照预设的调度策略选择其他待执行子任务进行闪存任务调度,进而能够有效提高闪存通道利用率,降低用户读写响应延时,并且能够很好的控制固态存储设备的峰值功耗,避免出现某些情况下,瞬时功耗峰值过大的情况。
36.本发明实施例中,步骤s11中的对各个类型的闪存任务进行子任务拆分具体包括以下附图中未示出的步骤s111~ s113:s111、将闪存的读操作任务拆分为页加载子任务和至少一个读数据传输子任务;s112、将闪存的写操作任务拆分为至少一个写数据传输子任务,以及编程子任务;s113、将闪存的擦除操作任务拆分为命令传输子任务和数据清除子任务。
37.本实施例中,将闪存的读操作任务拆分为页加载子任务和至少一个读数据传输子任务具体包括:预先配置多种可选的读数据传输长度,每一可选的读数据传输长度均符合闪存接口支持的数据传输单位;根据读操作任务请求数据长度从多种可选的读数据传输长度中选取第一目标数据传输长度,根据第一目标数据传输长度实现读数据传输子任务拆分。进一步地,所述读数据传输子任务对应的数据传输长度的最大值根据闪存的页大小确定,所述读数据传输子任务对应的数据传输长度的最小值根据闪存接口支持的最小数据传输单位确定。
38.由于读操作任务包括主机端读操作任务和后台端读操作任务,本实施例中,若主机端读操作任务拆分成的读数据传输子任务对应的数据传输长度为第一数据传输长度,后台端读操作任务拆分成的读数据传输子任务对应的数据传输长度为第二数据传输长度,则第一数据传输长度大于第二数据传输长度。
39.具体的,闪存的读操作任务一般分为两个阶段,第一阶段通常叫做页加载 (page load) 阶段,闪存在收到第一阶段任务(即页加载子任务)之后,闪存内部会进入数据准备状态,这个状态通常需要持续几十微秒的时间,只有当闪存完成数据准备之后,才能给闪存发生第二个阶段任务(即读数据传输子任务),通常第二阶段叫做读出数据(data out)阶段。
40.第一阶段page load操作需要传输的数据量很少(命令和地址只有几个字节),所以这个阶段占用的通道的时间很短,闪存本身收到page load任务之后,内部会进入相对较长时间的数据准备状态,这个时候通道是空闲的,可以用来传输其他晶圆上的任务。由于page load操作占用通道的时间很短,所以任务调度器在调度任务的时候,可以给当前能执行page load操作的晶圆优先调度page load任务,这样可以保证让尽可能多的晶圆并行地进入数据准备阶段,为后续执行第二阶段data out操作提前准备好数据。
41.第二阶段data out操作需要传输的数据量相对较多,占用通道时间较长。为此本发明将闪存的读操作任务拆分为页加载子任务和至少一个读数据传输子任务。当前主流的,不同接口类型的固态存储设备一般规定的主机读操作的最小单位是512 bytes~4k bytes,可以根据实际情况来确定data out任务需要传输的数据长度。
42.对于主机端读操作任务和后台端读操作任务,第一阶段的page load任务是一样的,区别在于第二阶段data out任务的数据传输长度不同,对于主机端读操作任务,为了快
速完成主机读请求,尽可能的保证data out任务的连续性,完成更多被请求的数据的传输,所以对于主机读请求来说,data out任务会根据主机读请求数据长度不同而需要设计多个不同长度的data out任务,一个data out任务最大的传输长度由闪存的页大小决定,比如当前多数闪存的页大小是16k bytes。对于后台的读请求,一个data out任务尽量完成少量数据传输(比如512bytes),这样能够在执行完一个后台data out之后,释放出通道,去执行新接收到的主机请求任务,这样就能最快的响应主机请求,降低了主机请求的延时。
43.本实施例中,将闪存的写操作任务拆分为至少一个写数据传输子任务具体包括:根据写数据带宽和延时要求确定写数据传输子任务的第二目标数据传输长度,根据第二目标数据传输长度实现写数据传输子任务拆分。进一步地,所述根据写数据带宽和延时要求确定写数据传输子任务的第二目标数据传输长度包括:预先配置多种可选的写数据传输长度,每一可选的写数据传输长度均符合闪存接口支持的数据传输单位;根据写数据带宽和延时要求从多种可选的写数据传输长度中选取第二目标数据传输长度。
44.进一步地,写操作任务包括主机端写操作任务和后台端写操作任务;所述主机端写操作任务拆分成的写数据传输子任务对应的数据传输长度为第三数据传输长度,所述后台端写操作任务拆分成的写数据传输子任务对应的数据传输长度为第四数据传输长度,第三数据传输长度大于第四数据传输长度。
45.具体的,闪存的写操作任务一般也分为两个阶段,第一阶段叫做数据输入(data in)阶段,第一阶段的任务(即写数据传输子任务)是闪存接收从通道上传输过来的数据,占用通道时间较长,当整页的所有数据(比如16kbytes)都传输完成之后,闪存进入第二个阶段编程(program)阶段,第二个阶段任务(即编程子任务)持续的时间一般较长,通常是几个毫秒,第二阶段不占用通道资源,仅仅是闪存处于内部编程阶段,不能接收新的读写请求。需要说明的是,目前主流闪存都支持一种高级命令,叫做program suspend操作,这个命令可以将闪存内部当前的program操作快速挂起,然后就可以响应读操作,完成读操作之后,通过program resume操作可以恢复之前被suspend的program操作,闪存内部就可以继续做program操作,闪存支持这个高级命令的目的也是为了优先响应读请求,降低读请求的延时,erase suspend和erase resume命令也是类似的,这是闪存本身提供的功能,可以跟本发明所述的任务调度方法结合使用,如果固态存储设备中使用的闪存不支持program和erase suspend的高级命令,本发明所述任务调度方法同样适用。
46.对于闪存写操作,因为只有第一阶段的任务(即写数据传输子任务)占用通道,所以对于主机写操作任务和后台写操作任务,都是对这一阶段的任务进行拆分,为此,本发明将闪存的读操作任务拆分为页加载子任务和至少一个读数据传输子任务。对于主机写操作,可以按照预先配置好的数据传输长度来拆分data in任务,对于后台写操作,尽可能按照较短的传输长度(比如512bytes)来拆分data in任务,这样在完成每一个后台data in的任务之后,如果有新接收到的主机读写请求,就可以优先处理主机读写请求。需要注意的是,对data in任务的拆分粒度还需要依赖于闪存本身的支持程度,当前大部分闪存并不能支持任意长度data in任务完成之后,切换去执行读操作,比如某厂商闪存支持完成n个4k bytes的data in任务之后,可以暂停写操作的数据传输,切换出去执行读操作,其中,n是整数,可以取值1、2、3、4
······
。对于这种情况,data in任务的拆分最小粒度选择4kbyte就比较合适,如果页大小是16kbytes,data in的任务就划分成4个子任务,每一个子
任务是调度的最小单位,每一个子任务占用通道的时长相对较短,这样就能保证及时响应主机任何时刻新发送下来的读写请求。
47.对于主机写操作的任务拆分,在满足所选闪存支持的情况下,需要结合具体用户需求来合理设定单个data in任务(即每一写数据传输子任务)的数据传输长度,如果用户对写带宽和延时要求较高,可以稍微放宽对读延时的要求,这种情况下,就可以将单个data in任务的传输长度设置的大一些,根据实际的传输速率,是可以计算出完成一个data in任务需要的时长,只要这个时长不超过用户对读请求延时的要求就可以尽量的把单个data in任务的传输长度设置的更大一些,这样能同时满足用户对读写请求的要求;如果用户对读延时要求很高,对写请求的延时和带宽可以稍微放宽要求,这种情况下,就需要将单个data in任务的传输长度设置的尽量小一些,如果有新的主机读请求到达,可以快速结束当前的data in的任务,释放出通道来快速响应主机读请求,满足用户对读请求延时的要求。为了适应不同的用户需求,固态存储设备可以事先准备好多种长度的data in的任务,通过提供配置接口给用户来控制使用哪种或者哪几种data in任务来完成用户的读写io请求,这样为不同的用户需求提供了很好的灵活性。
48.对于闪存来说,还有一个擦除(erase)操作,erase操作跟读写操作最大的区别就是erase操作不涉及到数据的传输,只有少量命令和地址的传输,所以erase命令不会占用通道资源很长时间,erase操作也可以分为两个阶段,为此,本发明将闪存的擦除操作任务拆分为命令传输子任务和数据清除子任务。第一个阶段是发生命令和地址(send cmd and addr)即对应命令传输子任务,这个阶段只占用极短的通道时间;第二个阶段是闪存收到erase命令和地址之后,内部进入较长时间的数据清除阶段即数据清除子任务,这个阶段完全不会占用通道时间,仅仅是闪存内部处于正在擦除数据的状态,通常这个状态持续时间会比较长,一般有几个毫秒,十几个毫秒甚至几十个毫秒的时间,这个时长是闪存本身的特性。不同闪存会有所差异,类似program操作的第二阶段,虽然这时候不占用通道资源,但是当闪存处于内部清除数据阶段的时候,是不能响应新的读写命令的,如果这时候有新的主机读操作命中了这个闪存,就需要等闪存的erase操作第二阶段完成,才能响应新的读命令。当然上文中提到的目前主流闪存都能够支持erase suspend和resume命令,能够有效地降低因为erase操作导致的读延时。
49.本发明实施例中,步骤s12中的为拆分出的各个子任务配置对应的功耗消耗值具体包括:根据闪存颗粒执行各个子任务对应的功耗参数计算各个子任务的功耗消耗值。
50.具体的,在完成闪存任务拆分之后,还需要对每个子任务分配一个合理的功耗消耗值。每个任务的功耗消耗值跟闪存本身有很大相关性,不同闪存颗粒的page load、data out、data in、program和erase子任务都会有不同的功耗参数,一般情况下,这些功耗参数都可以从对应的闪存产品手册中获取到,当然闪存产品手册中给出的一般是相关操作的电流值,可以根据这些电流值指标计算出相应的功耗。其中,给每一个任务分配一个合理的功耗消耗值,可以是相应任务的实际功耗值(单位可以是毫瓦ma),也可以是一个按照等比例(总的实际最大功耗对应一个总的最大功耗阈值)计算出来的一个整数值,对每个任务分配功耗消耗值的目的是保证固态存储设备在任何时刻的功耗峰值都不会超过设计的上限值。
51.最后,存储存储设备在执行闪存任务调度的时候,首先会获取当前可用的功耗阈值,只有当当前剩余的功耗阈值满足待执行的任务的功耗要求时,才允许执行该任务,否则
会按照调度策略重新选择其他晶圆上合适的任务务来执行。
52.本发明实施例中,当待执行子任务为编程子任务或数据清除子任务时,所述判断当前可用的功耗阈值是否满足待执行子任务的功耗要求,包括:判断当前可用的功耗阈值是否大于所述编程子任务或数据清除子任务对应的功耗消耗值和页加载子任务对应的功耗消耗值之和;若大于,则判断当前可用的功耗阈值满足待执行子任务的功耗要求。
53.本实施例中,针对闪存是否支持program/erase suspend和resume会有所差异,主要体现在对program和erase第二阶段任务的调度上是否需要提前限制,预留足够的功耗阈值给后面可能新收到的读请求使用。对于支持suspend的闪存来说,因为program/erase操作的第二阶段可以被随时挂起,挂起之后,其占用的功耗资源就释放了,一般情况下,program/erase第二阶段的功耗会大于读操作的功耗,这样就能保证在program/erase被suspend之后,一定有足够的功耗阈值可以用来给读操作使用,所以对于这种情况,在做program和erase第二阶段任务调度的时候,就不需要提前考虑预留更多的功耗阈值,只需要当前剩余功耗阈值能满足当前program/erase操作,就可以调度program/erase任务。
54.如果闪存不支持suspend的命令,因为考虑到program/erase第二阶段时间较长,一旦启动调度任务之后,在任务结束之前,其占用的功耗资源会一直保持,如果没有预留足够的功耗阈值给后续新接收到的读请求(即使这个读请求命中了一个当前空闲的闪存晶圆,空闲的通道资源),也会因为没有剩余功耗阈值可用,导致这个读请求不能被即使响应,所以对于这种情况,在对program/erase任务进行调度的时候,需要提前预留更多的功耗阈值(即页加载子任务对应的功耗消耗值)。具体的,需要预留的功耗阈值大小跟闪存执行program/erase第二阶段操作时间相关,完成第二阶段操作时间越长,需要预留的功耗阈值就需要越大(当然也需要结合读操作时长,预留的功耗阈值达到某个较大值就可以,继续增大的话,不会对降低主机读请求有帮助,反而会影响写操作的完成速度)。如果当前剩余功耗阈值不够多,就暂时停止对program/erase任务进行调度,等待系统中正在执行的其他任务完成之后,释放出更多的功耗资源,再进行program/erase任务的调度。
55.本发明实施例中,当待执行子任务为后台端的待执行子任务时,所述判断当前可用的功耗阈值是否满足待执行子任务的功耗要求,包括:判断当前可用的功耗阈值是否大于所述后台端的待执行子任务对应的功耗消耗值和页加载子任务对应的功耗消耗值之和;若大于,则判断当前可用的功耗阈值满足待执行子任务的功耗要求。
56.具体的,按照主机读请求优先,以及主机读写任务调度比例,选择合适的闪存任务进行调度,初始化预留功耗阈值p=0,当前选中待执行子任务调度时,判断是否需要预留功耗阈值,若需要预留功耗阈值则设置预留功耗阈值p为相应值,这个值跟当前任务类型相关,也跟闪存完成该任务时间长短相关,还与用户对读请求延时要求相关,进一步地,预留功耗阈值p的取值需要大于页加载子任务对应的功耗消耗值,即当前可用的功耗阈值-预留功耗阈值p》=选中的待执行任务的功耗消耗值。然后判断当前可用的功耗阈值是否满足预留功耗阈值的要求,若满足则将当前剩余功耗总阈值减去选中任务的功耗消耗值,执行任务,并在任务完成后回收任务的功耗消耗值,继续调度新的任务,若不满足,则暂停执行,重新选择其他任务。
57.进一步地,若不需要预留功耗阈值,则判断当前可用的功耗阈值是否大于或等于选中的待执行任务的功耗消耗值,若满足则将当前剩余功耗总阈值减去选中的待执行任务
的功耗消耗值,执行任务,并在任务完成后回收任务的功耗消耗值,继续调度新的任务,若不满足,则暂停执行,重新选择其他任务。
58.本实施例中,在没有主机操作的情况下,在对后台端的待执行子任务进行调度时,也需要预留一定的功耗阈值(即页加载子任务对应的功耗消耗值,或预设数量的写数据传输子任务对应的功耗消耗值),防止后续新接收到的主机读写请求时,因为没有足够的功耗阈值,导致延时响应。具体的,当前可用的功耗阈值大于所述后台端的待执行子任务对应的功耗消耗值和页加载子任务对应的功耗消耗值之和,或当前可用的功耗阈值大于所述后台端的待执行子任务对应的功耗消耗值和预设数量的写数据传输子任务对应的功耗消耗值之和时,当前可用的功耗阈值满足待执行子任务的功耗要求。
59.本发明能够在对写数据传输的任务调度的时候,提前预留一定功耗阈值,避免消耗掉剩余所有功耗阈值,这样能够保证预留一定阈值给后续读请求使用;对不支持suspend的闪存,在对写和擦的第二阶段任务调度时,提前预留功耗阈值,给后续新接收到的主机读请求使用; 在没有主机操作的情况下,在对后台任务进行调度时,提前预留一定的功耗阈值,为后续可能新接收到的主机读写请求做准备。
60.本发明实施例中,在执行任一子任务时,从当前可用的功耗阈值中分配该子任务对应的功耗消耗值,并更新当前可用的功耗阈值;当该子任务执行完成之后,回收该子任务的功耗消耗值,增加到当前可用的功耗阈值中。本发明对每个拆分之后的闪存任务赋予合理的功耗消耗值,对整个固态存储设备设置总功耗阈值,调度系统在选择合适的任务执行的同时,会从当前可用的功耗阈值中分配该任务对应的功耗消耗值,修改当前可用的功耗阈值;当任务执行完成之后,调度系统会回收该任务的功耗消耗值,增加到当前可用功耗阈值中。通过对每个任务功耗消耗的的动态分配和回收,在充分提供通道利用效率的基础上,确保了固态存储设备不会出现瞬间功耗峰值特别大的情况,降低了固态存储设备运行时的风险。
61.本发明实施例中,预设的调度策略包括主机端的读操作任务优先,以及预设的读操作任务与写操作任务的调度比例。进一步地,步骤s15中的按照预设的调度策略选择其他待执行子任务进行闪存任务调度具体包括:按照主机端的读操作任务优先,以及预设的读操作任务与写操作任务的调度比例,从其他待执行子任务中选择目标子任务进行调度。本发明实施例能够优先响应主机读请求,根据不同客户对读写请求的要求,设定读写任务调度比例,同时可以根据实际需求变动,动态调整读写请求调度比例。
62.具体的,在有主机读写请求时候,闪存任务调度系统会根据设定的读写任务调度比例来选择合适的任务进行调度,在对program data in进行任务调度的时候,需要提前预留适当的功耗阈值,data in任务传输数据越大,需要预留的功耗阈值就越大,同时读写任务比例越大,需要预留的功耗阈值也需要越大,这样就能保证在做program data in的同时,其他通道可以又足够的功耗阈值来响应新的读请求任务。
63.本发明实施例提供的存储设备中闪存任务调度方法具有以下有益效果:本发明在不增加闪存控制器设计复杂度的前提下,降低了闪存控制器成本和设计风险;大部分闪存颗粒能够完全或者部分支持本发明所述方法的要求,具有很好的通用性;
本发明提供动态灵活配置的方式解决了写请求可能出现长时间得不到响应的问题;本发明因为提供了更精细化的功耗控制方式,很好地解决了功耗峰值过高的问题;本发明对用户请求和后台操作采用不同的任务拆分方式和调度策略,有效降低了用户请求的响应延时;本发明在执行任务调度时候,提前把功耗因素考虑进来,在保证功耗峰值不超设计目标的情况下,有效降低用户请求的响应延时。
64.对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
65.图2示意性示出了本发明一个实施例的存储设备中闪存任务调度装置的结构示意图。参照图2,本发明实施例的存储设备中闪存任务调度装置具体包括任务拆分模块201、配置模块202、判断模块203、执行模块204以及调度模块205,其中:任务拆分模块201,用于对各个类型的闪存任务进行子任务拆分;配置模块202,用于为拆分出的各个子任务配置对应的功耗消耗值;判断模块203,用于在执行闪存任务调度时,获取当前可用的功耗阈值,并判断当前可用的功耗阈值是否满足待执行子任务的功耗要求;执行模块204,用于在当前可用的功耗阈值满足待执行子任务的功耗要求时执行该子任务;调度模块205,用于在当前可用的功耗阈值不满足待执行子任务的功耗要求时,按照预设的调度策略选择其他待执行子任务进行闪存任务调度。
66.本发明实施例中,所述装置还包括阈值更新模块,该阈值更新模块用于在执行任一子任务时,从当前可用的功耗阈值中分配该子任务对应的功耗消耗值,并更新当前可用的功耗阈值;当该子任务执行完成之后,回收该子任务的功耗消耗值,增加到当前可用的功耗阈值中。
67.对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
68.此外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述方法的步骤。
69.本实施例中,所述存储设备中闪存任务调度装置如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、
随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
70.此外,本发明实施例还提供了一种固态存储设备,该设备包括存储控制器,所述存储控制器包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述方法的步骤。例如图1所示的步骤s11~s15。
71.本发明实施例提供的存储设备中闪存任务调度方法、装置、存储介质及固态存储设备,通过对类型的闪存任务进行不同粒度的子任务拆分,并且对每一个细粒度子任务赋予对应的功耗消耗值,若当前可用的功耗阈值满足待执行子任务的功耗要求时则执行该子任务,若当前可用的功耗阈值不满足待执行子任务的功耗要求,则按照预设的调度策略选择其他待执行子任务进行闪存任务调度,进而能够有效提高闪存通道利用率,降低用户读写响应延时,并且能够很好的控制固态存储设备的峰值功耗,避免出现某些情况下,瞬时功耗峰值过大的情况。
72.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
73.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
74.此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
75.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1