CN116185891A - 描述符管理方法 - Google Patents
描述符管理方法 Download PDFInfo
- Publication number
- CN116185891A CN116185891A CN202310471467.3A CN202310471467A CN116185891A CN 116185891 A CN116185891 A CN 116185891A CN 202310471467 A CN202310471467 A CN 202310471467A CN 116185891 A CN116185891 A CN 116185891A
- Authority
- CN
- China
- Prior art keywords
- descriptor
- task
- descriptors
- chain
- flash memory
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种描述符管理方法,涉及闪存技术领域。描述符管理方法包括以下步骤:CPU创建描述符,并将描述符写入系统缓存,并将由多条描述符所形成的描述符链的首地址写入描述符读取器的进入寄存器;进入寄存器为每条描述符链分配对应的第一标识号、以及为每条描述符链内的每条描述符分配对应的第二标识号;获取模块根据描述符链的首地址,将描述符链中的多条描述符从系统缓存读出,并将多条描述符发送至闪存控制器;闪存控制器对描述符进行调度和解析,形成控制指令,并根据控制指令,执行对闪存颗粒的访问操作;状态寄存器组记录每条描述符链以及每条描述符链内的每条描述符的完成状态。根据本发明的描述符管理方法,便于对描述符的管理。
Description
技术领域
本发明涉及闪存技术领域,尤其是涉及一种描述符管理方法。
背景技术
在传统的Nand Flash控制器设计中,CPU通过直接配置寄存器的方式来控制和驱动硬件对Nand Flash颗粒的访问操作,比如通过Nand IO发送命令、地址以及进行数据读写操作,并指挥控制器的DMA模块往系统缓存搬移数据等。软件几乎参与了Nand Flash控制器每一个具体任务的控制和指挥,需要对大量寄存器进行繁琐的配置,给CPU带来较重的负载和开销,成为进一步提升性能和能效的阻碍。
发明内容
本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出了一种描述符管理方法,能够通过描述符访问闪存颗粒,降低CPU的负担和开销,并便于对描述符进行管理和追踪。
根据本发明实施例的描述符管理方法,包括以下步骤:
CPU创建描述符,并将所述描述符写入系统缓存,并将由多条所述描述符所形成的描述符链的首地址写入描述符读取器的进入寄存器;所述描述符读取器包括所述进入寄存器、获取模块及状态寄存器组;
所述进入寄存器为每条所述描述符链分配对应的第一标识号、以及为每条所述描述符链内的每条所述描述符分配对应的第二标识号;
所述获取模块根据所述描述符链的首地址,将所述描述符链中的多条所述描述符从所述系统缓存读出,并将多条所述描述符发送至闪存控制器;
所述闪存控制器对所述描述符进行调度和解析,形成控制指令,并根据所述控制指令,执行对闪存颗粒的访问操作;
所述状态寄存器组记录每条所述描述符链以及每条所述描述符链内的每条所述描述符的完成状态。
根据本发明的一些实施例,所述进入寄存器还记载有状态信息,所述状态信息用于表征所述进入寄存器处于空闲状态或是繁忙状态,当所述进入寄存器处于空闲状态时,所述CPU才能往所述进入寄存器写入新的描述符链的首地址。
根据本发明的一些实施例,所述描述符管理方法还包括以下步骤:
所述CPU读取所述状态寄存器组,获取所述描述符链以及所述描述符链内的每条所述描述符的完成状态。
根据本发明的一些实施例,所述描述符管理方法还包括以下步骤:
所述闪存控制器将所述描述符链的所述第一标识号和完成状态、以及所述描述符链内的每条所述描述符的第二标识号和完成状态,更新到所述系统缓存中的指定地址。
根据本发明的一些实施例,所述闪存控制器包括描述符队列、任务调度器、任务解析器、执行单元和挂起等待区;所述闪存控制器对所述描述符进行调度和解析,形成控制指令,并根据所述控制指令,执行对闪存颗粒的访问操作的步骤,具体包括:
所述描述符队列获取所述获取模块发送的多条所述描述符;所述描述符包括OPCODE指针、CE/LUN信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;
所述任务调度器将所述描述符队列中符合调度条件的所述描述符调度出来;
所述任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;
所述执行单元根据所述多个控制指令,执行对闪存颗粒的访问操作;
当所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描述符存放在所述挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他CE/LUN的描述符,然后返回所述任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的这一步骤。
根据本发明的一些实施例,所述描述符队列包括头指针和尾指针,当有描述符进入所述描述符队列时,所述尾指针加1,当有描述符离开所述描述符队列时,所述头指针加1;当所述描述符处于所述头指针指向的单元,且所述描述符完成所有的调度和解析任务后,所述描述符离开所述描述符队列。
根据本发明的一些实施例,所述任务调度器将所述描述符队列中符合条件的所述描述符调度出来的步骤之后,还包括以下步骤:
所述任务调度器根据调度出来的所述描述符的所述OPCODE指针,从OPCODE表中查找对应的任务序列,并将所述任务序列及所述描述符发送给所述任务解析器。
根据本发明的一些实施例,所述任务序列包括DMA启动类型、挂起等待类型、FCU指令类型和结束类型这四种类型的任务中的一种或多种;所述任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的步骤,包括:
若任务的类型为DMA启动类型,所述任务解析器解析所述描述符,产生RDMA或者WDMA启动指令;
或者,若任务的类型为挂起等待类型,所述任务解析器将所述描述符存放到所述挂起等待区,并暂停所述描述符的后续解析动作;
或者,若任务的类型为FCU指令类型,所述任务解析器根据所述任务读取命令表中的参数和命令集,并根据所述参数和命令集产生访问闪存颗粒的指令;
或者,若任务的类型为结束类型,所述任务解析器产生用于更新描述符状态到所述系统缓存的指定位置的指令,并结束整个描述符的解析任务。
根据本发明的一些实施例,所述挂起等待区记载了存放在所述挂起等待区的所述描述符对应的CE/LUN的挂起状态、所述描述符的挂起退出条件、以及所述OPCODE表中的所述任务序列挂起时的位置。
根据本发明的一些实施例,所述闪存控制器对所述描述符进行调度和解析,形成控制指令,并根据所述控制指令,执行对闪存颗粒的访问操作的步骤,还包括以下步骤:
当所述执行单元反馈满足挂起退出条件的信号时,所述任务调度器在空闲时将所述挂起等待区的所述描述符调度出来,并发送至所述任务解析器,进行后续的解析工作。
根据本发明实施例的描述符管理方法,至少具有如下有益效果:采用了基于描述符来实现Nand Flash访问的方式,描述符的任务调度和解析工作全部由硬件模块来执行,从而可以大幅降低软件的开销和CPU负担。同时,通过对每条描述符链分配唯一的第一标识号,对每条描述符分配唯一的第二标识号,能够实现对每个描述符的完成状态进行实时追踪和管理,在出错时能够知道出错的硬件模块和哪个具体的描述符有关,从而方便进行调试和分析。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的描述符管理方法的步骤流程图;
图2为本发明实施例的描述符管理系统的结构示意图;
图3为本发明实施例的描述符的结构示意图;
图4为本发明实施例的描述符链的结构示意图;
图5为本发明实施例的描述符读取器的结构示意图;
图6为本发明实施例的闪存控制器的结构示意图;
图7为本发明实施例的ROM和SRAM的结构示意图。
具体实施方式
本部分将详细描述本发明的具体实施例,本发明之较佳实施例在附图中示出,附图的作用在于用图形补充说明书文字部分的描述,使人能够直观地、形象地理解本发明的每个技术特征和整体技术方案,但其不能理解为对本发明保护范围的限制。
在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
本发明的描述中,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。
Nand Flash:Flash指闪存,是一种可用电快速擦除和编程的非易失性存储器,Flash从芯片工艺上可以分为Nor Flash和Nand Flash两大类。Nand Flash存储器是Flash存储器的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand Flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储,因而在业界得到了越来越广泛的应用,如嵌入式产品中包括数码相机、MP3随身听记忆卡、体积小巧的U盘等。
DMA:Direct Memory Access,直接内存访问,是一些计算机总线架构提供的功能,它能使数据从附加设备直接发送到计算机主板的内存上。
OPCODE:Operation Code,操作码,被用于描述机器语言指令中,指定要执行某种操作的那部分机器码,构成OPCODE的指令格式和规范由处理器指定。
eMMC:Embedded Multi Media Card,嵌入式多媒体卡,是MMC协会订立、主要针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC是一种嵌入式、非易失的存储系统,它主要由闪存、描述符管理方法和eMMC协议接口等组成,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具有体积小、功耗低、容量大等优点,非常适合作为智能手机、平板电脑、移动互联网设备等电子设备的存储介质。
UFS:Universal Flash storage,通用闪存存储,是一种设计用于数码相机、智能手机等消费电子产品使用的闪存存储规范。它的设计目标是发展一套统一的快闪存储卡格式,在提供高数据传输速度和稳定性的同时,也可以减少消费者对于市面上各种存储卡格式的混淆和不同存储卡转接器的使用。
SSD:Solid State Disk,固态硬盘,又称固态驱动器,是用固态电子存储芯片阵列制成的硬盘。
SRAM:Static Random-Access Memory,静态随机存取存储器,是随机存取存储器的一种。这种存储器只要保持通电,里面储存的数据就可以恒常保持。
DDR:Double Data Rate,双倍速率同步动态随机存储器。
在传统的Nand Flash控制器的设计中,CPU通过直接配置寄存器的方式来控制和驱动硬件对Nand Flash颗粒的访问操作,比如通过Nand IO发送命令、地址以及进行数据读写操作,并指挥控制器的DMA模块往系统缓存搬移数据等。软件几乎参与了Nand Flash控制器每一个具体任务的控制和指挥,需要对大量寄存器进行繁琐的配置,给CPU带来较重的负载和开销,成为进一步提升性能和能效的阻碍。
为此,我们采用了基于描述符来实现NAND Flash访问的方式,描述符的调度和解析工作,全部由硬件模块执行,相较于传统的通过CPU直接配置描述符管理方法的内部寄存器来驱动硬件对Nand Flash颗粒(下称闪存颗粒)的访问方式,在此方式中,软件层只需要在很高的抽象层级来构建描述符,基本无需过多关心描述符管理方法内部的硬件实现细节,大幅降低了软件的开销和CPU的负担;同时,该方式还能够对每个描述符的完成状态来进行实时追踪和管理,在出错时能够知道出错的硬件模块和哪个具体的描述符有关,从而方便进行调试和分析。
下面参照图1至图6,详细阐述本发明实施例的描述符管理方法。
如图1所示,根据本发明实施例的描述符管理方法,包括以下步骤:
步骤S100:CPU创建描述符,并将所述描述符写入系统缓存,并将由多条所述描述符所形成的描述符链的首地址写入描述符读取器的进入寄存器;如图2所示,描述符读取器包括进入寄存器(Entry)、获取模块(Fetch)及状态寄存器组(Status);
步骤S200:所述进入寄存器为每条所述描述符链分配对应的第一标识号(即描述符链ID)、以及为每条所述描述符链内的每条所述描述符分配对应的第二标识号(即描述符ID);
步骤S300:所述获取模块根据所述描述符链的首地址,将所述描述符链中的多条所述描述符从所述系统缓存读出,并将多条所述描述符发送至闪存控制器;
步骤S400:所述闪存控制器对所述描述符进行调度和解析,形成控制指令,并根据所述控制指令,执行对闪存颗粒的访问操作;
步骤S500:所述状态寄存器组记录每条所述描述符链以及每条所述描述符链内的每条所述描述符的完成状态。
具体地,描述符是软件层通过CPU构建的数据结构,用来描述对闪存(Nand Flash)的访问任务,比如Block的擦除(Block:块,闪存的最小擦除单元,闪存由多个Block构成)和Nand Page的读写等(Page:页,闪存中能够读取和写入的最小单位,一个Block包含多个Page),可以由一个描述符或者多个描述符来实现任意一种常见的访问操作,软件通过灵活的方式来创建不同的描述符适配各种场景需要。
如图3所示,在本发明的一些实施例中,一个描述符由多个域构成,分别为OPCODE指针、CE/LUN信息、闪存颗粒地址信息(Nand Flash地址)、系统缓存地址、硬件控制信息和下条描述符地址。其中,OPCODE指针是下文要介绍的OPCODE表的索引号,闪存控制器的任务调度器将根据此指针从OPCODE表中查找对应的任务序列来调度并发送到后续模块进行解析和执行。CE/LUN信息指的是描述符里面需要指定被访问的闪存颗粒的CE、LUN信息,每个Nand Flash可以有多个CE(独立片选单元),每个CE下可以有多个LUN(Logical UnitNumber,逻辑单元号,LUN是闪存内可执行命令并回报自身状态的最小独立单元)。NandFlash地址是指描述符还需要指定被访问的闪存颗粒的地址(Block、Page地址等)。系统缓存地址指描述符需要指定系统缓存地址,比如对于Nand Flash的读操作,硬件需要把数据从Nand Flash颗粒的某个Page读出后搬移到系统缓存的目的地址。此外,描述符中还可以增加硬件控制信息,用于指导硬件按照软件要求的方式去灵活执行,以满足不同应用场景的需要。最后,如图4所示,描述符通常以链的形式出现,描述符链包括多条描述符,因此描述符里面还指定了下条描述符在系统缓存中所在的位置。
如图2所示,根据本发明实施例的描述符管理方法,软件通过CPU创建描述符后,将描述符写入系统缓存中(eMMC和UFS类型的控制器芯片可以用SRAM来做系统缓存,SSD也可用DDR来做系统缓存),并把多个描述符所组成的描述符链的首地址写入描述符读取器的Entry寄存器,Fetch模块按照这个首地址把描述符链的描述符一个个读出并送到闪存控制器进行解析和执行。需要说明的是,本设计支持一到多个Nand Flash通道方案,每个通道对应一个闪存控制器,在图2中只示出了两个闪存控制器。
当CPU构建一条描述符链后,通常需要追踪整条描述符链甚至描述符链中每个描述符的执行状态来进行管理,从而能够了解描述符链的所有描述符是否执行完成,另外在出错时也能够知道出错的硬件模块和哪个具体的描述符有关,从而方便调试和分析。因此,我们需要给每个正在运行的描述符链分配一个唯一的ID号(即第一标识号),描述符链中每个描述符也分配一个唯一的ID号(即第二标识号)。
描述符链ID由图5中示出的描述符读取器产生,如图5所示,描述符读取器包括进入寄存器(Entry)、获取模块(Fetch)及状态寄存器组(Status);而进入寄存器又由STA标志位、描述符链ID和描述符链首地址构成,其中STA用于表示进入寄存器的状态信息,状态信息用于表征进入寄存器处于空闲状态(idle)或是繁忙状态(busy),当CPU要写入新的描述符链的首地址到进入寄存器时,CPU需要先读取进入寄存器的STA标志位,只有在STA为idle情况下,才允许CPU把新的描述符链的首地址写入进入寄存器。CPU在读取STA时,也同时获得了描述符链的ID,在每执行一次写入描述符链的首地址的操作后该ID自动加1,以此方式CPU可以获取每一条描述符链的ID。此外,描述符读取器也会给描述符链中的每个描述符分配一个唯一的ID,每读取一条描述符后该ID自动加1。描述符读取器的Status状态寄存器组用来表示描述符链中每个描述符的完成状态,以及整个描述符链的完成状态。CPU根据读取进入寄存器时获取的描述符链的ID读取相应的status寄存器,便可以获知每条描述符链和每条描述符的执行状态。
此外,描述符链和描述符的ID不仅可用于描述符读取器,从而方便软件层的管理,还可以跟随描述符送入Nand Flash控制器(即闪存控制器)的每个模块,在硬件出错挂死时,CPU通过读取闪存控制器的内部信号状态寄存器可以知道出错的地方和哪个对应的描述符的执行直接相关,便于快速的分析问题。最后,描述符链的ID和描述符的ID可以和描述符状态一起更新到系统缓存中的指定地址,更加方便追踪和管理。
如图6所示,在本发明的一些实施例中,闪存控制器由前级模块和后级模块构成,其中前级模块用于对描述符进行任务调度和解析,然后将控制指令发往后级模块执行,可以理解为前级模块为控制中枢,后级模块为执行单元,前级模块发送控制指令来控制和指挥后级模块的运行。
其中,前级模块包括描述符队列、任务调度器、任务解析器和挂起等待区。描述符读取器从系统缓存中读取描述符后,首先送往描述符队列中等待,这个队列可以存储多条描述符,给任务调度器实现多CE/LUN并行访问提供发挥的空间。任务调度器在空闲的时候从描述符队列中选择符合调度条件的候选描述符,并将其调度出来,送往任务解析器进行解析,解析后生成的控制指令发往后级模块/执行单元对应的硬件单元(FCU,WDMA,RDMA)来执行。其中,FCU是指Flash Control Unit,闪存控制单元;WDMA是指Write DMA,写DMA;RDMA是指Read DMA,读DMA。
任务调度器依赖OPCODE表来完成工作,OPCODE表存储了大量不同的任务序列组合来提供给软件创建描述符时来使用,每个描述符中的OPCODE指针指向OPCODE表中特定的任务序列,用来实现对闪存的不同访问操作。
任务解析器在解析产生发往执行单元的控制指令时,通常需要在命令表的协助下完成工作,解析生成的指令包括通过FCU和Nand IO对Nand颗粒的访问操作(如发送命令、地址以及执行数据读写操作、擦除和状态查询等)、RDMA和WDMA的启动指令、以及更新描述符状态到系统缓存的指令等。
对于描述符而言,一条描述符解析之后会产生多个控制指令,并不是每个控制指令都可以马上执行完成的,有些控制指令需要执行的时间较久,比如某个控制指令要求RDMA从系统缓存读取足够数量的数据到后级模块的内部缓存,如果一直等待这条描述符解析并执行完成后,再去解析和执行其他的描述符,Nand IO的利用率不高。为了提升Nand IO的利用率和访问效率,在本发明示例中,前级模块中还设计了挂起等待区,充分利用NandFlash颗粒不同CE/LUN可以并行访问的特性,让需要长时间等待执行结果的控制指令发往后级模块后,暂停本描述符后续的任务解析动作,任务解析器通知挂起等待区记下当前CE/LUN的执行状态、挂起退出等待条件、任务序列在OPCODE表中的当前位置等后,把资源让出来执行其他CE/LUN下的描述符的调度和解析工作,从而实现了对Nand Flash颗粒不同CE/LUN的并行访问,提升了Nand IO的利用效率。当后级模块反馈满足挂起退出条件的信号到挂起等待区后,对应CE/LUN下挂起的描述符任务可以接着被再次调度出来送往任务解析器继续解析和执行。
如图6所示,在本示例中,闪存控制器的执行单元包括内部缓存、FCU、RDMA、WDMA和纠错引擎,其中:
FCU在获取来自前级模块的任务解析器的控制指令后,通过Nand IO执行对NandFlash颗粒的访问,任务解析器发送给FCU的指令需要提供足够的信息,包括具体的命令、Block/Page地址等。
RDMA收到前级模块的任务解析器送来的控制指令后,把指定数量的数据从系统缓存中的指定地址读取后送到后级模块的内部缓存;WDMA则根据控制指令把后级模块的内部缓存内指定数量的数据或者描述符的状态信息写入到系统缓存的指定地址。
纠错引擎用于实现BCH(BCH码是用于校正多个随机错误模式的多级、循环、错误校正、变长数字编码)或者LDPC(一种奇偶校验码,是一种增加二进制传输系统最小距离的简单和广泛采用的方法,一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法)数据纠错的编解码,解决Nand Flash颗粒中数据存储的可靠性问题。
此外,在本设计的闪存控制器中,还包括寄存器模块,因此该描述符管理方法依然可以通过CPU配置寄存器模块的方式绕过前级模块来产生指令控制FCU、WDMA和RDMA工作,从而实现传统的非描述符方式的操作,可以用于调试等用途。
在前级模块中,有一块缓存(即描述符队列)用来接收来自描述符读取器送来的描述符,这个队列可以存储多条描述符,给任务调度器实现多个CE/LUN并行访问提供发挥的空间。
表1 描述符队列案例
请参见表1,其示出了其中一种描述符队列的案例。用于存储描述符的描述符队列可以采用循环队列的设计方案来实现描述符队列的push(入列)和pop(出列)操作、以及队列管理,比如通过head/tail指针指向的缓存单元物理位置的关系来判断队列的空满。当新的描述符push进来后tail指针(尾指针)自动加1,当一条描述符pop出去后head指针(头指针)自动加1。需要注意的是,如果某个位置的描述符已经完成了全部的调度和解析(即状态为done),但它不处于head指针指向的单元,不符合pop的条件,必须等待前面的描述符被全部pop出去自身才能被pop。比如表1的案例中,物理位置为5的描述符已经是done的状态,但由于head指针指向的单元的物理位置为3,因此该描述符不符合被pop的条件。
描述符队列大体上按照从head到tail即先来都到的顺序被任务调度器调度执行,但是某些情况下可以实现乱序调度执行。各CE下的每个LUN属于执行Nand Flash访问操作的最小存储单元,属于同一CE/LUN下的存储单元不能被乱序访问只能顺序执行,但是访问不同CE/LUN下存储单元的描述符可以被乱序调度以实现并行访问,从而提升Nand IO的利用率。比如表1中head指针指向的描述符(物理位置为3)此时处于running状态(调度中),在解析和执行中遇到需要长时间等待后级模块的反馈结果,因此该描述符会被注册到前级模块的挂起等待区并暂停后续的解析动作,这时任务调度器有空闲从描述符队列中的下一单元(物理位置为4)查找是否存在符合调度条件的候选者(pending状态),但是案例中物理位置4的描述符和head指针指向的描述符的访问对象都属于同一CE/LUN,不符合调度条件,任务调度器继续往下查找,物理位置为5的描述符是done的状态,继续往下找,物理位置为6的描述符为pending状态,且访问对象的CE/LUN不同于前面的描述符,可以被调度出来进行解析。
前面提到每个描述符都有OPCODE指针,在前级模块的描述符队列中某候选描述符被调度出来后,任务调度器会根据这个指针去OPCODE表中对应的位置读取一串任务序列来解析执行。
表2.OPCODE表虚拟案例
表2是一个OPCODE表的虚拟案例,每个单元或者多个单元可以构建一个完整的任务序列,比如指针为3和4指向的位置各有一个任务序列,长度不同。OPCODE指针为5的位置的任务序列则占据了两个单元。
我们以OPCODE指针为3为例来说明一个描述符是怎么被调度执行的,其存储的任务序列假设为AA->BB->20->CC->FF,在这个虚拟案例中AA代表RDMA需要从系统缓存读取数据到后级模块的内部缓存,因为这个时间需要等待比较久,BB代表当前描述符的任务序列需要注册到挂起等待区直到后级模块反馈RDMA已经读取了足够数量的数据到内部缓存,而这等待期间任务调度器可以去调度别的描述符来执行,从而提高并行度。当数据读取完成后,任务调度器把20代表的任务继续接着读取出来送给任务解析器来解析,假设这个任务代表需要控制后级模块的FCU通过Nand IO访问Nand Flash颗粒,任务解析器通过查找命令表中20指向位置的内容并结合当前描述符内容来解析产生控制指令后发送给FCU,这条指令代表需要把内部缓存的数据通过命令表中指定的命令方式发往Nand Flash的某个page,CC表示再次注册到挂起等待区直到Nand Flash颗粒返回完成信号,因为这个等待时间会很长,中间会再次允许执行其它描述符的调度和解析,FF代表该描述符的任务全部结束,并发控制指令给后级模块的WDMA,WDMA需要把描述符的状态写入到系统缓存的指定位置。
表3 挂起等待区数据结构案例
表3为挂起等待区的一个数据结构案例,每个CE/LUN组合下的存储单元记录是否处于挂起的状态,挂起后退出条件(等待事件),退出条件是否满足,OPCODE表中挂起时暂停的位置。当任务解析器遇到任务调度器发送过来表示挂起动作的任务时,根据CE/LUN值在挂起等待区找到对应单元后把“状态”置为“挂起”,并记录“挂起后的退出条件”,比如是等待RB信号ready,还是等待RDMA读取足够数量的数据到内部缓存,或者别的条件,“退出条件是否满足”设置为“NO”,并记录OPCODE表中任务序列挂起时的位置,包括OPCODE指针和当前单元内的偏移量。
经过一段时间的等待,后级模块返回表示等待挂起后退出条件满足的标准信号,挂起等待区对应单元的“退出条件是否满足”设置为“YES”,任务调度器将在空闲时将暂停的描述符任务重新调度出来,并根据挂起等待区记录的位置接着继续执行。
表4 命令表示意图
表4是命令表示意图,用于产生发往执行单元的FCU的指令,如果任务调度器送来的任务为解析生成FCU指令,该任务此时为CMD指针,将在CMD表中读取该指针对应位置的数据内容,后者为各种参数和CMD SET。任务解析器按照以下几种类型进行解析:
1)DMA启动类型:读取描述符中的系统缓存地址等内容解析产生RDMA或者WDMA启动指令;
2)挂起等待类型:不产生指令,根据CE/LUN找到挂起等待区相应单元注册挂起状态,记录退出等待条件和任务序列暂停位置;
3)FCU指令类型:任务本身为命令表指针,根据指针读取命令表中相应的参数和命令集,同时读取描述符内容,按照寄存器的配置产生FCU指令;
4)结束类型:产生用于更新描述符状态到系统缓存指定地址的指令,并结束整个描述符的任务。
为了支持不同厂家不同类型的Nand Flash颗粒,前级模块中用于任务调度和解析的OPCODE表和命令表需要储存大量的数量内容,为了节省存储模块面积和大量初始化时间,通常用较大容量的ROM(Read-only Memory,只读存储器)来存储这些内容。但是在实际芯片产品生命周期中,可能出现新的应用需求,比如新的颗粒类型支持,或者发现表中某些条目存在错误,而修改芯片设计代价很大;因此,本发明实施例采用了小容量的SRAM来进行扩展或者替换,如图7所示,SRAM中写入三条新的条目,其中两条用于功能和应用场景的扩展,一条用于替换ROM中出错的条目,因为这种新的条目数量通常较少,需用初始化加载的时间很短。在实现上,软件只需要配置寄存器告知ROM中存放的OPCODE和命令的条目数量,当OPCODE指针或者命令指针超过指定的数量时,任务调度器和解析器模块将从扩展用SRAM中去读取新的条目。
根据本发明实施例的描述符管理方法,采用了基于描述符来实现Nand Flash访问的方式,描述符的任务调度和解析工作全部由闪存控制器内部的硬件模块来执行,从而可以大幅降低软件的开销和CPU负担。同时,通过对每条描述符链分配唯一的第一标识号,对每条描述符分配唯一的第二标识号,能够实现对每个描述符的完成状态进行实时追踪和管理,在出错时能够知道出错的硬件模块和哪个具体的描述符有关,从而方便进行调试和分析。此外,闪存控制器通过设置挂起等待区,提升了Nand Flash颗粒多CE/LUN下同时访问的并行度和Nand IO的利用率。
尽管本文描述了具体实施方案,但是本领域中的普通技术人员将认识到,许多其它修改或另选的实施方案同样处于本公开的范围内。例如,结合特定设备或组件描述的功能和/或处理能力中的任一项可以由任何其它设备或部件来执行。另外,虽然已根据本公开的实施方案描述了各种示例性具体实施和架构,但是本领域中的普通技术人员将认识到,对本文所述的示例性具体实施和架构的许多其它修改也处于本公开的范围内。
上文参考根据示例性实施方案所述的系统、方法、系统和/或计算机程序产品的框图和流程图描述了本公开的某些方面。应当理解,框图和流程图中的一个或多个块以及框图和流程图中的块的组合可分别通过执行计算机可执行程序指令来实现。同样,根据一些实施方案,框图和流程图中的一些块可能无需按示出的顺序执行,或者可以无需全部执行。另外,超出框图和流程图中的块所示的那些部件和/或操作以外的附加部件和/或操作可存在于某些实施方案中。
因此,框图和流程图中的块支持用于执行指定功能的装置的组合、用于执行指定功能的元件或步骤的组合以及用于执行指定功能的程序指令装置。还应当理解,框图和流程图中的每个块以及框图和流程图中的块的组合可以由执行特定功能、元件或步骤的专用硬件计算机系统或者专用硬件和计算机指令的组合来实现。
本文所述的程序模块、应用程序等可包括一个或多个软件组件,包括例如软件对象、方法、数据结构等。每个此类软件组件可包括计算机可执行指令,所述计算机可执行指令响应于执行而使本文所述的功能的至少一部分(例如,本文所述的例示性方法的一种或多种操作)被执行。
软件组件可以用各种编程语言中的任一种来编码。一种例示性编程语言可以为低级编程语言,诸如与特定硬件体系结构和/或操作系统平台相关联的汇编语言。包括汇编语言指令的软件组件可能需要在由硬件架构和/或平台执行之前由汇编程序转换为可执行的机器代码。另一种示例性编程语言可以为更高级的编程语言,其可以跨多种架构移植。包括更高级编程语言的软件组件在执行之前可能需要由解释器或编译器转换为中间表示。编程语言的其它示例包括但不限于宏语言、外壳或命令语言、作业控制语言、脚本语言、数据库查询或搜索语言、或报告编写语言。在一个或多个示例性实施方案中,包含上述编程语言示例中的一者的指令的软件组件可直接由操作系统或其它软件组件执行,而无需首先转换成另一种形式。
软件组件可存储为文件或其它数据存储构造。具有相似类型或相关功能的软件组件可一起存储在诸如特定的目录、文件夹或库中。软件组件可为静态的(例如,预设的或固定的)或动态的(例如,在执行时创建或修改的)。
上面结合附图对本发明实施例作了详细说明,但是本发明不限于上述实施例,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
Claims (10)
1.一种描述符管理方法,其特征在于,包括以下步骤:
CPU创建描述符,并将所述描述符写入系统缓存,并将由多条所述描述符所形成的描述符链的首地址写入描述符读取器的进入寄存器;所述描述符读取器包括所述进入寄存器、获取模块及状态寄存器组;
所述进入寄存器为每条所述描述符链分配对应的第一标识号、以及为每条所述描述符链内的每条所述描述符分配对应的第二标识号;
所述获取模块根据所述描述符链的首地址,将所述描述符链中的多条所述描述符从所述系统缓存读出,并将多条所述描述符发送至闪存控制器;
所述闪存控制器对所述描述符进行调度和解析,形成控制指令,并根据所述控制指令,执行对闪存颗粒的访问操作;
所述状态寄存器组记录每条所述描述符链以及每条所述描述符链内的每条所述描述符的完成状态。
2.根据权利要求1所述的描述符管理方法,其特征在于,所述进入寄存器还记载有状态信息,所述状态信息用于表征所述进入寄存器处于空闲状态或是繁忙状态,当所述进入寄存器处于空闲状态时,所述CPU才能往所述进入寄存器写入新的描述符链的首地址。
3.根据权利要求1所述的描述符管理方法,其特征在于,所述描述符管理方法还包括以下步骤:
所述CPU读取所述状态寄存器组,获取所述描述符链以及所述描述符链内的每条所述描述符的完成状态。
4.根据权利要求1所述的描述符管理方法,其特征在于,所述描述符管理方法还包括以下步骤:
所述闪存控制器将所述描述符链的所述第一标识号和完成状态、以及所述描述符链内的每条所述描述符的第二标识号和完成状态,更新到所述系统缓存中的指定地址。
5.根据权利要求1所述的描述符管理方法,其特征在于,所述闪存控制器包括描述符队列、任务调度器、任务解析器、执行单元和挂起等待区;所述闪存控制器对所述描述符进行调度和解析,形成控制指令,并根据所述控制指令,执行对闪存颗粒的访问操作的步骤,具体包括:
所述描述符队列获取所述获取模块发送的多条所述描述符;所述描述符包括OPCODE指针、CE/LUN信息、闪存颗粒地址信息、系统缓存地址和下一条描述符的地址信息;
所述任务调度器将所述描述符队列中符合调度条件的所述描述符调度出来;
所述任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令;
所述执行单元根据所述多个控制指令,执行对闪存颗粒的访问操作;
当所述控制指令需要等待所述执行单元的执行结果的时间超过预设时间时,将所述描述符存放在所述挂起等待区,使得所述任务解析器暂停所述描述符的后续解析任务,并使所述任务调度器调度符合调度条件的对应其他CE/LUN的描述符,然后返回所述任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的这一步骤。
6.根据权利要求5所述的描述符管理方法,其特征在于,所述描述符队列包括头指针和尾指针,当有描述符进入所述描述符队列时,所述尾指针加1,当有描述符离开所述描述符队列时,所述头指针加1;当所述描述符处于所述头指针指向的单元,且所述描述符完成所有的调度和解析任务后,所述描述符离开所述描述符队列。
7.根据权利要求5所述的描述符管理方法,其特征在于,所述任务调度器将所述描述符队列中符合条件的所述描述符调度出来的步骤之后,还包括以下步骤:
所述任务调度器根据调度出来的所述描述符的所述OPCODE指针,从OPCODE表中查找对应的任务序列,并将所述任务序列及所述描述符发送给所述任务解析器。
8.根据权利要求7所述的描述符管理方法,其特征在于,所述任务序列包括DMA启动类型、挂起等待类型、FCU指令类型和结束类型这四种类型的任务中的一种或多种;所述任务解析器对所述任务调度器调度出来的所述描述符进行解析,形成多个控制指令的步骤,包括:
若任务的类型为DMA启动类型,所述任务解析器解析所述描述符,产生RDMA或者WDMA启动指令;
或者,若任务的类型为挂起等待类型,所述任务解析器将所述描述符存放到所述挂起等待区,并暂停所述描述符的后续解析动作;
或者,若任务的类型为FCU指令类型,所述任务解析器根据所述任务读取命令表中的参数和命令集,并根据所述参数和命令集产生访问闪存颗粒的指令;
或者,若任务的类型为结束类型,所述任务解析器产生用于更新描述符状态到所述系统缓存的指定位置的指令,并结束整个描述符的解析任务。
9.根据权利要求8所述的描述符管理方法,其特征在于,所述挂起等待区记载了存放在所述挂起等待区的所述描述符对应的CE/LUN的挂起状态、所述描述符的挂起退出条件、以及所述OPCODE表中的所述任务序列挂起时的位置。
10.根据权利要求9所述的描述符管理方法,其特征在于,所述闪存控制器对所述描述符进行调度和解析,形成控制指令,并根据所述控制指令,执行对闪存颗粒的访问操作的步骤,还包括以下步骤:
当所述执行单元反馈满足挂起退出条件的信号时,所述任务调度器在空闲时将所述挂起等待区的所述描述符调度出来,并发送至所述任务解析器,进行后续的解析工作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310471467.3A CN116185891B (zh) | 2023-04-27 | 2023-04-27 | 描述符管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310471467.3A CN116185891B (zh) | 2023-04-27 | 2023-04-27 | 描述符管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116185891A true CN116185891A (zh) | 2023-05-30 |
CN116185891B CN116185891B (zh) | 2023-07-21 |
Family
ID=86434888
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310471467.3A Active CN116185891B (zh) | 2023-04-27 | 2023-04-27 | 描述符管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116185891B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050078696A1 (en) * | 2003-10-14 | 2005-04-14 | Broadcom Corporation | Descriptor write back delay mechanism to improve performance |
CN1688974A (zh) * | 2001-12-31 | 2005-10-26 | 英特尔公司 | 挂起线程执行直到发生指定的存储器访问的方法和设备 |
US20090034549A1 (en) * | 2007-08-01 | 2009-02-05 | Texas Instruments Incorporated | Managing Free Packet Descriptors in Packet-Based Communications |
US20090077305A1 (en) * | 2007-09-19 | 2009-03-19 | Hyunsuk Shin | Flexible Sequencer Design Architecture for Solid State Memory Controller |
CN102866982A (zh) * | 2012-09-14 | 2013-01-09 | 复旦大学 | 基于fpga的8位复杂指令集中央处理器 |
US9959227B1 (en) * | 2015-12-16 | 2018-05-01 | Amazon Technologies, Inc. | Reducing input/output latency using a direct memory access (DMA) engine |
CN109690475A (zh) * | 2016-09-30 | 2019-04-26 | 英特尔公司 | 用于转移操作的硬件加速器和方法 |
CN114090483A (zh) * | 2021-09-30 | 2022-02-25 | 上海浦东发展银行股份有限公司 | 一种基于协程的rdma通信方法、装置及存储介质 |
CN114285510A (zh) * | 2020-09-26 | 2022-04-05 | 英特尔公司 | 用于时间敏感联网的确定性分组调度和dma |
CN115686626A (zh) * | 2021-07-27 | 2023-02-03 | 英特尔公司 | 用于针对多租户可缩放加速器的高性能页错误处置的方法和装置 |
CN115686636A (zh) * | 2021-07-27 | 2023-02-03 | 英特尔公司 | 用于动态调整流水线深度以改善执行等待时间的方法和装置 |
-
2023
- 2023-04-27 CN CN202310471467.3A patent/CN116185891B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1688974A (zh) * | 2001-12-31 | 2005-10-26 | 英特尔公司 | 挂起线程执行直到发生指定的存储器访问的方法和设备 |
US20050078696A1 (en) * | 2003-10-14 | 2005-04-14 | Broadcom Corporation | Descriptor write back delay mechanism to improve performance |
US20090034549A1 (en) * | 2007-08-01 | 2009-02-05 | Texas Instruments Incorporated | Managing Free Packet Descriptors in Packet-Based Communications |
US20090077305A1 (en) * | 2007-09-19 | 2009-03-19 | Hyunsuk Shin | Flexible Sequencer Design Architecture for Solid State Memory Controller |
CN102866982A (zh) * | 2012-09-14 | 2013-01-09 | 复旦大学 | 基于fpga的8位复杂指令集中央处理器 |
US9959227B1 (en) * | 2015-12-16 | 2018-05-01 | Amazon Technologies, Inc. | Reducing input/output latency using a direct memory access (DMA) engine |
CN109690475A (zh) * | 2016-09-30 | 2019-04-26 | 英特尔公司 | 用于转移操作的硬件加速器和方法 |
CN114285510A (zh) * | 2020-09-26 | 2022-04-05 | 英特尔公司 | 用于时间敏感联网的确定性分组调度和dma |
CN115686626A (zh) * | 2021-07-27 | 2023-02-03 | 英特尔公司 | 用于针对多租户可缩放加速器的高性能页错误处置的方法和装置 |
CN115686636A (zh) * | 2021-07-27 | 2023-02-03 | 英特尔公司 | 用于动态调整流水线深度以改善执行等待时间的方法和装置 |
CN114090483A (zh) * | 2021-09-30 | 2022-02-25 | 上海浦东发展银行股份有限公司 | 一种基于协程的rdma通信方法、装置及存储介质 |
Non-Patent Citations (1)
Title |
---|
李小文;薛尧;黄菲;谭博;: "多核DSP中FFTC协处理器在LTE-A下的应用", 广东通信技术, no. 07, pages 23 - 28 * |
Also Published As
Publication number | Publication date |
---|---|
CN116185891B (zh) | 2023-07-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11494080B2 (en) | Extended utilization area for a memory device | |
CN107844431B (zh) | 映射表更新方法、存储器控制电路单元与存储器存储装置 | |
US20080195833A1 (en) | Systems, methods and computer program products for operating a data processing system in which a file system's unit of memory allocation is coordinated with a storage system's read/write operation unit | |
KR100725271B1 (ko) | 복수개의 dma 채널을 갖는 usb-sd 저장 장치 및 그저장 방법 | |
US8812772B2 (en) | Data merging method for non-volatile memory and controller and storage apparatus using the same | |
CN116578234B (zh) | 闪存访问系统及方法 | |
CN111796759A (zh) | 多平面上的片段数据读取的计算机可读取存储介质及方法 | |
CN116185892B (zh) | 闪存控制器及其访问闪存颗粒的方法 | |
US8713278B2 (en) | System and method for stranded file opens during disk compression utility requests | |
CN114036079B (zh) | 映射表压缩方法、系统、存储器控制器、固态硬盘及数据读取方法 | |
CN115113799A (zh) | 主机命令的执行方法及装置 | |
CN116185891B (zh) | 描述符管理方法 | |
CN112328509A (zh) | 一种基于硬件实现的用于闪存控制器的快速控制方法 | |
CN109634581B (zh) | 一种基于STM32F103ZET6和eMMC卡的数据存储方法 | |
CN102622301A (zh) | 一种闪存文件的读取和更新方法及系统 | |
CN115878021A (zh) | 计算机可读取存储介质、写入数据到闪存存储器的方法及装置 | |
CN114328297A (zh) | 映射表管理方法、存储器控制电路单元与存储器存储装置 | |
CN117909251A (zh) | 存储介质、调度和执行主机数据更新命令的方法及装置 | |
CN117909252A (zh) | 存储介质、调度和执行主机数据更新命令的方法及装置 |
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 |