本发明涉及数据存储技术领域,尤其涉及一种NAND闪存设备的操作指令调度方法及装置。
背景技术:
NAND闪存是一种比硬盘驱动器更好的存储方案,这在不超过4GB的低容量应用中表现得犹为明显。随着人们持续追求功耗更低、重量更轻和性能更佳的产品,NAND正被证明极具吸引力。目前NAND闪存技术广泛应用于固态硬盘等领域,与传统机械硬盘相比,固态硬盘在存取速度上有了大幅的提升。现在的NAND接口速度越来越快,由原来的异步模式变为现在的DDR(Double Data Rate,双倍速率同步动态随机存储器)模式,最新的NAND闪存颗粒已经能达到每秒667MB的速度。而与此同时,为了提高存储容量,NAND闪存的页尺寸变得越来越大,访问一页的时间反而增加了。因此,为了充分利用NAND接口的带宽,同时也是为了增加存储容量,一条NAND接口会连接多个NAND颗粒,这样就需要对NAND指令的顺序进行调度。调度策略一方面要保证正确性,保证操作NAND颗粒的指令序列符合要求,另一方面要尽可能充分利用NAND接口与NAND颗粒的性能。
现有的NAND闪存设备的操作指令调度方案大多是采用软件进行调度。主要有两方面原因:一方面是调度策略比较复杂,而且需求可能会变化,使用软件方案方便修改,有更高的灵活性;另一方面是原来NAND接口的性能要求并不高,软件有能力来满足性能要求。但是,随着当前大容量高速固态硬盘发展迅速,IOPS(Input/Output Operations Per Second,每秒进行读写I/O操作的次数)性能已经达到百万级,而且延迟也越来越低,因此,使用软件来实现NAND闪存设备的操作指令调度已经无法满足性能要求。
技术实现要素:
鉴于上述问题,本发明提出了一种NAND闪存设备的操作指令调度方法及装置,能够高效地实现NAND闪存设备的操作指令调度,提高NAND闪存设备的操作指令调度的灵活性,提升NAND闪存设备的总体性能。
本发明的一个方面,提供了一种NAND闪存设备的操作指令调度方法,包括:
对NAND闪存设备的操作指令进行任务分解,并将得到的任务发送到对应的任务队列;
根据所述任务队列中当前任务的任务类型将所述当前任务发送到对应的仲裁队列;
根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口。
可选地,所述对NAND闪存设备的操作指令进行任务分解,包括:
将所述操作指令对应的NAND颗粒在执行所述操作指令过程中由空闲状态更新为繁忙状态的时间点作为分界点,对所述操作指令进行任务分解;
其中,所述NAND颗粒对应有唯一的任务队列,以存放任务分解后得到的任务。
可选地,在所述对NAND闪存设备的操作指令进行任务分解之后,所述方法还包括:
为每一任务配置任务头信息,所述任务头信息中包含有任务类型标识;
所述根据所述任务队列中当前任务的任务类型将所述当前任务发送到对应的仲裁队列,包括:
根据所述当前任务的任务头信息中包含的任务类型标识确定所述当前任务的任务类型,并根据所述任务类型将所述当前任务发送到对应的仲裁队列。
可选地,所述任务类型包括非IO任务、写IO任务和读IO任务,所述写IO任务和读IO任务的优先级相同,所述非IO任务的优先级高于所述写IO任务和读IO任务;
所述方法还包括:
根据所述仲裁队列中存放的任务优先级确定仲裁队列的优先级。
可选地,所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口,包括:
判定非IO任务对应的非IO仲裁队列是否为非空;
若是,则从所述非IO仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口;
否则,根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口。
可选地,在所述根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务之前,所述方法还包括:
判定所述写IO仲裁队列和读IO仲裁队列中是否都存放有任务;
若是,则执行所述根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务的步骤,否则,直接从非空的仲裁队列中提取待执行任务。
可选地,所述任务头信息中还包含有读状态任务使能标识;
在所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,所述方法还包括:
在执行完所述待执行任务之后,判定所述待执行任务是否为读状态任务;
若是,则根据所述读状态任务的执行结果确定对应的NAND颗粒的使用状态,当所述使用状态为繁忙时,启动定时器,在预设定时时间后触发读状态任务,并将该读状态任务发送到对应的仲裁队列,当所述使用状态为空闲时,返回所述使用状态,以触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作;
否则,读取所述读状态任务使能标识,当所述读状态任务使能标识开启时,启动定时器,在预设定时时间后触发读状态任务,并将该读状态任务发送到对应的仲裁队列,当所述读状态任务使能标识关闭时,触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作。
可选地,所述任务头信息中还包含有接口独占许可标识;
在所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,所述方法还包括:
在执行完所述待执行任务之后,读取所述接口独占许可标识,当所述接口独占许可标识开启时,屏蔽当前的所述NAND颗粒之外的其他NAND颗粒对应的任务,否则解除对其他NAND颗粒对应的任务的屏蔽,和/或触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作。
可选地,所述任务头信息中还包含有任务标识ID;
在所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,所述方法还包括:
在执行完所述待执行任务之后,监测并返回任务执行结果,所述任务执行结果中携带有所述待执行任务的任务标识ID。
本发明的又一个方面,提供了一种NAND闪存设备的操作指令调度装置,包括:
任务生成模块,用于对NAND闪存设备的操作指令进行任务分解,并将得到的任务发送到对应的任务队列;
任务管理模块,用于根据所述任务队列中当前任务的任务类型将所述当前任务发送到对应的仲裁队列;
任务仲裁器,用于根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口。
可选地,所述任务生成模块,还用于在对NAND闪存设备的操作指令进行任务分解之后,为每一任务配置任务头信息,所述任务头信息中包含有任务类型标识;
所述任务管理模块,具体用于根据所述当前任务的任务头信息中包含的任务类型标识确定所述当前任务的任务类型,并根据所述任务类型将所述当前任务发送到对应的仲裁队列。
本发明实施例提供的NAND闪存设备的操作指令调度方法及装置,通过对NAND闪存设备的操作指令进行任务分解,将一条操作指令分解为多条任务,并将得到的任务发送到对应的任务队列,然后根据队列中当前任务的任务类型将任务发送到对应的仲裁队列,以供任务仲裁器根据仲裁队列的优先级为仲裁队列中的待执行任务调度NAND接口。本发明实施例能够高效地实现NAND闪存设备的操作指令调度,提高NAND闪存设备的操作指令调度的灵活性,提升NAND闪存设备的总体性能。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例中提出的块擦除操作指令的序列示意图;
图2为本发明实施例中提出的页编程操作指令的序列示意图;
图3为本发明实施例中提出的页读取操作指令的序列示意图;
图4为本发明实施例中提出的读状态操作指令的序列示意图;
图5为本发明实施例的一种NAND闪存设备的操作指令调度方法的流程图;
图6为本发明实施例的一种NAND闪存设备的操作指令调度方法中仲裁队列的实现原理图;
图7为本发明实施例的一种NAND闪存设备的操作指令调度方法的实现原理图;
图8为本发明实施例的一种NAND闪存设备的操作指令调度方法的具体实现流程;
图9为本发明另一实施例的一种NAND闪存设备的操作指令调度方法的具体实现流程;
图10为本发明实施例的一种NAND闪存设备的操作指令调度装置的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非被特定定义,否则不会用理想化或过于正式的含义来解释。
为了更好地理解本发明实施例的技术方案,首先对NAND闪存的操作指令进行简单的说明。
NAND闪存有四种基本操作指令:第一种是块擦除(block erase),它以块为单位,对整个块执行擦除操作,它在NAND接口上的操作序列如图1所示。参见图1,首先在NAND接口上发送60命令,然后3拍地址,再发D0命令,即可启动NAND颗粒执行擦除操作。执行该操作时NAND颗粒的状态变为繁忙(图中的SR[6]变为低),等待tBERS时间以后,才重新变为空闲。在状态为繁忙时,这个NAND颗粒不能接收其他读写命令,但可以接受读状态操作。
第二种是页编程(page program),它以页为单位,对整页进行编程操作,它在NAND接口上的操作序列如图2所示。参见图2,首先在NAND接口上发送80命令,然后5拍地址,再传送数据,一般是整页数据,现在NAND颗粒多为16KB,然后发10命令确认启动NAND颗粒执行编程操作。执行该操作时NAND颗粒的状态变为繁忙(图中的RDY变为低),等待tPROG时间以后,才重新变为空闲。在状态为繁忙时,这个NAND颗粒不能接收其他读写命令,但可以接受读状态操作。
第三种是页读(page read),它以页为单位,将页里的数据读出来,它在NAND接口上的操作序列如图3所示。参见图3,首先在NAND接口上发送00命令,然后5拍地址,再发30命令确认启动NAND颗粒执行读操作,NAND颗粒会将数据从内部的存储单元读取到它内部的缓存寄存器(cache register)中。执行该操作时NAND颗粒的状态变为繁忙(图中的RDY变为低),等待tR时间以后,才重新变为空闲。在状态为繁忙时,这个NAND颗粒不能接收其他读写命令,但可以接受读状态操作。当状态由繁忙变为空闲(图中的RDY由低变为高)时,才可以通过NAND接口来从缓存寄存器读取数据。
第四种是读状态操作,它用于查询NAND颗粒的状态。NAND颗粒处于繁忙的时间随操作的不同而不同。即使对于同一操作,不同的NAND颗粒,甚至同一NAND颗粒的不同状态也会影响繁忙时间的长短,因此一般使用读状态(read status)操作来查询NAND颗粒什么时候变为空闲。读状态操作有不同的形式,本发明实施例中以最简单的70命令为例进行说明,它在NAND接口上的操作序列如图4所示。参见图4,首先在NAND接口上发送70命令,稍等一小段时间tWHR,即可通过NAND接口读取一个字节的状态。
可理解的是,除了这4种基本操作指令以外,还有其他一些操作指令,比如reset操作,read id操作,set feature操作等等,但这些操作多是低频操作,或者执行时间比较短,对于实际应用来说,不会是性能的瓶颈。本发明实施例仅以NAND闪存设备的基本读写操作为例对本发明技术方案进行解释说明,但本发明并不局限于这些简单操作,对于NAND闪存设备的复杂操作序列,比如multi-plane操作,cache操作,interleaved die操作等等,均属于本发明的简单扩展,均可通过本发明实施例的技术方案实现。
从调度策略来说,有两种资源需要管理:一是NAND接口;二是NAND颗粒。下面从这两个资源的角度来看上述的4种基本操作指令。
块擦除的特点如下:1.占用NAND接口时间比较短,应该在微秒级。2.NAND颗粒执行擦除需要的时间比较长,最新的闪存颗粒可能需要10毫秒以上。
页编程特点如下:1.占用NAND接口时间比较长,因为整页数据需要一拍一拍地顺序流过NAND接口。2.NAND颗粒执行编程操作需要的时间比擦除要短一些,最新的闪存颗粒大概在1毫秒的量级。
页读特点如下:1.占用NAND接口时间由读取数据的数量决定。对于块设备来说,可能是512B或4KB的整数倍。一般来说,它占用NAND接口时间比块擦除时间长得多,但可能比页编程操作短。2.NAND颗粒执行读操作需要的时间相对较短,最新的闪存颗粒一般在100微秒以内。
读状态操作特点如下:1.占用NAND接口时间短,应该在微秒级。2.NAND颗粒执行时间很短。
由于NAND接口的带宽大于NAND颗粒的带宽,因此多个NAND颗粒共享同一个NAND接口,因此提出本发明NAND闪存设备的操作指令调度方法,以高效地实现NAND闪存设备的操作指令调度,提高NAND闪存设备的操作指令调度的灵活性,提升NAND闪存设备的总体性能。下面结合附图对对本申请实施例技术方案的主要实现原理、具体实施方式及其对应能够达到的有益效果进行详细的阐述。
图5示意性示出了本发明一个实施例的NAND闪存设备的操作指令调度方法的流程图。参照图5,本发明实施例的NAND闪存设备的操作指令调度方法具体包括以下步骤:
S11、对NAND闪存设备的操作指令进行任务分解,并将得到的任务发送到对应的任务队列。
本发明实施例中,NAND闪存设备的每一操作指令均对应有至少一个执行对象,即目标NAND颗粒,每一个NAND颗粒都维护有一个任务队列,任务生成模块对NAND闪存设备的操作指令进行任务分解之后,把针对这个NAND颗粒的任务发送到对应的任务队列。本发明实施例采用队列的方式实现分解后得到的任务的存放,可以有效地减少任务的延时。
S12、根据所述任务队列中当前任务的任务类型将所述当前任务发送到对应的仲裁队列。
本发明实施例中,所述任务类型包括非IO任务、写IO任务和读IO任务。具体的,任务分解后,得到不同任务类型的任务,然后可根据任务队列中当前任务的任务类型将所述当前任务发送到对应的仲裁队列。
S13、根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口。
本发明实施例提供的NAND闪存设备的操作指令调度方法,通过对NAND闪存设备的操作指令进行任务分解,将一条操作指令分解为多条任务,并将得到的任务发送到对应的任务队列,然后根据队列中当前任务的任务类型将任务发送到对应的仲裁队列,以供任务仲裁器根据仲裁队列的优先级为仲裁队列中的待执行任务调度NAND接口。本发明实施例能够高效地实现NAND闪存设备的操作指令调度,提高NAND闪存设备的操作指令调度的灵活性,提升NAND闪存设备的总体性能。
本发明实施例中,步骤S11中的对NAND闪存设备的操作指令进行任务分解,具体通过以下步骤实现:将所述操作指令对应的NAND颗粒在执行所述操作指令过程中由空闲状态更新为繁忙状态的时间点作为分界点,对所述操作指令进行任务分解;其中,所述NAND颗粒对应有唯一的任务队列,以存放任务分解后得到的任务。
本发明实施例中,为了确保操作NAND颗粒的指令序列符合要求,任务仲裁器在对NAND接口进行仲裁时需要遵循以下原则:
1.只有NAND颗粒处于空闲状态时,才能将NAND接口仲裁给该颗粒进行操作;
2.当NAND接口正被某个颗粒占用时,要等该颗粒至少完成当前任务才能将接口仲裁给其他颗粒;
3.尽可能让更多的NAND颗粒同时工作起来,这样才能充分利用NAND接口的带宽;
4.对于同一个NAND颗粒的访问,必须保证操作的前后顺序;
5.对于不同NAND颗粒的访问,不保证他们之间的操作顺序,如果对操作有顺序要求,由更上一层的机制来保证。
根据这些原则以及上述四种NAND基本操作的特点,本发明实施例中以NAND颗粒在执行操作指令过程中由空闲状态更新为繁忙状态的时间点作为分界点,将NAND的读写操作指令分解为多个任务,具体实现如下:
1.对于擦除操作,将它分解为2个任务。第1个任务是erase cmd任务,它是在NAND接口上发送60命令,然后3拍地址,再发D0命令,启动NAND颗粒进行擦除操作;第2个任务是read status任务,它实际上就是读状态操作,这个任务用来查询NAND颗粒的状态,直到NAND颗粒变得空闲,并将NAND返回的pass/fail状态返回给上层。
2.对于编程操作,将它分解为2个任务。第1个任务是写IO任务,它是在NAND接口上发送80命令,然后5拍地址,然后在NAND接口上传输整页数据,再发10命令,启动NAND颗粒进行编程操作;第2个任务是read status任务,这个任务用来查询NAND颗粒的状态,直到NAND颗粒变得空闲,并将NAND返回的pass/fail状态返回给上层。
3.对于页读操作,将它分解为3个任务。第1个任务是load任务,它是在NAND接口上发送00命令,然后5拍地址,再发30命令,启动NAND颗粒进行读取操作;第2个任务是read status任务,这个任务用来查询NAND颗粒的状态,直到NAND颗粒变得空闲;第3个任务是读IO任务,在NAND接口上传输读取回来的数据。
其中,erase cmd任务和load任务占用NAND接口的时间非常短,而且能够启动NAND颗粒开始工作,因此他们应该具有比较高的优先级来占用NAND接口。read status任务占用NAND接口时间也非常短,而且它早点返回状态有助于给这个NAND颗粒发下一个操作,因此它也具有比较高的优先级。本发明实施例将这3个任务称为非io任务。
在本发明实施例中,在所述对NAND闪存设备的操作指令进行任务分解之后,所述方法还包括:为每一任务配置任务头信息,所述任务头信息中包含有任务类型标识task type,具体可参见表1。
相应的,步骤S12中的根据所述任务队列中当前任务的任务类型将所述当前任务发送到对应的仲裁队列,包括:根据所述当前任务的任务头信息中包含的任务类型标识确定所述当前任务的任务类型,并根据所述任务类型将所述当前任务发送到对应的仲裁队列。
本发明实施例中,每个NAND颗粒都设置有任务管理模块,用于维护自己的状态机模块,状态机模块负责从任务队列中取出任务及相应的头信息,向NAND任务仲裁器提起申请占据NAND接口,得到仲裁以后,等待NAND接口控制器将任务完成。
颗粒状态机向NAND任务仲裁器提起申请时,会根据头信息中的任务类型将任务压入不同的仲裁队列。一共有3个仲裁队列,分别是非IO仲裁队列,写IO仲裁队列和读IO仲裁队列,如图6所示。参见图6,颗粒状态机会将软件发过来的erase cmd任务,load任务压入非IO队列,当timer到时以后,颗粒状态机会自动产生一个read status任务,将它也压入非IO队列。软件发过来的写IO任务会压入写IO队列,软件发过来的读IO任务会压入读IO队列。本发明实施例中,每个NAND颗粒有自己独立的状态机,它负责管理NAND颗粒的状态,并根据软件配置的timer值自动发起read status操作,不需要单独发起read status任务,高效地实现操作指令的调度,有效地提升了NAND闪存设备的总体性能。
进一步地,所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口,进一步包括以下步骤:
判定非IO任务对应的非IO仲裁队列是否为非空;
若非IO仲裁队列为非空,则从所述非IO仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口;
若非IO仲裁队列为空,则判定所述写IO仲裁队列和读IO仲裁队列中是否都存放有任务,若写IO仲裁队列和读IO仲裁队列中都存放有任务,则根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口;否则,直接从非空的仲裁队列中提取待执行任务。
本发明实施例中,任务类型包括非IO任务、写IO任务和读IO任务,所述写IO任务和读IO任务的优先级相同,所述非IO任务的优先级高于所述写IO任务和读IO任务。本发明实施例提供的NAND闪存设备的操作指令调度方法,还包括根据所述仲裁队列中存放的任务优先级确定仲裁队列的优先级的步骤。
需要说明的是,由于写IO任务和读IO任务都需要占据NAND接口较长的时间,因此处于较低的优先级。理论上来说,他们具有同样的重要性,但是为了增加灵活性,允许上层调节读写的比例,本发明实施例预先设置的任务执行策略配置他们占据NAND接口的权重。在一个具体示例中,可采用寄存器来配置他们占据NAND接口的权重。因为一般来说写IO传输的数据量是一整页,而读IO传输的数据可能是一页的一部分,因此可以配置寄存器来设置一次写IO任务以后允许传输几次读IO任务,如果没有读IO任务的话,则继续仲裁写IO任务。本发明实施例中,NAND闪存设备的任务仲裁器负责对NAND颗粒申请的任务发起仲裁,它的接口是3个仲裁队列。这3个队列中非IO仲裁队列优先级最高,写IO仲裁队列和读仲裁IO队列拥有同样的优先级,但可以通过寄存器配置他们占据NAND接口的权重。
图7为本发明实施例提供的NAND闪存设备的操作指令调度方法的实现原理图。参见图7,其中CPU接口主要是任务生成模块用来给任务管理模块发送NAND任务,以及接收任务仲裁器返回任务执行结果的状态的接口。任务生成模块可由软件实现,其发送的NAND任务一方面用于控制NAND接口控制器进行操作,另一方面还包含一个任务头信息,这个头信息主要是为了软件灵活地控制NAND任务仲裁器的调度策略。任务头信息的格式及含义如下表所示:
表1任务头信息的格式及含义
其中,任务生成模块负责将一个NAND读写操作分解为一个或多个任务。对于块擦除操作,软件发送erase cmd任务给硬件,附加的头信息中将task type设为非io任务,并将poll status enable置1,并相应地填好timer value(比如设置为15毫秒)。本实施例中,任务生成模块不用单独发送read status任务,这是因为read status任务是由任务管理模块自己发起的。任务生成模块只需在任务头信息中将poll status enable置1,并设置好timer,任务管理模块会在完成erase cmd任务之后自动启动timer,等待timer到时以后,会自动发起read status任务。对于页编程操作,任务生成模块发送写IO任务给任务管理模块。附加的头信息中将task type设为写IO任务,并将poll status enable置1,并相应地填好timer value(比如设置为1毫秒)。在实际应用中,当刚完成任务的任务头信息中poll status enable为1时,则该模块会根据timer value来启动一个timer,等timer到时以后,会自动产生一个read status任务,并向NAND任务仲裁器提出申请。对于页读操作,将操作分为2个软件任务,第一个任务是load任务,附加的头信息中将task type设为非io任务,并将poll status enable置1,并相应地填好timer value(比如设置为80微秒)。第二个任务是读IO任务,附加的头信息中将task type设为读IO任务,并将poll status enable置0,表示不需要硬件自动发起read status任务。
在本发明的一个可选实施例中,所述任务头信息中还包含有读状态任务使能标识poll status enable。相应的,在所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,所述方法还包括:在执行完所述待执行任务之后,判定所述待执行任务是否为读状态任务;若是,则根据所述读状态任务的执行结果确定对应的NAND颗粒的使用状态,当所述使用状态为繁忙时,启动定时器,在预设定时时间后触发读状态任务,并将该读状态任务发送到对应的仲裁队列,当所述使用状态为空闲时,返回所述使用状态,以触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作;否则,读取所述读状态任务使能标识,当所述读状态任务使能标识开启时,启动定时器,在预设定时时间后触发读状态任务,并将该读状态任务发送到对应的仲裁队列,当所述读状态任务使能标识关闭时,触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作。
下面通过一个具体实施例对本发明技术方案进行详细的解释说明。
参见图8,本发明实施例中,当NAND颗粒对应的任务队列为非空时,根提取任务队列中当前待执行任务的任务头信息,判定头信息中的任务类型,并根据任务类型,将待执行任务压入对应的仲裁队列,等待NAND任务仲裁器将NAND接口仲裁给待执行任务,等待任务在NAND接口执行完毕后,判定刚执行完毕的任务是否为读状态任务,若是读状态任务,则根据所述读状态任务的执行结果确定对应的NAND颗粒的使用状态,当所述使用状态为繁忙时,启动定时器timer,在预设定时时间timer后自动触发读状态任务,并将该读状态任务发送到对应的非IO仲裁队列,当所述使用状态为空闲时,返回所述使用状态,并触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作;若不是读状态任务,则读取所述读状态任务使能标识poll status enable,当所述读状态任务使能标识开启时,即当poll status enable为1时,启动定时器timer,在预设定时时间timer后触发读状态任务,并将该读状态任务发送到对应的非IO仲裁队列,当所述读状态任务使能标识关闭时,即当poll status enable为0时,触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作。
在本发明的一个可选实施例中,所述任务头信息中还包含有接口独占许可标识。
相应的。在所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,所述方法还包括:在执行完所述待执行任务之后,读取所述接口独占许可标识,当所述接口独占许可标识开启时,屏蔽当前的所述NAND颗粒之外的其他NAND颗粒对应的任务,否则解除对其他NAND颗粒对应的任务的屏蔽,和/或触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作。
本发明实施例中,任务头信息中包含有接口独占许可标识continue flag,continue flag的设置是为了增加调度的灵活性,比如对于multi-plane操作时,可能需要一个颗粒的任务尽量一起完成,保持原子性。将continue flag置1,可以保证只要这个颗粒被调度到,这些任务就可以尽快完成,其他的颗粒被屏蔽掉,不参与仲裁。
下面通过一个具体实施例对本发明技术方案进行详细的解释说明。
参见图9,本发明实施例中,当NAND颗粒的仲裁队列非空时,首先判定非IO仲裁队列是否为非空,若非IO仲裁队列非空,则从非IO仲裁队列仲裁中取出任务发送到NAND接口控制器执行,等待任务在NAND接口执行完毕后,读取任务头信息中的接口独占许可标识continue flag,当所述接口独占许可标识开启时,即continue flag置1时,屏蔽当前的所述NAND颗粒之外的其他NAND颗粒对应的任务,否则,如果别的NAND颗粒被屏蔽,则解除对其他NAND颗粒对应的任务的屏蔽,并触发将任务队列中的下一任务发送到对应的仲裁队列的操作,如果没有NAND颗粒被屏蔽,则直接触发将任务队列中的下一任务发送到对应的仲裁队列的操作。若非IO仲裁队列为空,则判定写IO仲裁队列和读IO仲裁队列中是否都存放有任务,若写IO仲裁队列和读IO仲裁队列中都存放有任务,则根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口;否则,直接从非空的仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口。
在本发明的一个可选实施例中,所述任务头信息中还包含有任务标识ID。
在所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,所述方法还包括:在执行完所述待执行任务之后,监测并返回任务执行结果,所述任务执行结果中携带有所述待执行任务的任务标识ID。
本发明实施例中,任务头信息中还包含有任务标识ID,即task no,任务标识ID是任务生成模块为任务分配的任务号,用于软件的管理。在执行完所述待执行任务之后,任务仲裁器监测并返回任务执行结果,会同时将任务标识ID返回。
综上所述,本发明实施例提供的NAND闪存设备的操作指令调度方法,将NAND读写操作以NAND变繁忙的时间点为分界线分解为多个任务,以任务为单位进行调度,由硬件设备任务管理模块根据任务生成模块配置的timer值自动发起read status任务。将不同的任务根据调度策略的需要划分为3种类型,其中非IO任务具有最高的优先级,而读写IO任务则根据软件配置他们占据NAND接口的权重进行调度。本发明实施例大大减少了软件的负载,高效地实现NAND闪存设备的操作指令的灵活调度。
可理解的是,本发明实施例对一个NAND接口上连接的NAND颗粒的数量进行具体限定,可根据实际应用需求进行设置。对于每个NAND颗粒,不限于只有一个timer,使用多个timer对本发明技术方案进行简单扩展,也属于本发明实施例技术方案的精神和范围。对于头信息中的continue flag,不限于只有一位,使用多位来代表不同的级别以实现对本发明的简单扩展,也属于本发明实施例技术方案的精神和范围。
对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
图10示意性示出了本发明一个实施例的NAND闪存设备的操作指令调度装置的结构框图。参照图10,本发明实施例的NAND闪存设备的操作指令调度装置具体包括任务生成模块201、任务管理模块202以及任务仲裁器203,其中:所述的任务生成模块201,用于对NAND闪存设备的操作指令进行任务分解,并将得到的任务发送到对应的任务队列;所述的任务管理模块202,用于根据所述任务队列中当前任务的任务类型将所述当前任务发送到对应的仲裁队列;所述的任务仲裁器203,用于根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口。
在本发明的一个可选实施例中,所述任务生成模块201,具体用于将所述操作指令对应的NAND颗粒在执行所述操作指令过程中由空闲状态更新为繁忙状态的时间点作为分界点,对所述操作指令进行任务分解;
其中,所述NAND颗粒对应有唯一的任务队列,以存放任务分解后得到的任务。
在本发明的一个可选实施例中,所述任务生成模块201,还用于在对NAND闪存设备的操作指令进行任务分解之后,为每一任务配置任务头信息,所述任务头信息中包含有任务类型标识;
所述任务管理模块202,具体用于根据所述当前任务的任务头信息中包含的任务类型标识确定所述当前任务的任务类型,并根据所述任务类型将所述当前任务发送到对应的仲裁队列。
在本发明的一个可选实施例中,所述任务类型包括非IO任务、写IO任务和读IO任务,所述写IO任务和读IO任务的优先级相同,所述非IO任务的优先级高于所述写IO任务和读IO任务;
所述的任务仲裁器203,还用于根据所述仲裁队列中存放的任务优先级确定仲裁队列的优先级。
进一步地,所述的任务仲裁器203,包括第一判断单元和仲裁单元,所述第一判断单元,用于判定非IO任务对应的非IO仲裁队列是否为非空;所述仲裁单元,用于当第一判断单元的判定结果为非IO仲裁队列为非空时,从所述非IO仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口,当第一判断单元的判定结果为非IO仲裁队列为空时,根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务,并为所述待执行任务调度NAND接口。
本发明实施例中,所述任务仲裁器203还包括:第二判断单元,用于当所述仲裁单元根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务之前,判定所述写IO仲裁队列和读IO仲裁队列中是否都存放有任务;
若是,则所述仲裁单元执行所述根据预先设置的任务执行策略从写IO任务对应的写IO仲裁队列或读IO任务对应的读IO仲裁队列中提取待执行任务的操作,否则,所述仲裁单元直接从非空的仲裁队列中提取待执行任务。
本发明实施例中,所述任务头信息中还包含有读状态任务使能标识。
相应的,所述任务管理模块202还包括第三判断单元和任务触发单元,其中:所述第三判断单元,用于在所述根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,且在执行完所述待执行任务之后,判定所述待执行任务是否为读状态任务;所述任务触发单元,用于当第三判断单元的判定结果为所述待执行任务为读状态任务时,根据所述读状态任务的执行结果确定对应的NAND颗粒的使用状态,当所述使用状态为繁忙时,启动定时器,在预设定时时间后触发读状态任务,并将该读状态任务发送到对应的仲裁队列,当所述使用状态为空闲时,返回所述使用状态,以触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作;
所述任务触发单元,还用于当第三判断单元的判定结果为所述待执行任务不是读状态任务时,读取所述读状态任务使能标识,当所述读状态任务使能标识开启时,启动定时器,在预设定时时间后触发读状态任务,并将该读状态任务发送到对应的仲裁队列,当所述读状态任务使能标识关闭时,触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作。
本发明实施例中,所述任务头信息中还包含有接口独占许可标识。
相应的,所述任务仲裁器203还包括独占控制单元,所述独占控制单元,用于在根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,且在执行完所述待执行任务之后,读取所述接口独占许可标识,当所述接口独占许可标识开启时,屏蔽当前的所述NAND颗粒之外的其他NAND颗粒对应的任务,否则解除对其他NAND颗粒对应的任务的屏蔽,和/或触发将所述任务队列中的下一任务发送到对应的仲裁队列的操作。
本发明实施例中,所述任务头信息中还包含有任务标识ID。
相应的,所述任务仲裁器203还包括执行结果监测单元,所述执行结果监测单元,用于在根据所述仲裁队列的优先级信息为所述仲裁队列中的待执行任务调度NAND接口之后,且在执行完所述待执行任务之后,监测并返回任务执行结果,所述任务执行结果中携带有所述待执行任务的任务标识ID。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例提供的NAND闪存设备的操作指令调度方法及装置,通过对NAND闪存设备的操作指令进行任务分解,将一条操作指令分解为多条任务,并将得到的任务发送到对应的任务队列,然后根据队列中当前任务的任务类型将任务发送到对应的仲裁队列,以供任务仲裁器根据仲裁队列的优先级为仲裁队列中的待执行任务调度NAND接口。本发明实施例以任务为单位进行调度,能够高效地实现NAND闪存设备的操作指令调度,提高NAND闪存设备的操作指令调度的灵活性,提升NAND闪存设备的总体性能。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。