NVM接口命令的优化执行方法与装置与流程

文档序号:22427814发布日期:2020-10-02 10:04阅读:265来源:国知局
NVM接口命令的优化执行方法与装置与流程

本申请涉及存储设备技术领域,尤其涉及nvm接口命令的优化执行方法与装置。



背景技术:

参看图1,展示了存储设备的框图。存储设备102同主机相耦合,用于为主机提供存储能力。主机同存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如sata、ide、usb、pcie、nvme(nvmexpress)、sas、以太网、光纤通道、无线通信网络等连接主机与存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个nvm(非易失存储器,non-volatilememory)芯片105以及可选地固件存储器110。接口103可适配于通过例如sata、ide、usb、pcie、nvme、sas、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、nvm芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制部件104。控制部件104可以是fpga(field-programmablegatearray,现场可编程门阵列)、asic(applicationspecificintegratedcircuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器。控制部件104在运行时从固件存储器110加载固件。固件存储器110可以是nor闪存、rom、eeprom,也可以是nvm芯片105的部分。

控制部件104包括闪存接口控制器(或称为介质接口控制器、闪存通道控制器),闪存接口控制器耦合到nvm芯片105,并以遵循nvm芯片105的接口协议的方式向nvm芯片105发出命令,以操作nvm芯片105,并接收从nvm芯片105输出的命令执行结果。已知的nvm芯片接口协议包括“toggle”、“onfi”等。

存储器目标(target)是nand闪存封装内的共享芯片使能(ce,chipenable)信号的一个或多个逻辑单元(logicunit)。每个逻辑单元具有逻辑单元号(lun,logicunitnumber)。nand闪存封装内可包括一个或多个管芯(die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(plane)。逻辑单元内的多个平面可以并行存取,而nand闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在可从http://www.micron.com/~/media/documents/products/other%20documents/onfi3_0gold.ashx获得的“opennandflashinterfacespecification(revision3.0)”中,提供了关于目标(target)、逻辑单元、lun、平面(plane)的含义,其为现有技术的一部分。

存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。

在公开号为cn1414468a的中国专利申请中,提供了通过执行微指令序列来处理cpu(centralprocessingunit,中央处理单元)指令的方案。当cpu要处理特定指令时,转换逻辑电路将特定指令转换成与之对应的微指令序列,通过执行微指令序列来实现特定指令的功能。微指令序列或者微指令序列的模板存储在rom(readonlymemory,只读存储器)中。在将特定指令转换成微指令序列过程中,可对微指令序列模板进行填充,使之与特定指令相对应。

在中国专利申请cn201610009789.6与cn201510253428.1中提供了用于闪存接口控制器的微指令执行方法与装置,中国专利申请cn201610861793.5提供了微指令序列的调度方法与装置,中国专利申请cn201611213754.0提供了io命令处理方法与固态存储设备,中国专利申请cn201611213755.5提供了大容量nvm接口控制器,将其全文合并于此。闪存接口控制器通常耦合到多个nvm芯片,nvm芯片包括多个lun(logicunit,逻辑单元)或管芯,多个lun和管芯可以并行响应及访问nvm命令。又由于每个lun或管芯上可以有多个待处理的nvm命令,因此nvm控制器需要对多个nvm命令的处理过程进行调度,以维护多个在处理中或待处理的nvm命令,或者维护多段用于生成和处理nvm命令的微指令序列的执行。



技术实现要素:

根据本申请的第一方面,提供了根据本申请第一方面的第一介质接口控制器,包括:消息队列和nvm命令处理单元,消息队列与nvm命令处理单元耦合,nvm命令处理单元还与多个nvm芯片耦合;消息队列用于接收访问nvm芯片的消息,nvm命令处理单元从消息队列获取信息,并根据消息的指示生成nvm接口命令并发送给nvm芯片;nvm命令处理单元改变发送nvm接口命令的顺序。

根据本申请的第一方面的第一介质接口控制器,提供了根据本申请第一方面的第二介质接口控制器,访问nvm芯片的消息包括指示读出数据的消息、写入数据的消息、擦除nvm芯片的存储单元的消息,指示读取nvm芯片状态的消息、读取或设置nvm芯片特征的消息,以及用户自定义消息中的一种或多种。

根据本申请的第一方面的第一或第二介质接口控制器,提供了根据本申请第一方面的第三介质接口控制器,消息队列包括一个或多个消息队列。

根据本申请的第一方面的第一至第三介质接口控制器之一,提供了根据本申请第一方面的第四介质接口控制器,nvm命令处理单元通过多个通道与多个nvm芯片耦合连接,每个nvm芯片分别包括多个逻辑单元。

根据本申请的第一方面的第一至第四介质接口控制器之一,提供了根据本申请第一方面的第五介质接口控制器,nvm命令处理单元包括多个硬件实例或多个线程,各个实例或线程,并行处理nvm接口命令。

根据本申请的第一方面的第一至第五介质接口控制器之一,提供了根据本申请第一方面的第六介质接口控制器,nvm命令处理单元,通过执行指令或微指令序列,对nvm接口命令实施调度。

根据本申请的第一方面的第一至第六介质接口控制器之一,提供了根据本申请第一方面的第七介质接口控制器,基于同一指令或微指令序列创建多个线程。

根据本申请的第一方面的第七介质接口控制器,提供了根据本申请第一方面的第八介质接口控制器,nvm命令处理单元为每个线程存储执行状态。

根据本申请的第一方面的第一至第八介质接口控制器之一,提供了根据本申请第一方面的第九介质接口控制器,nvm芯片处理单元向nvm芯片写入数据时,数据被存储在nvm芯片的页缓存中。

根据本申请的第一方面的第一至第九介质接口控制器之一,提供了根据本申请第一方面的第十介质接口控制器,nvm命令处理单元执行本申请第二方面的优化nvm接口命令执行顺序的方法之一。

根据本申请的第一方面的第一至第十介质接口控制器之一,提供了根据本申请第一方面的第十一介质接口控制器,nvm命令处理单元合并两个或多个nvm接口命令。

根据本申请的第二方面,提供了根据本申请第二方面的第一优化nvm接口命令执行顺序的方法,包括:检测是否可优化nvm接口命令执行顺序;响应于可优化nvm接口命令执行顺序,识别读指针的偏移值是否大于0;响应于偏移值大于0,使偏移值递增;以及根据基地址与偏移值的和得到读指针,并根据读指针获取nvm接口命令并处理。

根据本申请的第二方面的第一优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第二优化nvm接口命令执行顺序的方法,偏移值大于0时,其值指示了之前已发生的改变nvm接口命令执行顺序的次数。

根据本申请的第二方面的第一或第二优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第三优化nvm接口命令执行顺序的方法,响应于可优化nvm接口命令执行顺序,对获取的nvm接口命令改变形式。

根据本申请的第二方面的第三优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第四优化nvm接口命令执行顺序的方法,将获取的读命令修改为读页缓存的命令。

根据本申请的第二方面的第一至第四优化nvm接口命令执行顺序的方法之一,提供了根据本申请第二方面的第五优化nvm接口命令执行顺序的方法,响应于偏移值不大于0,使偏移值与基地址都递增。

根据本申请的第二方面的第一至第五优化nvm接口命令执行顺序的方法之一,提供了根据本申请第二方面的第六优化nvm接口命令执行顺序的方法,响应于无法优化nvm接口命令执行顺序,识别读指针的偏移值是否大于0;响应于偏移值大于0,根据基地址作为读指针获取nvm接口命令并处理;使基地址递增并与偏移值求和作为基地址的新值,并将偏移值设置为0;以及根据基地址与偏移值的和得到读指针,并根据读指针获取nvm接口命令并处理。

根据本申请的第二方面的第六优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第七优化nvm接口命令执行顺序的方法,响应于偏移值不大于0,使基地址递增。

根据本申请的第二方面的第一至第七优化nvm接口命令执行顺序的方法之一,提供了根据本申请第二方面的第八优化nvm接口命令执行顺序的方法,执行完第一nvm接口命令后,识别是否可优化nvm接口命令的执行顺序;比较第一nvm接口命令与与其相邻的第二nvm接口命令,识别是否满足优化条件;响应于第一nvm接口命令与第二nvm接口命令不满足优化条件,且第一nvm接口命令与与其不相邻的第三nvm接口命令满足优化条件,而识别出可优化nvm接口命令执行顺序。

根据本申请的第二方面的第八优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第九优化nvm接口命令执行顺序的方法,响应于识别出无法优化nvm接口命令的执行顺序,第二nvm接口命令被执行。

根据本申请的第二方面的第八或第九优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第十优化nvm接口命令执行顺序的方法,优化条件包括:第三nvm接口命令指示读取同第一nvm接口命令相同或相近的地址,或者由于执行了第一nvm接口命令,使得第三nvm接口命令读取的数据位于nvm芯片的页缓存中,或者第一nvm接口命令与第三nvm接口命令访问同一逻辑单元的不同平面,且第一nvm接口命令与第三nvm接口命令可由单一的多平面命令来替代,或者第三nvm接口命令有较高的处理优先级,或者第三nvm接口命令有较高的处理优先级且消息队列中第一nvm接口命令与第三nvm接口命令之间的nvm接口命令具有较长处理时间。

根据本申请的第二方面的第一至第七优化nvm接口命令执行顺序的方法之一,提供了根据本申请第二方面的第十一优化nvm接口命令执行顺序的方法,执行完第一nvm接口命令后,识别是否可优化nvm接口命令的执行顺序;响应于第一nvm接口命令与与其相邻的第二nvm接口命令满足优化条件,获取偏移值的值;响应于偏移值大于0,识别出可优化nvm接口命令执行顺序。

根据本申请的第二方面的第十一优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第十二优化nvm接口命令执行顺序的方法,响应于偏移值大于0,使偏移值递增,基地址不变;以及根据基地址与偏移值的和得到读指针,并根据读指针获取nvm接口命令并处理。

根据本申请的第二方面的第十二优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第十三优化nvm接口命令执行顺序的方法,响应于偏移值不大于0,识别出不可优化执行顺序。

根据本申请的第二方面的第十二至第十四优化nvm接口命令执行顺序的方法之一,提供了根据本申请第二方面的第十五优化nvm接口命令执行顺序的方法,响应于第一nvm接口命令与与其相邻的第二nvm接口命令不满足优化条件,进一步识别第一nvm接口命令与与其不相邻的第三nvm接口命令是否满足优化条件;响应于第一nvm接口命令与第三nvm接口命令满足优化条件,识别出可优化nvm接口命令执行顺序。

根据本申请的第二方面的第十五优化nvm接口命令执行顺序的方法,提供了根据本申请第二方面的第十六优化nvm接口命令执行顺序的方法,响应于第一nvm接口命令与第三nvm接口命令不满足优化条件,识别出不可优化nvm接口命令执行顺序。

根据本申请的第三方面,提供了根据本申请第三方面的第一介质接口控制器,包括:消息队列和nvm命令处理单元,消息队列与nvm命令处理单元耦合,nvm命令处理单元还与多个nvm芯片耦合;消息队列用于接收访问nvm芯片的逻辑单元的多个平面的消息,nvm命令处理单元从消息队列获取信息,并根据消息的指示生成nvm接口命令并发送给nvm芯片;nvm命令处理单元融合nvm接口命令。

根据本申请的第三方面的第一介质接口控制器,提供了根据本申请第三方面的第二介质接口控制器,访问nvm芯片的消息包括指示读出数据的消息、写入数据的消息、擦除nvm芯片的存储单元的消息,指示读取nvm芯片状态的消息、读取或设置nvm芯片特征的消息,以及用户自定义消息中的一种或多种。

根据本申请的第三方面的第一或第二介质接口控制器,提供了根据本申请第三方面的第三介质接口控制器,消息队列包括一个或多个消息队列。

根据本申请的第三方面的第一至第三介质接口控制器之一,提供了根据本申请第三方面的第四介质接口控制器,nvm命令处理单元通过多个通道与多个nvm芯片耦合连接,每个nvm芯片分别包括多个逻辑单元。

根据本申请的第三方面的第一至第四介质接口控制器之一,提供了根据本申请第三方面的第五介质接口控制器,nvm命令处理单元包括多个硬件实例或多个线程,各个实例或线程,并行处理nvm接口命令。

根据本申请的第三方面的第一至第五介质接口控制器之一,提供了根据本申请第三方面的第六介质接口控制器,nvm命令处理单元,通过执行指令或微指令序列,对nvm接口命令实施调度。

根据本申请的第三方面的第一至第六介质接口控制器之一,提供了根据本申请第三方面的第七介质接口控制器,基于同一指令或微指令序列创建多个线程。

根据本申请的第三方面的第一至第七介质接口控制器之一,提供了根据本申请第三方面的第八介质接口控制器,nvm命令处理单元为每个线程存储执行状态。

根据本申请的第三方面的第一至第八介质接口控制器之一,提供了根据本申请第三方面的第九介质接口控制器,nvm芯片处理单元向nvm芯片写入数据时,数据被存储在nvm芯片的页缓存中。

根据本申请的第三方面的第一至第九介质接口控制器之一,提供了根据本申请第三方面的第十介质接口控制器,nvm命令处理单元将消息队列中的访问同一nvm芯片的不同平面的两个或多个读命令,融合成单条多平面读命令。

根据本申请的第三方面的第十介质接口控制器,提供了根据本申请第三方面的第十一介质接口控制器,响应于识别出消息队列中的第一读命令所访问的数据随着该单条多平面命令的执行被加载到nvm芯片的页缓存中,还优先执行所述第一读命令。

根据本申请的第三方面的第十或第十一介质接口控制器,提供了根据本申请第三方面的第十二介质接口控制器,将所述第一读命令修改为读页缓存的命令并执行该读页缓存的命令。

根据本申请的第三方面的第一至第十二介质接口控制器之一,提供了根据本申请第三方面的第十三介质接口控制器,nvm命令处理单元执行本申请第四方面、第五方面、第六方面或第七方面的优化nvm接口命令执行顺序的方法之一。

根据本申请的第四方面,提供了根据本申请第四方面的第一优化nvm接口命令执行顺序的方法,包括:检测待执行的第一nvm接口命令与同其在消息队列中相邻并在后的第二nvm接口命令是否可融合;响应于第一nvm接口命令与第二nvm接口命令可融合,融合第一nvm接口命令与第二nvm接口命令;执行融合后的nvm接口命令。

根据本申请的第四方面的第一优化nvm接口命令执行顺序的方法,提供了根据本申请第四方面的第二优化nvm接口命令执行顺序的方法,响应于第一nvm接口命令与第二nvm接口命令不可融合,执行第一nvm接口命令。

根据本申请的第四方面的第一或第二优化nvm接口命令执行顺序的方法,提供了根据本申请第四方面的第三优化nvm接口命令执行顺序的方法,响应于第一nvm接口命令执行完成,检测是否可优化nvm接口命令执行顺序;响应于可优化nvm接口命令执行顺序,识别读指针的偏移值是否大于0;响应于偏移值大于0,使偏移值递增;以及根据基地址与偏移值的和得到读指针,并根据读指针获取nvm接口命令并处理。

根据本申请的第四方面的第三优化nvm接口命令执行顺序的方法,提供了根据本申请第四方面的第四优化nvm接口命令执行顺序的方法,偏移值大于0时,其值指示了之前已发生的改变nvm接口命令执行顺序的次数。

根据本申请的第四方面的第三或第四优化nvm接口命令执行顺序的方法,提供了根据本申请第四方面的第五优化nvm接口命令执行顺序的方法,响应于偏移值不大于0,使偏移值与基地址都递增。

根据本申请的第四方面的第三至第五优化nvm接口命令执行顺序的方法之一,提供了根据本申请第四方面的第六优化nvm接口命令执行顺序的方法,响应于无法优化nvm接口命令执行顺序,识别读指针的偏移值是否大于0;响应于偏移值大于0,根据基地址作为读指针获取nvm接口命令并处理;使基地址递增并与偏移值求和作为基地址的新值,并将偏移值设置为0;以及根据基地址与偏移值的和得到读指针,并根据读指针获取nvm接口命令并处理。

根据本申请的第四方面的第六优化nvm接口命令执行顺序的方法,提供了根据本申请第四方面的第七优化nvm接口命令执行顺序的方法,响应于偏移值不大于0,使基地址递增。

根据本申请的第五方面,提供了根据本申请第五方面的第一优化nvm接口命令执行顺序的方法,包括:获取待执行的第一nvm接口命令;识别第一nvm接口命令是否命中nvm芯片的页缓存;响应于页缓存命中,根据第一nvm接口命令生成访问页缓存的命令,用访问页缓存的命令替代第一nvm接口命令。

根据本申请的第五方面的第一优化nvm接口命令执行顺序的方法,提供了根据本申请第五方面的第二优化nvm接口命令执行顺序的方法,获取下一待执行的nvm接口命令。

根据本申请的第五方面的第一优化nvm接口命令执行顺序的方法,提供了根据本申请第五方面的第三优化nvm接口命令执行顺序的方法,响应于页缓存未命中,识别第一nvm接口命令与同其在消息队列中相邻并在后的第二nvm接口命令是否可融合;响应于第一nvm接口命令与第二nvm接口命令可融合,融合第一nvm接口命令与第二nvm接口命令,生成并执行融合后的多平面命令替代第一nvm接口命令与第二nvm接口命令。

根据本申请的第五方面的第一至第三优化nvm接口命令执行顺序的方法之一,提供了根据本申请第五方面的第四优化nvm接口命令执行顺序的方法,响应于第一nvm接口命令与第二nvm接口命令不可融合,执行第一nvm接口命令。

根据本申请的第五方面的第一至第四优化nvm接口命令执行顺序的方法之一,提供了根据本申请第五方面的第五优化nvm接口命令执行顺序的方法,记录各个nvm芯片的页缓存中的数据的地址范围,以识别nvm接口命令是否命中页缓存。

根据本申请的第五方面的第一至第五优化nvm接口命令执行顺序的方法之一,提供了根据本申请第五方面的第六优化nvm接口命令执行顺序的方法,若第一nvm接口命令处理单元是读命令,响应于执行了第一nvm接口命令,还标记页缓存中的数据的地址,用于识别后续的nvm接口命令是否会命中页缓存。

根据本申请的第五方面的第一至第六优化nvm接口命令执行顺序的方法之一,提供了根据本申请第五方面的第七优化nvm接口命令执行顺序的方法,nvm命令处理单元将消息队列中的访问同一nvm芯片的不同平面的两个或多个读命令,融合成单条多平面读命令。

根据本申请的第五方面的第一至第七优化nvm接口命令执行顺序的方法之一,提供了根据本申请第五方面的第八优化nvm接口命令执行顺序的方法,第一nvm接口命令是消息队列中的任意命令。

根据本申请的第六方面,提供了根据本申请第六方面的第一优化nvm接口命令执行顺序的方法,包括:响应于第一nvm接口命令待执行;识别第一nvm接口命令与同其在消息队列中相邻并在后的第二nvm接口命令是否可融合;响应于第一nvm接口命令与第二nvm接口命令可融合,融合第一nvm接口命令与第二nvm接口命令,生成并执行融合后的多平面命令替代第一nvm接口命令与第二nvm接口命令。

根据本申请的第六方面的第一优化nvm接口命令执行顺序的方法,提供了根据本申请第六方面的第二优化nvm接口命令执行顺序的方法,获取下一待执行的nvm接口命令。

根据本申请的第六方面的第二优化nvm接口命令执行顺序的方法,提供了根据本申请第六方面的第三优化nvm接口命令执行顺序的方法,响应于第一nvm接口命令与第二nvm接口命令不可融合,识别第一nvm接口命令是否命中nvm芯片的页缓存;响应于页缓存命中,根据第一nvm接口命令生成访问页缓存的命令,用访问页缓存的命令替代第一nvm接口命令。

根据本申请的第六方面的第一至第三优化nvm接口命令执行顺序的方法之一,提供了根据本申请第六方面的第四优化nvm接口命令执行顺序的方法,响应于页缓存未命中,执行第一nvm接口命令。

根据本申请的第六方面的第一至第四优化nvm接口命令执行顺序的方法之一,提供了根据本申请第六方面的第五优化nvm接口命令执行顺序的方法,nvm命令处理单元将消息队列中的访问同一nvm芯片的不同平面的两个或多个读命令,融合成单条多平面读命令。

根据本申请的第六方面的第一至第五优化nvm接口命令执行顺序的方法之一,提供了根据本申请第六方面的第六优化nvm接口命令执行顺序的方法,nvm命令处理单元记录nvm芯片的页缓存中的数据的地址范围,以识别nvm接口命令是否命中页缓存。

根据本申请的第六方面的第一至第六优化nvm接口命令执行顺序的方法之一,提供了根据本申请第六方面的第七优化nvm接口命令执行顺序的方法,响应于页缓存命中,融合第一nvm接口命令与第二nvm接口命令,生成并执行融合后的对页缓存的多平面命令替代第一nvm接口命令与第二nvm接口命令。

根据本申请的第六方面的第七优化nvm接口命令执行顺序的方法,提供了根据本申请第六方面的第八优化nvm接口命令执行顺序的方法,响应于页缓存未命中,融合第一nvm接口命令与第二nvm接口命令,生成并执行融合后的多平面命令替代第一nvm接口命令与第二nvm接口命令。

根据本申请的第七方面,提供了根据本申请第七方面的第一优化nvm接口命令执行顺序的方法,包括:响应于第一nvm接口命令待执行;识别第一nvm接口命令是否命中nvm芯片的页缓存;响应于第一nvm接口命令命中页缓存,根据第一nvm接口命令生成并执行访问页缓存的命令,用访问页缓存的命令替代第一nvm接口命令。

根据本申请的第七方面的第一优化nvm接口命令执行顺序的方法,提供了根据本申请第七方面的第二优化nvm接口命令执行顺序的方法,识别同第一nvm接口命令在消息队列中相邻并在后的一个或多个第二nvm接口命令是否命中页缓存;响应于一个或多个第二nvm接口命令命中页缓存,根据第二nvm接口命令生成并执行访问页缓存的命令,用访问页缓存的命令替代各个命中了页缓存的第二nvm接口命令;将第二nvm接口命令移除。

根据本申请的第七方面的第一或第二优化nvm接口命令执行顺序的方法,提供了根据本申请第七方面的第三优化nvm接口命令执行顺序的方法,识别第一nvm接口命令与一个或多个第三nvm接口命令是否可融合;响应于第一nvm接口命令与第三nvm接口命令可融合,融合第一nvm接口命令与一个或多个第三nvm接口命令,生成并执行多平面命令替代融合的第一nvm接口命令与一个或多个第三nvm接口命令;将第一与第三nvm接口命令移除。

根据本申请的第七方面的第一至第三优化nvm接口命令执行顺序的方法之一,提供了根据本申请第七方面的第四优化nvm接口命令执行顺序的方法,识别第一nvm接口命令是否是相对更耗时且低优先级的命令,而一个或多个第四nvm接口命令是否是相对低延迟或高优先级的命令;响应于第一nvm接口命令的优先级比一个或多个第二nvm接口命令的优先级高,执行第一nvm接口命令。

根据本申请的第七方面的第一至第四优化nvm接口命令执行顺序的方法之一,提供了根据本申请第七方面的第五优化nvm接口命令执行顺序的方法,响应于第一nvm接口命令的优先级比一个或多个第四nvm接口命令的优先级低,且第一nvm接口命令相对更耗时,执行一个或多个第四nvm接口命令;将被执行的第四nvm接口命令移除。

根据本申请的第七方面的第五优化nvm接口命令执行顺序的方法,提供了根据本申请第七方面的第六优化nvm接口命令执行顺序的方法,生成并执行第五nvm接口命令,用于指示nvm芯片中止对第一nvm接口命令的执行。

根据本申请的第八方面,提供一种包括程序代码的程序,当被载入存储设备并在存储设备上执行时,所述程序代码使所述存储设备执行根据本申请第二方面、第四方面、第五方面、第六方面或第七方面的优化nvm接口命令执行顺序的方法之一。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1展示了现有技术的存储设备的框图;

图2是根据本申请实施例的控制部件的介质接口控制器的框图;

图3是根据本申请实施例的控制部件的介质接口控制器的框图;

图4a是根据本申请实施例的优化nvm接口命令执行顺序的示意图;

图4b是根据本申请的又一实施例的优化nvm接口命令执行顺序的流程图;

图5a是根据本申请实施例的识别是否可优化nvm命令执行顺序的流程图;

图5b是根据本申请又一实施例的识别是否可优化nvm命令执行顺序的流程图;

图6是根据本申请又一实施例的控制部件的介质接口控制器的框图;

图7是根据本申请另一实施例的优化nvm命令执行顺序的流程图;

图8a是根据本申请实施例的优化nvm命令执行顺序的流程图;

图8b是根据本申请又一实施例的优化nvm命令执行顺序的流程图;

图8c是根据本申请再一实施例的优化nvm命令执行顺序的流程图;

图9是根据本申请还一实施例的优化nvm命令执行顺序的流程图。

具体实施方式

下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图2是根据本申请实施例的控制部件的介质接口控制器的框图。图2中的介质接口控制器包括消息队列210与nvm命令处理单元220。图2的实施例中,消息队列210用于接收来自控制部件(也参看图1的控制部件)的访问nvm芯片的消息。来自控制部件的消息可包括指示读出、写入、删除nvm芯片的消息,还可以包括指示读取nvm芯片状态、读取或设置nvm芯片特征(feature)的消息,以及也可以包括用户自定义消息。nvm命令处理单元220从消息队列210获取消息,并根据消息的指示向nvm芯片发送符合nvm芯片接口标准的nvm接口命令或依照nvm芯片接口标准从nvm接收数据或状态。作为举例,根据本申请实施例的nvm命令处理单元,通过例如执行指令或微指令,对nvm接口命令实施调度。消息队列210包括一个或多个消息队列。

nvm命令处理单元220耦合到多个nvm芯片。在图2的实施例中,nvm命令处理单元220通过2个通道(ch1与ch2)耦合到4颗nvm芯片,每个nvm芯片包括2个lun。在通道ch1的nvm芯片(nvm0与nvm1)各自提供lun0与lun1,在通道ch2的nvm芯片(nvm2与nvm3)各自提供lun0与lun1。可以理解的,nvm接口控制器可耦合更多的通道,并访问更多的nvm芯片与更多的lun。

介质接口控制器能够对来自多个消息队列的多个访问nvm芯片的消息并行处理。nvm命令处理单元可包括多个硬件实例或多个线程,每个实例或线程,并行处理多个nvm接口命令。硬件实例或执行微指令序列的线程访问各自对应的nvm芯片。将可被执行的微指令序列被称作线程。由于同一微指令序列在每次执行时拥有自己的执行状态,从而可基于同一微指令序列创建多个线程。在nvm命令处理单元220中还为每个线程存储执行状态。根据本申请的实施例,基于所要访问的lun来创建或使用线程。例如使用线程1来访问lun1,和/或使用线程2来访问lun2。

图3是根据本申请实施例的控制部件的介质接口控制器的框图。

图3的实施例中,介质接口控制器包括消息队列310与nvm命令处理单元320。介质接口控制器耦合到多个nvm芯片(示出为nvm0、nvm1、nvm2与nvm3)。nvm芯片包括页缓存。为向nvm芯片写入数据,介质接口控制器向nvm芯片发出编程命令,并将被编程的数据传输到nvm芯片。nvm芯片收到数据并存储在页缓存中,还将页缓存中的数据存储在nvm芯片。为从nvm芯片读出数据,介质接口控制器向nvm芯片发出读命令或者读页缓存的命令,其中读页缓存的命令将nvm芯片的页缓存中的数据读出,并传输给介质接口控制器。

图3中还展示了消息队列中的多个nvm接口命令。依箭头方向所指示的,下方的命令被更早接收或者更早添加到消息队列。例如,从消息队列310中,依次接收到读nvm芯片0物理地址p0的命令、写nvm芯片0物理地址p100的命令、读nvm芯片0物理地址p1的命令以及读nvm芯片0物理地址p50的命令。可按照nvm接口命令被接收的顺序,将nvm接口命令发送给nvm芯片,并获得nvm接口命令的执行结果。

根据本申请的实施例,接收读nvm芯片0物理地址p0的命令,并将其发送给nvm芯片0后,暂缓处理写nvm芯片0物理地址p100的命令。响应于nvm芯片0物理地址p0的数据被读出,物理地址p0的数据,以及可选地与其临近的数据,都被存储在页缓存中。nvm命令处理单元320识别出随后的读nvm芯片0物理地址p1的命令可被提前调度,并将读nvm芯片0物理地址p1的命令修改为从页缓存中获取数据,从而降低读命令的处理延迟。接下来,nvm命令处理单元320再向nvm芯片0发出写nvm芯片0物理地址p100的命令与读nvm芯片0物理地址p50的命令。从而通过改变nvm接口命令的执行顺序,优化处理nvm接口命令的性能。nvm命令处理单元320识别出可被改变执行顺序的一个或多个nvm接口命令,并在必要时,改变nvm接口命令的形态,例如,将读命令修改为读页缓存的命令,或者合并两个或多个命令。

图4a是根据本申请实施例的优化nvm接口命令执行顺序的示意图。

图4a展示了从消息队列(例如,参看图3,消息队列310)接收的nvm接口命令(也简称为“nvm命令”)及其接收循序。nvm命令0最先被接收、接下来是nvm命令1、nvm命令2与nvm命令3。作为举例,在执行了nvm命令0之后,紧接着执行nvm命令2是优化的。写指针指示向消息队列填充nvm命令的位置。读指针(rp)指示从nvm消息队列获取nvm命令的位置。令读指针rp=base+offset,其中base称为基地址,而offset称为偏移值。

图4b是根据本申请的又一实施例的优化nvm接口命令执行顺序的流程图。

由例如图3的nvm命令处理单元320实施图4b所示的处理流程。响应于一条nvm命令(称为当前nvm命令)执行完成(410),检测接下来是否有优化nvm命令执行顺序的机会(412)。例如,当前nvm命令同与其在消息队列中不相邻的nvm命令读取相同或相近的地址,则优先处理该不相邻的nvm命令。

接下来,识别偏移值(offset)的值是否大于0(414)。偏移值(offset)可由寄存器或程序变量提供。偏移值(offset)大于0时,其值指示了之前已发生的改变nvm命令执行顺序的次数。此时,使偏移值(offset)递增(416),以及根据基地址(base)与偏移值(offset)的和得到读指针,并根据读指针从消息队列获取nvm命令并处理(420)。可选地,还对获取的nmv命令改变形式,例如,将读命令修改为读页缓存的命令。

在步骤414,若偏移值(offset)不大于0,则使偏移值(offset)与基地址(base)都递增(418),以及根据基地址(base)与偏移值(offset)的和作为读指针从消息队列获取nvm命令并处理(420)。

在步骤420执行之后,返回步骤410开始处理下一nvm命令。

在步骤412,若识别出接下来没有优化nvm命令执行顺序的机会(412),进一步识别偏移值(offset)是否大于0(430),以识别之前是否对nvm命令执行顺序做了优化。若偏移值(offset)大于0(430),根据单独的基地址(base)作为读指针获取nvm命令并处理(432),以及将基地址(base)更新为使基地址(base)递增并与偏移值(offset)求和作为基地址(base)的新值,并将偏移值(offset)设置为0(434)。接下来到步骤420,根据基地址(base)与偏移值(offset)的和作为读指针从消息队列获取nvm命令并处理。

在步骤430,若偏移值(offset)不大于0(430),则使基地址(base)递增(436),以及到步骤420,根据基地址(base)与偏移值(offset)的和作为读指针从消息队列获取nvm命令并处理。

作为举例,返回参看图4a,在由(1)所指示的nvm命令0执行完成后,开始根据图4b的处理流程,此时,基地址(base)为0,而偏移值(offset)为0。在步骤412,识别出可通过先于nvm命令1而执行nvm命令2而优化执行顺序,在步骤414,偏移值(offset)为0,进入步骤418,得到偏移值(offset)与基地址(base)都被修改为1,并在步骤420,得到读指针为(base+offset)为2,以获取nvm命令2并处理(图4a中由(2)所指示)。可选地,还改变nvm命令2的形态,以优化对nvm命令2的执行。例如,nvm命令2是命中了页缓存的读命令,将nvm命令2用读页缓存的命令替代。

接下来,通过步骤410与412,识别出无法再优化执行顺序,转向步骤430与步骤432,根据基地址(base)而处理nvm命令1(图4a中,由(3)所指示)。以及更新基地址(base)为3,将偏移值(offset)设置为0(434),并获取nvm命令3并处理(图4a中由(4)所指示)。

图5a是根据本申请实施例的识别是否可优化nvm命令执行顺序的流程图。

根据本申请的实施例,在执行完一条nvm命令后,通过图5a的处理流程,识别是否可优化nvm命令的执行顺序。将刚执行完成的nvm命令称为第一nvm命令,例如,图4a中nvm命令0。将消息队列中同第一nvm命令相邻,并在第一nvm命令之后的nvm命令称为第二nvm命令,如图4a中的nvm命令1。将消息队列中同第一nvm命令不相邻,且在第一nvm命令之后的一个或多个命令都称为第三nvm命令,例如,图4a中的nvm命令2或nvm命令3。

比较第一nvm命令与第二nvm命令,以识别其是否满足优化条件(510)。第一nvm命令与第二nvm命令满足优化条件,意味着其应当被连续的执行。例如,第二nvm命令指示读取同第一nvm命令相同或相近的地址,或者由于执行了第一nvm命令,使得第二nvm命令读取的数据位于nvm芯片的页缓存中,或者第一nvm命令与第二nvm命令访问同一逻辑单元的不同平面(plane),且第一nvm命令与第二nvm命令可由单一的多平面(multiplane)命令来替代,或者第二nvm命令有较高的处理优先级,或者第二nvm命令有较高的处理优先级且消息队列中第一nvm命令与第二nvm命令之间的nvm命令具有较长处理时间(例如,擦除命令)。以同样的标准,识别第一nvm命令与第三nvm命令是否满足优化条件。

若第一nvm命令与第二nvm命令不满足优化条件(510),而第一nvm命令与第三nvm命令满足优化条件(520),则识别出可优化nvm命令执行顺序(530)。针对刚执行完成的第一nvm命令,可优化执行顺序,意味着接下来不执行与其相邻的第二nvm命令,而优先执行与第一nvm命令不相邻的第三nvm命令。

图5b是根据本申请又一实施例的识别是否可优化nvm命令执行顺序的流程图。

根据图5b的实施例,在执行完一条nvm命令(第一nvm命令)后,通过图5b的处理流程,识别是否可优化nvm命令的执行顺序。若第一nvm命令与与其相邻的第二nvm命令满足优化条件(540),进一步获取偏移值(offset)的值。若偏移值(offset)大于0(542),则识别出可优化执行顺序(544)。使得在图4b的实施例中,处理流程通过步骤412、414与416的路径被执行。

若步骤542中,偏移值不大于0(542),识别出不可优化执行顺序(544)。

若步骤540识别出第一nvm命令与与其相邻的第二nvm命令不满足优化条件,进一步识别第一nvm命令与与其不相邻的第三nvm命令是否满足优化条件(550)。第三nvm命令同第一nvm命令在消息队列中可间隔1个或多个nvm命令。若第一nvm命令与与其不相邻的第三nvm命令满足优化条件(550),识别出可优化执行顺序(552);否则,识别出不可优化执行顺序(554)。

图6是根据本申请又一实施例的控制部件的介质接口控制器的框图。

图6的实施例中,介质接口控制器包括消息队列610与nvm命令处理单元620。介质接口控制器耦合到多个nvm芯片(示出为nvm0、nvm1、nvm2与nvm3)。nvm芯片包括页缓存。每个nvm芯片的逻辑单元包括多个平面(plane)。图6中,将平面展示为p0与p1。nvm芯片提供多平面(muitl-plane)命令,以在单一的多平面命令中访问来自两个或更多平面的地址。

图6中还展示了消息队列中的多个nvm接口命令。依箭头方向所指示的,下方的命令被更早接收或者更早添加到消息队列。例如,从消息队列610中,依次接收到读nvm芯片0平面0(pl0)物理地址p0的命令、写nvm芯片0平面0(pl0)物理地址p100的命令、读nvm芯片0平面1(pl1)物理地址p0的命令、读nvm芯片0平面0(pl0)物理地址p50的命令以及读nvm芯片0平面0(pl0)物理地址p1的命令。

根据本申请的实施例,读nvm芯片0平面0(pl0)物理地址p0的命令,与读nvm芯片0平面1(pl1)物理地址p0的命令,被融合,生成单条多平面(muitl-plane)命令以替代前述两个命令,从而减少了执行nvm命令的数量以提高固态存储设备的性能。进一步,还识别出读nvm芯片0平面0(pl0)物理地址p1的命令的数据随该多平面命令的执行被加载到nvm芯片0的页缓存中,还优化执行顺序,先执行读nvm芯片0平面0(pl0)物理地址p1的命令,并将该命令用读页缓存的命令代替。接下来,再执行写nvm芯片0平面0(pl0)物理地址100的命令与读nvm芯片0平面0(pl0)物理地址p50的命令。

图7是根据本申请另一实施例的优化nvm命令执行顺序的流程图。

由例如图6的nvm命令处理单元620实施图7所示的处理流程。响应于待执行一条nvm命令(称为第一nvm命令)(710),检测第一nvm命令与同其在消息队列中相邻并在后的第二nvm命令是否可融合(712)。例如,识别第一nvm命令与第二nvm命令是否可由单一的多平面命令替代。若第一nvm命令与第二nvm命令可融合(712),融合第一nvm命令与第二nvm命令(715),例如,生成多平面命令以替代第一nvm命令与第二nvm命令。若第一nvm命令与第二nvm命令不可融合(712),执行第一nvm命令(714)。

响应于第一nvm命令执行完成,接下来的处理流程类似于图4b从步骤410开始的处理流程。

检测接下来是否有优化nvm命令执行顺序的机会(716)。若有优化nvm命令执行顺序的机会,接下来,识别偏移值(offset)的值是否大于0(718)。若偏移值(offset)大于0,使偏移值(offset)递增(720),而基地址(base)保持不变,以及根据基地址(base)与偏移值(offset)的和得到读指针,并根据读指针从消息队列获取nvm命令并处理(724)。可选地,还对获取的nmv命令改变形式,例如,将读命令修改为读页缓存的命令。

在步骤718,若偏移值(offset)不大于0,则使偏移值(offset)与基地址(base)都递增(722),以及根据基地址(base)与偏移值(offset)的和作为读指针从消息队列获取nvm命令并处理(724)。

在步骤724执行之后,返回步骤710开始处理下一nvm命令。

在步骤716,若识别出接下来没有优化nvm命令执行顺序的机会,进一步识别偏移值(offset)是否大于0(730),以识别之前是否对nvm命令执行顺序做了优化。若偏移值(offset)大于0(730),根据单独的基地址(base)作为读指针获取nvm命令并处理(732),以及将基地址(base)更新为使基地址(base)递增并与偏移值(offset)求和作为基地址(base)的新值,并将偏移值(offset)设置为0(734)。接下来到步骤724,根据基地址(base)与偏移值(offset)的和作为读指针从消息队列获取nvm命令并处理。

在步骤730,若偏移值(offset)不大于0,则使基地址(base)递增(736),以及到步骤724,根据基地址(base)与偏移值(offset)的和作为读指针从消息队列获取nvm命令并处理。

图8a-图8c是根据本申请多个实施例的优化nvm命令执行顺序的流程图。由例如图6的nvm命令处理单元620实施图8a-图8c所示的处理流程。

参看图8a,响应于待执行一条nvm命令(称为第一nvm命令)(810),识别第一nvm命令是否命中页缓存(812)。根据本申请的实施例,nvm命令处理单元记录各个nvm芯片的页缓存中的数据的地址范围,以识别nvm命令可否命中页缓存。若页缓存命中(812),根据第一nvm命令生成访问页缓存的命令,用访问页缓存的命令替代第一nvm命令(814)。以及返回步骤810,继续获取下一待执行的nvm命令。

若页缓存未命中(812),识别第一nvm命令与同第一nvm命令相邻的nvm命令是否可融合(816)。若第一nvm命令与同第一nvm命令相邻的nvm命令可融合(816),融合第一nvm命令与相邻的nvm命令,生成并执行例如多平面命令替代第一nvm命令与相邻的nvm命令(818),以及返回步骤810,继续获取下一待执行的nvm命令。

若识别第一nvm命令与相邻的nvm命令不可融合(816),执行第一nvm命令(820),以及返回步骤810,继续获取下一待执行的nvm命令。

可选地,若第一nvm命令是读命令,在步骤820,响应于执行了第一nvm命令,还标记页缓存中的数据的地址,用于识别后续的nvm命令是否会命中页缓存。

参看图8b,响应于待执行一条nvm命令(称为第一nvm命令)(830),识别第一nvm命令与同第一nvm命令相邻的nvm命令是否可融合(832)。若第一nvm命令与相邻的nvm命令可融合(832),融合第一nvm命令与相邻的nvm命令,生成并执行例如多平面命令替代第一nvm命令与相邻的nvm命令(834),以及返回步骤830,继续获取下一待执行的nvm命令。

若识别第一nvm命令与相邻的nvm命令不可融合(832),识别第一nvm命令是否命中页缓存(836)。若页缓存命中(836),根据第一nvm命令生成访问页缓存的命令,用访问页缓存的命令替代第一nvm命令(838)。以及返回步骤830,继续获取下一待执行的nvm命令。若页缓存未命中(836),执行第一nvm命令(840),以及返回步骤830,继续获取下一待执行的nvm命令。

参看图8c,响应于待执行一条nvm命令(称为第一nvm命令)(860),若第一nvm命令与相邻的nvm命令可融合(862),进一步识别第一nvm命令是否命中页缓存(864)。若页缓存命中(864),融合第一nvm命令与相邻的nvm命令,生成并执行例如对页缓存的多平面命令替代第一nvm命令与相邻的nvm命令(868),以及返回步骤860,继续获取下一待执行的nvm命令。若页缓存未命中(864),融合第一nvm命令与相邻的nvm命令,生成并执行例如多平面命令替代第一nvm命令与相邻的nvm命令(866),以及返回步骤860。

若识别第一nvm命令与相邻的nvm命令不可融合(862),识别第一nvm命令是否命中页缓存(870)。若页缓存命中(870),根据第一nvm命令生成访问页缓存的命令,用访问页缓存的命令替代第一nvm命令(872)。以及返回步骤860。若页缓存未命中(870),执行第一nvm命令(874),以及返回步骤860,继续获取下一待执行的nvm命令。

图9是根据本申请还一实施例的优化nvm命令执行顺序的流程图。由例如图6的nvm命令处理单元620实施图9所示的处理流程。

可选地,nvm命令处理单元620从消息队列610获取nvm命令,并存储在缓存中。获取待执行的nvm命令(称为第一nvm命令)(910)。可选地,识别第一nvm命令是否命中页缓存(920)。若第一nvm命令命中了页缓存(920),根据第一nvm命令生成访问页缓存的命令,用访问页缓存的命令替代第一nvm命令(925)。以及返回步骤910,继续获取接下来的待执行的nvm命令。

若第一nvm命令未命中页缓存(920),依然可选地,识别一个或多个第二nvm命令是否命中页缓存(930)。第二nvm命令是缓存中在第一nvm命令之后的nvm命令。若一个或多个第二nvm命令命中了页缓存(930),根据第二nvm命令生成访问页缓存的命令,用访问页缓存的命令替代各个命中了页缓存的第二nvm命令(935)。以及还将被执行的nvm命令从缓存中移除。以及返回步骤910,继续获取接下来的待执行的nvm命令。

若第二nvm命令未命中页缓存(930),依然可选地,识别第一nvm命令与一个或多个第二nvm命令是否可融合(940)。若第一nvm命令与一个或多个第二nvm命令可融合(940),融合第一nvm命令与一个或多个第二nvm命令,生成并执行例如多平面命令替代融合的第一nvm命令与一个或多个第二nvm命令(945)。还将被融合的nvm命令从缓存中移除。以及返回步骤910,继续获取接下来的待执行的nvm命令。

若第一nvm命令与一个或多个第二nvm命令不可融合(940),依然可选地,识别第一nvm命令是相对更耗时或低优先级的命令,而一个或多个第二nvm命令是相对低延迟或高优先级的命令(950)。若步骤950识别的结果成立,则执行一个或多个第二nvm命令(955)。还将被执行的nvm命令从缓存中移除。以及返回步骤910,继续获取接下来的待执行的nvm命令。若步骤950识别的结果不成立,执行第一nvm命令(960),并返回步骤910,继续获取接下来的待执行的nvm命令。

可选地,若步骤950识别的结果成立,执行第一nvm命令,以及紧接着生成并执行第三nvm命令,用于指示nvm芯片中止对第一nvm命令的执行。以及执行一个或多个第二nvm命令(955)。还将被执行的第二nvm命令从缓存中移除。被中止的第一nvm命令可被恢复执行。

依然可选地,还确保第一nvm命令等待被执行的时间不会过长。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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