CN114296639A - 命令处理方法及闪存设备 - Google Patents
命令处理方法及闪存设备 Download PDFInfo
- Publication number
- CN114296639A CN114296639A CN202111509270.1A CN202111509270A CN114296639A CN 114296639 A CN114296639 A CN 114296639A CN 202111509270 A CN202111509270 A CN 202111509270A CN 114296639 A CN114296639 A CN 114296639A
- Authority
- CN
- China
- Prior art keywords
- context
- flash memory
- command
- end module
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 19
- 238000000034 method Methods 0.000 claims abstract description 42
- 238000013507 mapping Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 abstract description 19
- 238000011084 recovery Methods 0.000 abstract description 5
- 238000012545 processing Methods 0.000 description 40
- 238000010586 diagram Methods 0.000 description 15
- 208000001088 cerebrotendinous xanthomatosis Diseases 0.000 description 7
- 238000002512 chemotherapy Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 5
- COCAUCFPFHUGAA-MGNBDDOMSA-N n-[3-[(1s,7s)-5-amino-4-thia-6-azabicyclo[5.1.0]oct-5-en-7-yl]-4-fluorophenyl]-5-chloropyridine-2-carboxamide Chemical compound C=1C=C(F)C([C@@]23N=C(SCC[C@@H]2C3)N)=CC=1NC(=O)C1=CC=C(Cl)C=N1 COCAUCFPFHUGAA-MGNBDDOMSA-N 0.000 description 5
- 239000007787 solid Substances 0.000 description 5
- 239000008187 granular material Substances 0.000 description 4
- 238000013519 translation Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007596 consolidation process Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Landscapes
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例涉及存储设备应用领域,公开了一种命令处理方法及闪存设备,一方面,通过为前端模块的每一命令标识符分配一个上下文组,该上下文组包括N个上下文,其中,N为根据一个主机命令确定的闪存操作请求的最大数量,并且,为每一主机命令对应一个命令标识符,使得闪存设备不需要申请回收上下文即可处理主机命令;另一方面,通过确定至少一个闪存操作请求,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入上下文,生成闪存算法模块命令,并将闪存算法模块命令发送到后端模块,以使后端模块与硬件模块进行交互,进行闪存操作,本申请能够提高闪存设备的读性能。
Description
技术领域
本申请涉及存储设备应用领域,特别是涉及一种命令处理方法及闪存设备。
背景技术
闪存设备,例如:固态硬盘(Solid State Drives,SSD),是采用固态电子存储芯片阵列而制成的硬盘,固态硬盘包括控制单元和存储单元(FLASH存储芯片或DRAM存储芯片)。闪存设备针对读,随机读,尤其是4k,8k读性能要求越来越高,比如企业数据库,银行系统,淘宝,拼多多等的推送信息等等,随机读,4k读,8k读的需求越来越频繁,性能要求也越来越高。
目前,闪存设备对主机命令的处理需要上下文资源,而上下文资源有限,需要回收上下文(Context,CTX),而上下文的回收处理会造成相应的等待时间,从而导致闪存设备的读性能降低。
基于此,现有技术亟待改进。
发明内容
本申请实施例提供一种命令处理方法及闪存设备,其解决了上下文的回收处理造成的等待时间导致闪存设备的读性能降低的技术问题,提高闪存设备的读性能。
为解决上述技术问题,本申请实施例提供以下技术方案:
第一方面,本申请实施例提供一种命令处理方法,应用于闪存设备,闪存设备包括前端模块、闪存算法模块以及后端模块,方法包括:
为前端模块的每一命令标识符分配一个上下文组,其中,每一上下文组包括N个上下文,其中,N为根据一个主机命令确定的闪存操作请求的最大数量;
当前端模块接收到主机发送的至少一个主机命令之后,将每一主机命令一一对应一个命令标识符,生成前端模块命令,并转发前端模块命令到闪存算法模块;
当闪存算法模块接收到前端模块命令之后,根据前端模块命令,确定至少一个闪存操作请求,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入上下文,生成闪存算法模块命令,并将闪存算法模块命令发送到后端模块,以使后端模块与硬件模块进行交互,进行闪存操作。
在一些实施例中,方法还包括:确定根据一个主机命令确定的闪存操作请求的最大数量N,具体包括:
根据主机命令对应的逻辑地址,查询逻辑物理映射表;
根据逻辑地址中的数据存储在闪存介质中的物理地址,对处于同一个物理地址的数据,分配一个上下文,以确定最大数量N。
在一些实施例中,根据前端模块命令,确定至少一个闪存操作请求,包括:
判断前端模块命令是否需要拆分;
若是,则根据前端模块命令的至少两个物理地址信息,拆分成至少两个闪存操作请求;
若否,则确定一个闪存操作请求。
在一些实施例中,方法还包括:
为每一闪存操作请求进行编号,其中,拆分之后的每一闪存操作请求对应同一个命令标识符,并且,每一闪存操作请求的编号对应与该命令标识符对应的上下文组中的一个上下文的编号。
在一些实施例中,方法还包括:
划分第一上下文区域和第二上下文区域,其中,第一上下文区域和第二上下文区域均包括至少M个命令标识符,M为并发的主机命令的数量;
根据前端模块命令的IO请求类型,确定IO请求类型对应的上下文区域;
若确定IO请求类型对应的上下文区域为第一上下文区域,则在第一上下文区域中获取上下文,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入第一上下文区域的上下文;
若确定IO请求类型对应的上下文区域为第二上下文区域,则在第二上下文区域中动态申请上下文,将闪存操作请求写入第二上下文区域的上下文。
在一些实施例中,IO请求类型包括第一请求类型和第二请求类型,根据前端模块命令的IO请求类型,确定IO请求类型对应的上下文区域,包括:
若前端模块命令的IO请求类型为第一请求类型,则确定IO请求类型对应的上下文区域为第一上下文区域;
若前端模块命令的IO请求类型为第二请求类型,则确定IO请求类型对应的上下文区域为第二上下文区域,其中,第一请求类型的拆分因子为一,第二请求类型的拆分因子大于一。
在一些实施例中,在第一上下文区域中获取上下文,包括:
确定前端模块命令对应的一个闪存操作请求;
根据前端模块命令对应的命令标识符,从上下文组中获取与命令标识符对应的上下文。
在一些实施例中,在第二上下文区域中动态申请上下文,包括:
判断当前可用的上下文是否满足第一条件;
若是,则依次申请至少两个上下文,以满足至少两个闪存操作请求;
若否,则暂缓申请上下文,等待上下文的释放,直至上下文释放到满足第一条件。
在一些实施例中,判断当前可用的上下文是否满足第一条件,包括:
确定前端模块命令对应的至少两个闪存操作请求;
判断至少两个闪存操作请求需要的上下文的数量是否小于或等于当前可用的上下文的数量;
若是,则确定当前可用的上下文满足第一条件;
若否,则确定当前可用的上下文不满足第一条件。
第二方面,本申请实施例提供一种闪存设备,包括:
至少一个处理器;以及
与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够用于执行如第一方面的命令处理方法。
第三方面,本申请实施例还提供了一种非易失性计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令用于使闪存设备能够执行如第一方面的命令处理方法。
本申请实施例的有益效果是:区别于现有技术的情况下,本申请实施例提供的一种命令处理方法,应用于闪存设备,闪存设备包括前端模块、闪存算法模块以及后端模块,方法包括:为前端模块的每一命令标识符分配一个上下文组,其中,每一上下文组包括N个上下文,其中,N为根据一个主机命令确定的闪存操作请求的最大数量;当前端模块接收到主机发送的至少一个主机命令之后,将每一主机命令一一对应一个命令标识符,生成前端模块命令,并转发前端模块命令到闪存算法模块;当闪存算法模块接收到前端模块命令之后,根据前端模块命令,确定至少一个闪存操作请求,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入上下文,生成闪存算法模块命令,并将闪存算法模块命令发送到后端模块,以使后端模块与硬件模块进行交互,进行闪存操作。
一方面,通过为前端模块的每一命令标识符分配一个上下文组,该上下文组包括N个上下文,其中,N为根据一个主机命令确定的闪存操作请求的最大数量,并且,为每一主机命令对应一个命令标识符,使得闪存设备不需要申请回收上下文即可处理主机命令;另一方面,通过确定至少一个闪存操作请求,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入上下文,生成闪存算法模块命令,并将闪存算法模块命令发送到后端模块,以使后端模块与硬件模块进行交互,进行闪存操作,本申请能够提高闪存设备的读性能。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本申请实施例提供的一种闪存设备的结构示意图;
图2是本申请实施例提供的一种闪存设备的模块示意图;
图3是本申请实施例提供的一种闪存设备处理主机命令的处理流程图;
图4是本申请实施例提供的一种命令处理方法的流程图;
图5是本申请实施例提供的一种上下文组的示意图;
图6是本申请实施例提供的一种主机命令处理的示意图;
图7是图4中的步骤S403的细化流程图;
图8是本申请实施例提供的一种主机命令处理的流程示意图;
图9是本申请实施例提供的一种上下文组的示意图;
图10是本申请实施例提供的另一种上下文组的示意图;
图11是本申请实施例提供的一种第一CTX区域和第二CTX区域的示意图;
图12是本申请实施例提供的另一种第一CTX区域和第二CTX区域的示意图;
图13是本申请实施例提供的一种上下文组和申请释放上下文混合使用的流程示意图;
图14是本申请实施例提供的一种命令处理方法的整体流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,如果不冲突,本申请实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。再者,本申请所采用的“第一”、“第二”、“第三”等字样并不对数据和执行次序进行限定,仅是对功能和作用基本相同的相同项或相似项进行区分。
对本申请进行详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释:
(1)上下文(context,CTX),即上下文请求项(CTXEntry),指的是用以并发处理时存放消息信息的上下文,本申请中的上下文包括:算法模块(Flash Translation Layer,FTL)下发给后端模块(Back End,BE)的闪存操作请求上下文;包括读操作、写操作、擦除操作、物理地址、长度等信息;或者,后端模块内部并发的上下文(CTX),下发给硬件模块(HWOp Nand Mode)的CTX Entry信息,类似于算法模块的上下文请求项(CTXEntry)。
下面结合说明书附图具体说明本申请的技术方案:
请参阅图1,图1是本申请实施例提供的一种闪存设备的结构示意图;
如图1所示,闪存设备100包括闪存介质110以及与闪存介质110连接的控制器120。其中,闪存设备100通过有线或无线的方式与主机200通信连接,用以实现数据交互。
闪存介质110,作为闪存设备100的存储介质,也称作闪存、Flash、Flash存储器或Flash颗粒,属于存储器件的一种,是一种非易失性存储器,在没有电流供应的条件下也能够长久地保存数据,其存储特性相当于硬盘,使得闪存介质110得以成为各类便携型数字设备的存储介质的基础。
控制器120,包括数据转换器121、处理器122、缓存器123、闪存控制器124以及接口125。
数据转换器121,分别与处理器122和闪存控制器124连接,数据转换器121用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当闪存控制器124向闪存介质110写入数据时,通过数据转换器121将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质110。当闪存控制器124从闪存介质110读取数据时,通过数据转换器121将闪存介质110中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,数据转换器121可以包括二进制数据寄存器和十六进制数据寄存器。二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器122与数据转换器121、缓存器123、闪存控制器124以及接口125可以通过总线或者其他方式连接,处理器用于运行存储在缓存器123中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
缓存器123,主要用于缓存主机200发送的读/写指令以及根据主机200发送的读/写指令从闪存介质110获取的读数据或者写数据。
闪存控制器124,与闪存介质110、数据转换器121、处理器122以及缓存器123连接,用于访问后端的闪存介质110,管理闪存介质110的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATA target协议端或者NVMe协议端,获取主机200发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责闪存转换层(Flashtranslation layer,FTL)的核心处理。
接口125,连接主机200以及数据转换器121、处理器122以及缓存器123,用于接收主机200发送的数据,或者,接收处理器122发送的数据,实现主机200与处理器122之间的数据传输,接口125可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2NVME/SATA协议。
请再参阅图2,图2是本申请实施例提供的一种闪存设备的模块示意图;
如图2所示,控制器包括固件系统,固件系统用于连接主机(HOST)和闪存阵列,实现数据IO的处理。
具体的,该固件系统,包括:
前端模块(Front End,FE),用于获取主机命令,以产生IO操作,其中,前端模块还用于负责和主机(Host)的通信协议,主机命令、固态硬盘命令的解析等操作;
闪存算法模块,即闪存转换层(Flash translation layer,FTL),连接数据处理模块,用于对IO操作进行映射处理,以确定下发的闪存阵列;
闪存算法模块(Flash Translation Layer,FTL)向固态硬盘控制器的后端模块(Back End,BE)发送IO操作,以使固态硬盘控制器的后端模块接收闪存算法模块发送的IO操作;
后端模块(Back End,BE),连接闪存算法模块,用于接收闪存算法模块发送的IO操作,以控制硬件模块对闪存阵列进行读/写/擦操作;
硬件模块(HW Op Nand Mode),指的是操作FLASH闪存的模块,连接后端模块,由后端模块进行控制,用于操作FLASH闪存,例如:根据IO操作,向对应的闪存阵列或闪存介质进行操作,即完成数据到FLASH闪存的操作处理,操作包括读操作、写操作或擦操作。
其中,前端模块获取到主机命令后,进行处理以产生IO操作,并依次通过闪存算法模块、后端模块以及硬件模块,以对闪存阵列进行操作。例如:主机读数据时,主机(Host)发送主机命令给闪存设备(device),闪存设备的前端模块(FE)接收到主机命令,进行处理后分发到闪存算法模块(FTL),闪存算法模块收到后,通过逻辑到物理的转化处理,然后将请求NAND读操作发送给BE,BE收到之后,将硬件指令发送给HW Op Nand Mode(操作NAND的硬件模块,由BE进行控制),并行地进行操作NAND处理。
具体的,主机读取数据的流程,包括如下步骤(1)-(4):
(1)HOST将IO请求推送到闪存设备(device)的SQ_HOST队列,队列有一定的并发深度。
其中,主机的IO请求包括:
①、CMDID信息,因为是并发,所以主机一次会发很多个io请求,所以HOST通过CMDID来区分是哪个命令,这个数值一般为2个Byte的随机数,由具体的主机分配的id决定;
②、LBA信息:表征该命令需要读取数据的起始逻辑扇区地址(例如LBA有4k为单位);
③、LEN信息:操作长度命令,该属性表征主机的IO请求要读的逻辑扇区长度;
(2)FE依次从SQ_HOST队列中取得HOST的IO请求,硬件自动分配命令标识符(Ctag)等资源,并进行处理后,形成FE的IO请求消息,推进SQ_FE队列,让FTL来处理。
具体的,主机把请求加入到SQ_HOST队列之后,FE从队列取命令响应操作,FE处理完了之后,会整理成FTL可识别的请求,并下发给FTL处理。FE整理完之后的请求信息包含:
①、Ctag信息,即FE的命令标识符,一般是0-511,共512个命令并发,类似于HOST的CMD ID,FE根据该命令标识符(CMD Tag,Ctag)表征FE发出的是哪个命令。一般而言,Ctag的范围在0-511,由主机硬件NVME维护。当完成数据读取到HOST之后硬件自动回收释放,软件只需要通过硬件接口去获取即可。
②、Lma信息,即逻辑4k起始地址;
③、Len信息,即要读的地址长度;
(3)FTL从SQ_FE队列里依次取出FE的请求,进行逻辑到物理以及分拆命令等等的处理,形成FTL的NAND操作请求消息,然后推进SQ_FTL队列,让BE来处理。
具体的,在FE把请求加入到队列SQ_FE之后,FTL会去取出来处理;由于要读的Len比较长,Lma地址只是逻辑地址,FTL通过查询逻辑到物理映射表之后,发现对应的物理地址有多个,由于BE每次只能处理一个物理地址的请求,这里之所以要分拆成多个,是因为LMA逻辑地址和PMA物理地址都是以4k为单位,LMA是连续的逻辑地址,但是映射到PMA物理地址有可能是不连续的,BE每个请求只能处理连续的地址,如果不连续的地址就需要分拆成多个不同的请求,所以需要将1个FE的命令请求拆分成多个BE能识别处理的请求,例如拆分成3个BE的请求,这3个请求的标识Ctag相同,不同的是AuIdx,Pma,Len等请求信息,具体的,请求信息包含:
①、Ctag信息,即FE的命令标识符,例如:3个拆分的请求共有同一个Ctag标识码;
②、AuIdx信息,表示在Ctag的偏移地址(与第一个FE的LMA的偏移);
③、PMA:物理4k地址,包括通道地址、片选地址、Lun地址、page地址以及4k偏移;
④、Len:表征请求需要读取的地址长度(多少个4k);
可以理解的是,FTL需要分成1个或者多个NAND操作请求给BE,需要封装成消息存放在上下文(CTX Entry)中,所以,此时FTL还需要申请新的上下文,进行请求消息的封装,并将消息通过SQ_FTL队列传递给BE。
(4)BE从SQ_FTL队列中依次取得FTL的NAND操作请求消息,进行上下文资源的申请等处理之后,形成硬件操作请求,并推送给硬件模块(HW Op Nand Mode)并行地进行NAND读取操作处理。
具体的,BE从SQ_FTL获取到请求之后,进行解析,并依次丢给硬件执行,硬件是并行执行的,只有当执行完了之后,才会把完成信息通过CQ_FTL队列发给FTL回收命令。
FTL下发了多个请求之后,请求的Entry达到上限M(并发执行的命令总数也即Ctag总数)个,此时FE的请求过来,FTL只有等待回收出新的的CTX Entry才能封装新的请求往BE传递处理,此时在高并发时,这里会影响性能。另外,当BE发送给NAND读操作指令之后,BE的数据直接送到FE到HOST,中途如果未出异常,当数据传输到HOST完成之后,FE硬件自动释放Ctag资源。但此时FTL的CTX Entry需要BE上报CQ来释放(通过CQ_FTL消息队列上报)。
前端模块(FE)获取主机命令,然后FE通过SQ_FE队列分发给FTL,FTL从SQ_FE队列获取前端模块命令(FE命令)之后,分配上下文CTX并进行逻辑物理等处理,然后通过消息队列SQ_FTL发NAND处理请求消息给BE,BE从SQ_FTL消息队列里依次获取消息,多条请求消息并行处理,处理完了之后,通过CQ_FTL消息队列发送完成信息给FTL,FTL收到之后,进行上下文CTX的回收处理,释放出来的CTX以便分配给下一个FE发过来的命令继续使用。
请再参阅图3,图3是本申请实施例提供的一种闪存设备处理主机命令的处理流程图;
如图3所示,该闪存设备处理主机命令的处理流程,包括:
步骤S301:Host发送主机命令;
其中,该主机命令包括读操作。
步骤S302:FE解析主机命令,并封装成前端模块命令,并加入SQ_FE队列;
步骤S303:FTL获取SQ_FE队列的请求,解析之后,查询逻辑物理对照表;
步骤S304:判断FE的命令是否需要拆分;
步骤S305:FTL根据不同的物理地址拆分成不同的FTL请求;
步骤S306:FTL不用拆分,直接查询逻辑物理对照表,生成FTL请求;
步骤S307:FTL根据请求的数目,准备申请上下文;
步骤S308:判断CTX资源是否不足;
步骤S309:暂缓操作,下次继续处理;
步骤S310:申请到CTX资源之后,填入对应信息,推进CTX索引信息到SQ_FTL队列;
具体的,首先Host发送主机命令,FE收到主机命令之后,进行处理,并分配命令标识符(Ctag),推送给FTL,FTL取到命令之后,查询物理逻辑映射表,判断是否需要拆分成多个NAND的请求命令,如果需要拆分,则拆分成多个命令,如果不需要拆分,则只需要1个NAND请求命令即可,然后根据所需要的NAND操作请求数目申请相应的CTX资源,如果资源不足则暂缓该操作,等待CTX资源回收释放之后再申请CTX资源对该操作进行处理。
可以理解的是,由于BE从SQ_FTL消息队列里依次获取消息,多条请求消息并行处理,处理完了之后,通过CQ_FTL消息队列发送完成信息给FTL,FTL收到之后,进行上下文CTX的回收处理,此时,如果BE的处理没有完成,但是硬件已经完成了,FTL在等待释放CTX,即使FE有新的读命令过来,也无法马上响应,因为FTL的CTX被占用,必须等待BE处理完之后发送CQ消息过来才能释放。所以,这个开销就降低了读的性能。硬件上已经完成了,新的读命令也已经由FE获取到,并能马上进行处理,但此时由于软件处理慢了,必须等待,因此降低了闪存设备的读性能。
基于此,本申请实施例提供一种命令处理方法,FTL通过FE的Ctag直接索引而不用申请释放CTX,从而节省了回收CTX的等待时间,以提高闪存设备的读性能。
具体的,请参阅图4,图4是本申请实施例提供的一种命令处理方法的流程图;
其中,该命令处理方法,应用于闪存设备,闪存设备包括前端模块、闪存算法模块以及后端模块。
如图4所示,该命令处理方法,包括:
步骤S401:为前端模块的每一命令标识符分配一个上下文组,其中,每一上下文组包括N个上下文,其中,N为根据一个主机命令确定的闪存操作请求的最大数量;
请再参阅图5,图5是本申请实施例提供的一种上下文组的示意图;
如图5所示,每一上下文组(CTX组)一一对应一个命令标识符(Ctag),例如:CTX组0对应Ctag 0,CTX组1对应Ctag 1,……,CTX组M-1对应CtagM-1。
其中,每一上下文组(CTX组)包括N个上下文(CTX Entry),例如:CTX组0包括N个CTX Entry,N个CTX Entry的编号分别为CTX Entry 0*N+0,CTX Entry 0*N+1,CTX Entry0*N+2,……,CTX Entry 0*N+N-1;以此类推,CTX组M-1包括N个CTX Entry,N个CTX Entry的编号分别为CTX Entry(M-1)*N+0,CTX Entry(M-1)*N+1,CTX Entry(M-1)*N+2,……,CTXEntry(M-1)*N+N-1。
在本申请实施例中,每一上下文组包括的上下文的数量由逻辑物理映射表确定。具体的,确定根据一个主机命令确定的闪存操作请求的最大数量N,具体包括:
根据主机命令对应的逻辑地址,查询逻辑物理映射表;
根据逻辑地址中的数据存储在闪存介质中的物理地址,对处于同一个物理地址的数据,分配一个上下文,以确定最大数量N。
可以理解的是,一个连续的逻辑地址,可以分散地存在于闪存的物理地址中,也可以连续地存在于闪存的物理地址中。逻辑物理映射表,用于表明逻辑地址中的数据存储在闪存中的哪个物理地址,通过查询逻辑物理地址映射表,确定逻辑地址中的数据存储在闪存介质中的物理地址,对于处在同一个物理地址的数据,可以分配一个上下文,即N=1,反之,需要分配N个上下文,其中,N为正整数且N≥2,即需要用不同的上下文来管理,从而拆分成N个上下文。
在本申请实施例中,主机命令的逻辑地址包括主机命令的逻辑介质地址(LogicalMedia Address,LMA),逻辑地址的最小逻辑地址管理单元一般4k大小。
在本申请实施例中,假设闪存设备进行并发处理的命令的数量为M,假设Ctag能并发处理512个命令,则M=512,此时Ctag 0作为第一组,CTX的空间依次从0*N+0,0*N+1,……,0*N+N-1,共有N个CTX分为一组,后面的Ctag1同样以N个CTX为一组,以此类推,一直到Ctag(M-1)组。其中,M个主机命令对应:M个并发的命令标识符(Ctag)。
可以理解的是,主机的并发是任意的,但并发处理的命令的数量M的确定是根据设备的资源来定的,资源多则多,资源少就少。例如:M的取值为512、1024等。在本申请实施例中,为了保证后端闪存颗粒能同时跑起来,一般设置并发处理的命令的数量M不能比闪存颗粒的Die数少,即并发处理的命令的数量M大于闪存设备的闪存颗粒的Die数。
步骤S402:当前端模块接收到主机发送的至少一个主机命令之后,将每一主机命令一一对应一个命令标识符,生成前端模块命令,并转发前端模块命令到闪存算法模块;
具体的,请参阅图6,图6是本申请实施例提供的一种主机命令处理的示意图;
如图6所示,主机(Host)发送主机命令(HostCmd),将Host Cmd推送到主机命令队列(SQ_HOST队列),当前端模块(FE)接收到主机(Host)发送的至少一个主机命令之后,将每一主机命令一一对应一个命令标识符(Ctag),并封装主机命令的标识(Cmd ID)以及命令标识符(Ctag),生成前端模块命令,并将该前端模块命令推送到前端模块命令队列(SQ_FE),其中,该前端模块命令包括IO命令请求,前端模块转发前端模块命令到闪存算法模块(FTL),即,闪存算法模块(FTL)从前端模块命令队列(SQ_FE队列)中获取到前端模块命令,进行处理之后生成闪存算法模块命令,加入到闪存算法模块命令队列(SQ_FTL),由后端模块(BE)从闪存算法模块命令队列(SQ_FTL)获取闪存算法模块命令,进而获取到闪存操作请求。
其中,主机命令(Host Cmd)包括:主机命令的标识(Cmd ID)、逻辑块地址(LogicalBlock Address,Lba)以及要读的地址长度(Len),其中,相对于主机而言,逻辑块地址一般是512Byte,4k等等。
其中,前端模块命令包括:命令标识符(Ctag)、逻辑介质地址(Logical MediaAddress,LMA)以及要读的地址长度(Len),其中,逻辑介质地址即逻辑4k起始地址,在本申请实施例中,逻辑介质地址的单位是4k,由于闪存设备是4k映射,所以闪存设备的最小读取单元是4k。
其中,闪存算法模块命令包括:命令标识符(Ctag)、命令的偏移位置(AuIdx)、物理介质地址(physical Media Address,PMA)以及要读的地址长度(Len),其中,物理介质地址指的是物理4k地址,该物理介质地址包括通道地址,片选地址,Lun地址,page地址,以及4k偏移。
步骤S403:当闪存算法模块接收到前端模块命令之后,根据前端模块命令,确定至少一个闪存操作请求,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入上下文,生成闪存算法模块命令,并将闪存算法模块命令发送到后端模块,以使后端模块与硬件模块进行交互,进行闪存操作。
具体的,当闪存算法模块从前端模块命令队列(SQ_FE队列)中获取到前端模块命令之后,根据前端模块命令,确定至少一个闪存操作请求。
具体的,请再参阅图7,图7是图4中的步骤S403的细化流程图;
如图7所示,步骤S403:根据前端模块命令,确定至少一个闪存操作请求,包括:
步骤S4031:获取前端模块命令;
步骤S4032:判断前端模块命令是否需要拆分;
具体的,在获取到前端模块命令之后,对前端模块命令进行分析,查询逻辑物理对照表,判断前端模块命令是否包括至少两个物理地址信息,若是,则确定前端模块命令需要拆分,进入步骤S4033:根据前端模块命令的至少两个物理地址信息,拆分成至少两个闪存操作请求;若否,则确定前端模块命令不需要拆分,进入步骤S4034:确定一个闪存操作请求。
步骤S4033:根据前端模块命令的至少两个物理地址信息,拆分成至少两个闪存操作请求;
具体的,若前端模块命令需要拆分,则根据前端模块命令的至少两个物理地址信息,拆分成至少两个闪存操作请求,即NAND操作请求,其中,每一物理地址信息一一对应一个闪存操作请求。
步骤S4034:确定一个闪存操作请求。
具体的,若前端模块命令不需要拆分,则确定一个闪存操作请求。
请再参阅图8,图8是本申请实施例提供的一种主机命令处理的流程示意图;
如图8所示,该主机命令处理的流程,包括:
步骤S801:获取主机发送的主机命令;
具体的,主机(Host)发送主机命令,将主机命令加入到主机命令队列(SQ_HOST队列),前端模块(FE)从主机命令队列(SQ_HOST队列)中获取主机发送的主机命令,例如:FE获取Host发送的读操作,其中,该主机命令包括:主机命令的标识(Cmd ID)、逻辑块地址(Logical Block Address,Lba)以及要读的地址长度(Len)。
步骤S802:根据主机命令,生成前端模块命令;
具体的,前端模块(FE)从主机命令队列(SQ_HOST队列)中获取主机发送的主机命令,并解析主机命令,并将命令标识符(Ctag)、逻辑介质地址(Logical Media Address,LMA)以及要读的地址长度(Len)进行封装,生成前端模块命令,并将前端模块命令加入前端模块命令队列(SQ_FE队列);
步骤S803:闪存算法模块获取前端模块命令,解析之后查询逻辑物理对照表;
具体的,闪存算法模块(FTL)从前端模块命令队列(SQ_FE队列)中获取前端模块命令,即SQ_FE的请求,对前端模块命令进行解析之后查询逻辑物理对照表,其中,逻辑物理对照表即逻辑地址到物理地址转换的映射表;
步骤S804:判断前端模块命令是否需要拆分;
具体的,判断前端模块命令是否包括至少两个物理地址信息,若是,则确定前端模块命令需要拆分;若否,则确定前端模块命令不需要拆分。
步骤S805:闪存算法模块根据不同的物理地址拆分成不同的闪存算法模块命令;
具体的,闪存算法模块(FTL)根据不同的物理地址拆分成不同的闪存算法模块命令,即闪存操作请求(FTL请求),其中,每一物理地址一一对应一个闪存算法模块命令。在本申请实施例中,拆分出的多个不同的闪存算法模块命令对应同一个命令标识符(Ctag)。
具体的,若闪存算法模块(FTL)根据不同的物理地址拆分成不同的闪存操作请求,则为每一闪存操作请求进行编号,其中,拆分出的多个闪存操作请求作为一个组,拆分之后的每一闪存操作请求对应同一个命令标识符,并且,依次给每一闪存操作请求编组号,每一闪存操作请求的编号对应与该命令标识符对应的上下文组中的一个上下文的编号,例如:拆分成N个闪存操作请求,分别确定组内编号为0至N-1。
步骤S806:直接查询逻辑物理对照表,生成一个闪存算法模块命令;
具体的,闪存算法模块(FTL)不用拆分前端模块命令,直接查询逻辑物理对照表,生成一个闪存算法模块命令,即一个闪存操作请求(FTL请求),将该闪存操作请求编号为0。
请参阅图9,图9是本申请实施例提供的一种上下文组的示意图;
如图9所示,根据一个主机命令确定的闪存操作请求的最大数量N=1,即每一个上下文组(CTX组)只包括一个上下文,例如:Ctag 0对应的上下文组对应上下文CTXEntry 0,Ctag 1对应的上下文组对应上下文CTX Entry 1,Ctag 2对应的上下文组对应上下文CTXEntry 2,Ctag M-1对应的上下文组对应上下文CTX Entry M-1。可以理解的是,当CTX组内的CTX为1个的情况,命令标识符(Ctag)和上下文(CTX Entry)一一对应。
请再参阅图10,图10是本申请实施例提供的另一种上下文组的示意图;
如图10所示,根据一个主机命令确定的闪存操作请求的最大数量N=2,即每一个上下文组包括两个上下文,例如:Ctag 0对应的上下文组对应上下文CTX Entry 0和CTXEntry 1,Ctag 1对应的上下文组对应上下文CTX Entry 2和CTX Entry 3,Ctag M-1对应的上下文组对应上下文CTX Entry(M-1)*2和CTX Entry CTX Entry(M-1)*2+1。可以理解的是,当CTX组内的CTX为2个以上的情况,需要通过组内编号确定CTX地址,例如:当CTX组内的CTX为2个时,1个命令标识符(Ctag)有2个上下文(CTX Entry),通过Ctag号找到CTX组的首地址,并根据CTX Entry的编号确定偏移,以确定CTX地址。
步骤S807:根据命令标识符,获取上下文;
具体的,根据命令标识符(Ctag)的编号作为索引,获取上下文(CTX)。
步骤S808:获取到上下文之后,生成闪存算法模块命令,并加入闪存算法模块命令队列;
具体的,获取到上下文之后,将闪存操作请求(FTL)写入上下文,以生成闪存算法模块命令,并将闪存算法模块命令加入到闪存算法模块命令队列(SQ_FTL)。之后,由后端模块(BE)从闪存算法模块命令队列(SQ_FTL)中获取闪存算法模块命令,即获取闪存操作请求,以控制硬件模块对闪存阵列进行读/写/擦操作。
在本申请实施例中,一方面,通过为前端模块的每一命令标识符分配一个上下文组,该上下文组包括N个上下文,其中,N为根据一个主机命令确定的闪存操作请求的最大数量,并且,为每一主机命令对应一个命令标识符,使得闪存设备不需要申请回收上下文即可处理主机命令;另一方面,通过确定至少一个闪存操作请求,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入上下文,生成闪存算法模块命令,并将闪存算法模块命令发送到后端模块,以使后端模块与硬件模块进行交互,进行闪存操作,本申请能够提高闪存设备的读性能。
进一步地,本申请为了平衡内存资源和性能指标,通过上下文组和申请释放上下文混合使用。
请参阅图11,图11是本申请实施例提供的一种第一CTX区域和第二CTX区域的示意图;
如图11所示,上下文区域包括第一上下文区域(第一CTX区域)和第二上下文区域(第二CTX区域);
其中,第一CTX区域包括M个上下文(CTXEntry),编号分别为CTX Entry 0,CTXEntry 1,CTX Entry 2,……,CTX Entry M-1,其中,每一上下文一一对应一个命令标识符(Ctag),例如:M个命令标识符(Ctag),编号分别为Ctag 0,Ctag 1,Ctag 2,……,CtagM-1;其中,Ctag 0对应CTX Entry 0,Ctag 1对应CTX Entry 1,Ctag 2对应CTX Entry 2,……,CtagM-1对应CTX Entry M-1。
其中,第二CTX区域包括M个上下文(CTX Entry),编号分别为CTX Entry M,CTXEntry M+1,CTX Entry M+2,……,CTX Entry M+M-1。
请再参阅图12,图12是本申请实施例提供的另一种第一CTX区域和第二CTX区域的示意图;
如图12所示,上下文区域包括第一上下文区域(第一CTX区域)和第二上下文区域(第二CTX区域);
其中,第一CTX区域包括2M个上下文(CTX Entry),每一命令标识符(Ctag)对应两个上下文(CTX Entry),例如:Ctag 0对应CTX Entry 0和CTX Entry 1,Ctag 1对应CTXEntry 2和CTX Entry 3,Ctag(M-1)对应CTX Entry(M-1)*2和CTX Entry(M-1)*2+1。
其中,第二CTX区域包括M个上下文(CTX Entry),编号分别为CTX Entry M,CTXEntry M+1,CTX Entry M+2,……,CTX Entry M+M-1。
在本申请实施例中,拆分因子用于表征前端模块命令拆分出的闪存操作请求的数量,例如:若拆分因子为1,则意味着前端模块命令拆分出的闪存操作请求只有一个;若拆分因子大于1,则意味着前端模块命令拆分出的闪存操作请求至少有两个。可以理解的是,拆分因子为正整数。其中,第一CTX区域用于处理不需要拆分的前端模块命令,即拆分因子=1的前端模块命令;第二CTX区域用于处理需要拆分的前端模块命令,即拆分因子≥2的前端模块命令。
具体的,请参阅图13,图13是本申请实施例提供的一种上下文组和申请释放上下文混合使用的流程示意图;
如图13所示,该上下文组和申请释放上下文混合使用的流程,包括:
步骤S1301:划分第一上下文区域和第二上下文区域,其中,第一上下文区域和第二上下文区域均包括至少M个命令标识符,M为并发的主机命令的数量;
具体的,将上下文区域划分为第一上下文区域(第一CTX区域)和第二上下文区域(第二CTX区域),其中,第一CTX区域用于处理不需要拆分的前端模块命令,第二CTX区域用于处理需要拆分的前端模块命令。
步骤S1302:根据前端模块命令的IO请求类型,确定IO请求类型对应的上下文区域;
具体的,IO请求类型包括第一请求类型和第二请求类型,根据前端模块命令的IO请求类型,确定IO请求类型对应的上下文区域,包括:
若前端模块命令的IO请求类型为第一请求类型,则确定IO请求类型对应的上下文区域为第一上下文区域;
若前端模块命令的IO请求类型为第二请求类型,则确定IO请求类型对应的上下文区域为第二上下文区域,其中,第一请求类型的拆分因子为一,第二请求类型的拆分因子大于一。
具体的,第一请求类型的拆分因子为一,意味着前端模块命令拆分出的闪存操作请求只有一个,此时确定IO请求类型对应的上下文区域为第一上下文区域;第二请求类型的拆分因子大于一,则意味着前端模块命令拆分出的闪存操作请求至少有两个,此时确定IO请求类型对应的上下文区域为第二上下文区域。
步骤S1303:若确定IO请求类型对应的上下文区域为第一上下文区域,则在第一上下文区域中获取上下文,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入第一上下文区域的上下文;
具体的,若确定IO请求类型对应的上下文区域为第一上下文区域,即前端模块命令拆分出的闪存操作请求只有一个,此时在第一上下文区域中获取上下文,并将每一闪存操作请求一一对应上下文组中的一个上下文,将闪存操作请求写入第一上下文区域的上下文。
其中,在第一上下文区域中获取上下文,包括:
确定前端模块命令对应的一个闪存操作请求;
根据前端模块命令对应的命令标识符,从上下文组中获取与命令标识符对应的上下文。
如图11所示,在第一CTX区域中,根据前端模块命令对应的命令标识符(Ctag),确定与命令标识符(Ctag)对应的上下文(CTXEntry)。
步骤S1304:若确定IO请求类型对应的上下文区域为第二上下文区域,则在第二上下文区域中动态申请上下文,将闪存操作请求写入第二上下文区域的上下文。
具体的,若确定IO请求类型对应的上下文区域为第二上下文区域,即前端模块命令拆分出的闪存操作请求至少有两个,此时在第二上下文区域中动态申请上下文,将每一闪存操作请求写入一一对应的上下文。
其中,在第二上下文区域中动态申请上下文,包括:
判断当前可用的上下文是否满足第一条件;
具体的,第一条件指的是至少两个闪存操作请求需要的上下文的数量小于或等于当前可用的上下文的数量。
若是,则依次申请至少两个上下文,以满足至少两个闪存操作请求;
若否,则暂缓申请上下文,等待上下文的释放,直至上下文释放到满足第一条件。
可以理解的是,闪存算法模块(FTL)下发给(后端模块BE)的请求CTX(上下文)是并发操作,所以FTL会有很多个请求,对应每一笔的NAND操作的信息,而CTX的维护是靠FTL申请和释放的,当并发很多的时候,就有可能等待CTX资源的回收再分配。
如图11所示,在第二CTX区域中,包括M个上下文(CTXEntry),分别为CTX Entry M至CTX Entry M+M-1,其中,CTX的申请和释放由2个标识记录,分别为空闲标识(Free Note)和总数标识(Free Cnt),其中,空闲标识(Free Note)用于记录哪个位置的上下文(CTXEntry)是空闲的,即可以拿来用的,总数标识(Free Cnt)用于标识剩余的可用上下文的数量。
在申请上下文(CTX)时,获取空闲标识(Free Note)指定的位置的上下文(CTXEntry),例如:Entry Index P指向的CTX Entry来用,然后空闲标识(Free Note)往左移动一个,指向队列前面的空闲的上下文(Free CTXEntry),总数标识(Free Cnt)减1,然后根据Entry Index P来索引找到CTX Entry并填入闪存操作请求,传递请求消息给后端模块(BE)时,也只需要将上下文的指针(Entry Index)传递给闪存算法模块命令队列(SQ_FTL)即可。可以理解的是,上下文的指针(Entry Index)是为了让后端模块(BE)知道是第几个上下文(CTXEntry),从而后端模块(BE)也会根据不同的CTX Index来并发构建自己的CTXEntry;用于进行并发处理。
在释放上下文(CTX)时,当后端模块(BE)完成并推送完成消息到闪存算法模块完成队列(CQ_FTL),此时,闪存算法模块(FTL)从闪存算法模块完成队列(CQ_FTL)里取出完成消息,用以释放对应的CTX Entry(Entry Index P),总数标识(Free Cnt)加1,空闲标识(Free Note)往右移动以指向这个刚释放的Entry Index P。
具体的,判断当前可用的上下文是否满足第一条件,包括:
确定前端模块命令对应的至少两个闪存操作请求;
判断至少两个闪存操作请求需要的上下文的数量是否小于或等于当前可用的上下文的数量;
具体的,根据总数标识(Free Cnt),判断至少两个闪存操作请求需要的上下文是否小于或等于总数标识(Free Cnt);
若是,则确定当前可用的上下文满足第一条件;
若否,则确定当前可用的上下文不满足第一条件。
请再参阅图14,图14是本申请实施例提供的一种命令处理方法的整体流程图;
如图14所示,该命令处理方法的整体流程,包括:
步骤S1401:获取主机发送的主机命令;
具体的,主机(Host)发送主机命令,将主机命令加入到主机命令队列(SQ_HOST队列),前端模块(FE)从主机命令队列(SQ_HOST队列)中获取主机发送的主机命令,例如:FE获取Host发送的读操作,其中,该主机命令包括:主机命令的标识(Cmd ID)、逻辑块地址(Logical Block Address,Lba)以及要读的地址长度(Len)。
步骤S1402:根据主机命令,生成前端模块命令;
具体的,前端模块(FE)从主机命令队列(SQ_HOST队列)中获取主机发送的主机命令,并解析主机命令,并将命令标识符(Ctag)、逻辑介质地址(Logical Media Address,LMA)以及要读的地址长度(Len)进行封装,生成前端模块命令,并将前端模块命令加入前端模块命令队列(SQ_FE队列);
步骤S1403:闪存算法模块获取前端模块命令,解析之后查询逻辑物理对照表;
具体的,闪存算法模块(FTL)从前端模块命令队列(SQ_FE队列)中获取前端模块命令,即SQ_FE的请求,对前端模块命令进行解析之后查询逻辑物理对照表,其中,逻辑物理对照表即逻辑地址到物理地址转换的映射表;
步骤S1404:判断前端模块命令是否需要拆分;
具体的,判断前端模块命令是否包括至少两个物理地址信息,若是,则确定前端模块命令需要拆分;若否,则确定前端模块命令不需要拆分。
步骤S1405:闪存算法模块根据不同的物理地址拆分成不同的闪存操作请求;
具体的,闪存算法模块(FTL)根据不同的物理地址拆分成不同的闪存算法模块命令,即闪存操作请求(FTL请求),其中,每一物理地址一一对应一个闪存算法模块命令。在本申请实施例中,拆分出的多个不同的闪存算法模块命令对应同一个命令标识符(Ctag)。
具体的,若闪存算法模块(FTL)根据不同的物理地址拆分成不同的闪存操作请求,则为每一闪存操作请求进行编号,其中,拆分出的多个闪存操作请求作为一个组,拆分之后的每一闪存操作请求对应同一个命令标识符,并且,依次给每一闪存操作请求编组号,每一闪存操作请求的编号对应与该命令标识符对应的上下文组中的一个上下文的编号,例如:拆分成N个闪存操作请求,分别确定组内编号为0至N-1。
步骤S1406:闪存算法模块直接查询逻辑物理对照表,生成一个闪存操作请求;
具体的,闪存算法模块(FTL)不用拆分前端模块命令,直接查询逻辑物理对照表,生成一个闪存算法模块命令,即一个闪存操作请求(FTL请求),将该闪存操作请求编号为0。
步骤S1407:根据闪存操作请求的数量,在第二上下文区域中申请上下文;
具体的,闪存算法模块根据闪存操作请求的数量,在第二上下文区域,即CTX M到2M-1的范围内,准备申请上下文资源(CTX);
步骤S1408:判断上下文资源是否不足;
具体的,判断第二上下文区域中的当前可用的上下文的数量是否大于闪存操作请求的数量;
具体的,根据总数标识(Free Cnt),判断至少两个闪存操作请求需要的上下文是否小于或等于总数标识(Free Cnt);
若是,则进入步骤S1410:暂缓申请上下文,等待上下文的释放;
若否,则进入步骤S1409:依次申请多个上下文,并生成闪存算法模块命令;
步骤S1409:依次申请多个上下文,并生成闪存算法模块命令;
具体的,依次申请到多个上下文(CTX)之后,填入闪存操作请求的对应信息,并生成闪存算法模块命令,将该闪存算法模块命令加入到闪存算法模块命令队列(SQ_FTL)。
步骤S1410:暂缓申请上下文,等待上下文的释放;
具体的,暂缓该IO请求操作,下次继续处理。
步骤S1411:根据命令标识符的编号,从第一上下文区域中获取上下文;
具体的,根据Ctag号为索引,在第一上下文区域,即CTX 0到CTXM的范围内,直接获取到上下文(CTX)。
步骤S1412:将一个闪存操作请求写入上下文,生成闪存算法模块命令;
具体的,申请到CTX资源之后,填入闪存操作请求的对应信息,并生成闪存算法模块命令,将该闪存算法模块命令加入到闪存算法模块命令队列(SQ_FTL)。
在本申请实施例中,由于第一上下文区域和第二上下文区域都能覆盖到所有前端模块(FE)的M个并发的命令标识符(Ctag),针对不需要拆分的IO请求,即拆分因子=1的IO请求,闪存算法模块(FTL)直接采用命令标识符(Ctag)索引去在0-M个的第一上下文区域中快速获取,不用申请释放。针对需要拆分的IO请求,即拆分因子大于1的IO请求,则在第二上下文区域的M到(2M-1)个CTX之间进行动态申请释放的管理策略,使得拆分因子=1的非拆分读能够实现快速响应,从而提高读性能。
本申请实施例还提供了一种非易失性计算机存储介质,计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如上述一个或多个处理器可执行上述任意方法实施例中的命令处理方法,例如,执行上述任意方法实施例中的命令处理方法,例如,执行以上描述的各个步骤。
以上所描述的装置或设备实施例仅仅是示意性的,其中作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上的本申请的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (10)
1.一种命令处理方法,其特征在于,应用于闪存设备,所述闪存设备包括前端模块、闪存算法模块以及后端模块,所述方法包括:
为所述前端模块的每一命令标识符分配一个上下文组,其中,每一上下文组包括N个上下文,其中,N为根据一个主机命令确定的闪存操作请求的最大数量;
当所述前端模块接收到主机发送的至少一个主机命令之后,将每一所述主机命令一一对应一个命令标识符,生成前端模块命令,并转发所述前端模块命令到所述闪存算法模块;
当所述闪存算法模块接收到所述前端模块命令之后,根据所述前端模块命令,确定至少一个闪存操作请求,并将每一所述闪存操作请求一一对应所述上下文组中的一个上下文,将所述闪存操作请求写入所述上下文,生成闪存算法模块命令,并将所述闪存算法模块命令发送到所述后端模块,以使后端模块与硬件模块进行交互,进行闪存操作。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:确定根据一个主机命令确定的闪存操作请求的最大数量N,具体包括:
根据所述主机命令对应的逻辑地址,查询逻辑物理映射表;
根据逻辑地址中的数据存储在闪存介质中的物理地址,对处于同一个物理地址的数据,分配一个上下文,以确定最大数量N。
3.根据权利要求1所述的方法,其特征在于,所述根据所述前端模块命令,确定至少一个闪存操作请求,包括:
判断所述前端模块命令是否需要拆分;
若是,则根据所述前端模块命令的至少两个物理地址信息,拆分成至少两个闪存操作请求;
若否,则确定为一个闪存操作请求。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
为每一闪存操作请求进行编号,其中,拆分之后的每一闪存操作请求对应同一个命令标识符,并且,每一闪存操作请求的编号对应与该命令标识符对应的上下文组中的一个上下文的编号。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
划分第一上下文区域和第二上下文区域,其中,所述第一上下文区域和第二上下文区域均包括至少M个命令标识符,M为并发的主机命令的数量;
根据所述前端模块命令的IO请求类型,确定所述IO请求类型对应的上下文区域;
若确定所述IO请求类型对应的上下文区域为第一上下文区域,则在所述第一上下文区域中获取上下文,并将每一所述闪存操作请求一一对应所述上下文组中的一个上下文,将所述闪存操作请求写入所述第一上下文区域的上下文;
若确定所述IO请求类型对应的上下文区域为第二上下文区域,则在所述第二上下文区域中动态申请上下文,将所述闪存操作请求写入所述第二上下文区域的上下文。
6.根据权利要求5所述的方法,其特征在于,所述IO请求类型包括第一请求类型和第二请求类型,所述根据所述前端模块命令的IO请求类型,确定所述IO请求类型对应的上下文区域,包括:
若所述前端模块命令的IO请求类型为第一请求类型,则确定所述IO请求类型对应的上下文区域为第一上下文区域;
若所述前端模块命令的IO请求类型为第二请求类型,则确定所述IO请求类型对应的上下文区域为第二上下文区域,其中,所述第一请求类型的拆分因子为一,所述第二请求类型的拆分因子大于一。
7.根据权利要求5或6所述的方法,其特征在于,所述在所述第一上下文区域中获取上下文,包括:
确定所述前端模块命令对应的一个闪存操作请求;
根据所述前端模块命令对应的命令标识符,从所述上下文组中获取与所述命令标识符对应的上下文。
8.根据权利要求6所述的方法,其特征在于,所述在所述第二上下文区域中动态申请上下文,包括:
判断当前可用的上下文是否满足第一条件;
若是,则依次申请至少两个上下文,以满足至少两个闪存操作请求;
若否,则暂缓申请上下文,等待上下文的释放,直至上下文释放到满足第一条件。
9.根据权利要求8所述的方法,其特征在于,所述判断当前可用的上下文是否满足第一条件,包括:
确定所述前端模块命令对应的至少两个闪存操作请求;
判断至少两个所述闪存操作请求需要的上下文的数量是否小于或等于当前可用的上下文的数量;
若是,则确定当前可用的上下文满足第一条件;
若否,则确定当前可用的上下文不满足第一条件。
10.一种闪存设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够用于执行如权利要求1-9中任一项所述的命令处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111509270.1A CN114296639B (zh) | 2021-12-10 | 2021-12-10 | 命令处理方法及闪存设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111509270.1A CN114296639B (zh) | 2021-12-10 | 2021-12-10 | 命令处理方法及闪存设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114296639A true CN114296639A (zh) | 2022-04-08 |
CN114296639B CN114296639B (zh) | 2024-02-20 |
Family
ID=80966758
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111509270.1A Active CN114296639B (zh) | 2021-12-10 | 2021-12-10 | 命令处理方法及闪存设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114296639B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034454A (zh) * | 2011-07-14 | 2013-04-10 | Lsi公司 | 柔性闪存命令 |
CN105556497A (zh) * | 2013-09-10 | 2016-05-04 | 高通股份有限公司 | 查明闪存中的命令完成 |
US20170132245A1 (en) * | 2015-11-05 | 2017-05-11 | International Business Machines Corporation | Storage controller and method for managing a solid-state memory |
CN107481762A (zh) * | 2017-08-29 | 2017-12-15 | 郑州云海信息技术有限公司 | 一种固态硬盘的trim处理方法及装置 |
CN107851139A (zh) * | 2015-08-07 | 2018-03-27 | 高通股份有限公司 | 用于图形处理单元的硬件强制内容保护 |
CN109002265A (zh) * | 2018-07-26 | 2018-12-14 | 浪潮电子信息产业股份有限公司 | 一种数据处理的方法以及相关装置 |
US20190243773A1 (en) * | 2018-02-07 | 2019-08-08 | Alibaba Group Holding Limited | Method and system for user-space storage i/o stack with user-space flash translation layer |
US20190303314A1 (en) * | 2016-12-21 | 2019-10-03 | Huawei Technologies Co., Ltd. | Flash Interface Controller And Operation Command Processing Method |
CN111796771A (zh) * | 2020-06-30 | 2020-10-20 | 深圳大普微电子科技有限公司 | 闪存控制器、固态硬盘及其控制器、闪存命令管理方法 |
CN112035381A (zh) * | 2020-09-29 | 2020-12-04 | 深圳大普微电子科技有限公司 | 一种存储系统及存储数据处理方法 |
CN113741991A (zh) * | 2021-11-04 | 2021-12-03 | 苏州浪潮智能科技有限公司 | 提升ssd服务质量方法、装置、计算机设备和存储介质 |
-
2021
- 2021-12-10 CN CN202111509270.1A patent/CN114296639B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034454A (zh) * | 2011-07-14 | 2013-04-10 | Lsi公司 | 柔性闪存命令 |
CN105556497A (zh) * | 2013-09-10 | 2016-05-04 | 高通股份有限公司 | 查明闪存中的命令完成 |
CN107851139A (zh) * | 2015-08-07 | 2018-03-27 | 高通股份有限公司 | 用于图形处理单元的硬件强制内容保护 |
US20170132245A1 (en) * | 2015-11-05 | 2017-05-11 | International Business Machines Corporation | Storage controller and method for managing a solid-state memory |
US20190303314A1 (en) * | 2016-12-21 | 2019-10-03 | Huawei Technologies Co., Ltd. | Flash Interface Controller And Operation Command Processing Method |
CN107481762A (zh) * | 2017-08-29 | 2017-12-15 | 郑州云海信息技术有限公司 | 一种固态硬盘的trim处理方法及装置 |
US20190243773A1 (en) * | 2018-02-07 | 2019-08-08 | Alibaba Group Holding Limited | Method and system for user-space storage i/o stack with user-space flash translation layer |
CN109002265A (zh) * | 2018-07-26 | 2018-12-14 | 浪潮电子信息产业股份有限公司 | 一种数据处理的方法以及相关装置 |
CN111796771A (zh) * | 2020-06-30 | 2020-10-20 | 深圳大普微电子科技有限公司 | 闪存控制器、固态硬盘及其控制器、闪存命令管理方法 |
CN112035381A (zh) * | 2020-09-29 | 2020-12-04 | 深圳大普微电子科技有限公司 | 一种存储系统及存储数据处理方法 |
CN113741991A (zh) * | 2021-11-04 | 2021-12-03 | 苏州浪潮智能科技有限公司 | 提升ssd服务质量方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114296639B (zh) | 2024-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11093177B2 (en) | Virtualized OCSSDs spanning physical OCSSD channels | |
US10761731B2 (en) | Array controller, solid state disk, and method for controlling solid state disk to write data | |
CN109725846B (zh) | 存储器系统及控制方法 | |
EP2849076B1 (en) | Dma transmission method and system | |
US9395921B2 (en) | Writing data using DMA by specifying a buffer address and a flash memory address | |
US20180081565A1 (en) | Data Access Method and Related Apparatus and System | |
KR102077149B1 (ko) | 메모리 관리 방법 및 장치 | |
US20200334082A1 (en) | Processing system for scheduling and distributing tasks and its acceleration method | |
KR101579941B1 (ko) | 가상머신 i/o 관리 방법 및 장치 | |
CN109753231A (zh) | 键值存储设备及操作其的方法 | |
WO2016056140A1 (ja) | インターフェースデバイス、及びインターフェースデバイスを含む計算機システム | |
CN106126124A (zh) | 一种数据处理方法及电子设备 | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
JP5969122B2 (ja) | ホストバスアダプタおよびシステム | |
US20240241644A1 (en) | Storage device and storage system | |
US11301297B2 (en) | Processing system for dispatching tasks and memory access method thereof | |
CN114780448A (zh) | 数据快速拷贝的方法、装置、计算机设备及存储介质 | |
CN113485643B (zh) | 用于数据存取的方法及数据写入的控制器 | |
CN107924363B (zh) | 使用存储器管理单元的自动化存储器管理 | |
CN113918087B (zh) | 存储装置以及用于管理存储装置中的命名空间的方法 | |
CN116340198B (zh) | 固态硬盘的数据写入方法、其装置及固态硬盘 | |
CN116302105B (zh) | 访问指令调度方法、系统、硬盘及控制器、存储介质和程序产品 | |
CN115586943B (zh) | 一种智能网卡虚拟机脏页的硬件标记实现方法 | |
CN114296639A (zh) | 命令处理方法及闪存设备 | |
US11644991B2 (en) | Storage device and control method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |