CN108572933B - 用于直接存储器存取的数据缓冲器指针找取 - Google Patents

用于直接存储器存取的数据缓冲器指针找取 Download PDF

Info

Publication number
CN108572933B
CN108572933B CN201810151717.4A CN201810151717A CN108572933B CN 108572933 B CN108572933 B CN 108572933B CN 201810151717 A CN201810151717 A CN 201810151717A CN 108572933 B CN108572933 B CN 108572933B
Authority
CN
China
Prior art keywords
data buffer
pointer
memory
list
command
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.)
Active
Application number
CN201810151717.4A
Other languages
English (en)
Other versions
CN108572933A (zh
Inventor
S.贝尼斯蒂
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of CN108572933A publication Critical patent/CN108572933A/zh
Application granted granted Critical
Publication of CN108572933B publication Critical patent/CN108572933B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Read Only Memory (AREA)
  • Memory System (AREA)

Abstract

本文所描述的技术用于操作非易失性储存器。在一个方面,存储器控制器恰好及时地在主机***存储器中找取对数据缓冲器的指针。例如,恰好在存储器***准备进行DMA之前,可以找取指针。数据缓冲器指针可以是PRP列表中的NVMe物理区域页(PRP)条目。不需要多于一次地找取相同的数据缓冲器指针。例如,响应于非易失性存储器***确定可能第二次需要数据缓冲器指针(例如,对于不同的DMA),保存该数据缓冲器指针使得其可以重新使用。在一个方面,如果DMA存取了主机数据缓冲器中的全部,则保存对该缓冲器的指针使得其不需要被再次找取。

Description

用于直接存储器存取的数据缓冲器指针找取
技术领域
本公开涉及非易失性储存器的技术。
背景技术
一种类型的非易失性储存器是半导体存储器。例如,非易失性半导体存储器用于固态驱动器、移动计算装置、非移动计算装置和其它存储器***中。典型地,存储器***具有控制器,其通过通信接口来控制在存储器***和主机***之间的数据传送。主机***可以是计算机***、蜂窝电话、服务器等。存储器***和主机***可以例如通过***计算机接口快速(PCIe)总线来交换数据。非易失性存储器快速(NVMe)是用于存取经由PCIe总线附连的非易失性储存器的逻辑器件接口规范。NVMe利用了半导体存储器(例如但不限于固态驱动器)所提供的并行性的优势。
发明内容
本文公开的一个实施例包含非易失性储存器***,包括多个非易失性存储器单元、命令上下文储存器、以及与命令上下文储存器和多个非易失性存储器单元通信的控制电路。控制电路配置为从主机***存取命令,以存取非易失性储存器***中的非易失性存储器单元。命令包括对列表的列表指针,其包括对主机***中的数据缓冲器的数据缓冲器指针。控制电路配置为基于列表指针来找取对主机***的数据缓冲器的数据缓冲器指针。控制电路配置为在非易失性储存器***和主机***中的由找取的数据缓冲器指针所指向的数据缓冲器之间进行第一DMA。控制电路配置为响应于第一DMA不存取整个数据缓冲器,将数据缓冲器指针保存到命令上下文储存器中。控制电路配置为存取所存取的数据缓冲器指针。控制电路配置为使用保存的数据指针来进行第二DMA,以存取主机数据缓冲器的由数据缓冲器指针所指向、第一DMA未存取的部分。
本文公开的一个实施例包含操作非易失性储存器***的方法。该方法包括从主机***存取命令,以读取储存在非易失性储存器***中的数据。命令包括第一字段和第二字段,该第一字段具有对数据缓冲器的数据缓冲器指针和进入数据缓冲器中的非零偏移,该第二字段具有对主机***中的数据缓冲器的数据缓冲器指针的列表的列表指针。该方法包括对于非易失性储存器***中的非易失性存储器单元的读取或写入操作来找取主机***的用于直接存储器存取(DMA)的对数据缓冲器的数据缓冲器指针。数据缓冲器指针从主机***找取。该方法包括,响应于DMA的第一DMA没有存取由第一数据缓冲器指针所指向的整个主机数据缓冲器,在非易失性储存器***中储存用于DMA的数据缓冲器指针的第一个。该方法包括,响应于确定用于不同读取或写入操作的第二DMA是存取主机数据缓冲器的由第一数据缓冲器指针所指向、未被第一DMA所存取的部分,存取储存在非易失性储存器***中的第一数据缓冲器指针。该方法包括对第二DMA使用所储存的第一数据缓冲器指针,以存取主机数据缓冲器的被第一数据缓冲器指针所指向、未被第一DMA存取的部分。
本文公开的一个实施例包含非易失性储存器***,其包括非易失性存储器单元的多个存储器裸芯。非易失性储存器***包括用于从主机***存取命令的构件,以存取非易失性存储器单元。非易失性储存器***包括用于解析命令的构件,以确定命令是否具有第一字段和第二字段,该第一字段具有对数据缓冲器的指针和进入数据缓冲器中的非零偏移,该第二字段具有对主机***中的数据缓冲器的数据缓冲器指针的列表的列表指针。非易失性储存器***包括用于响应于命令来初始化非易失性储存器***中的存储器裸芯中的非易失性存储器单元的存储器阵列操作的构件。非易失性储存器***包括用于对于存储器阵列操作来找取主机***的用于直接存储器存取(DMA)的对数据缓冲器的数据缓冲器指针的构件。非易失性储存器***包括用于使用找取的数据缓冲器指针来进行主机***中的存储器的DMA的构件。非易失性储存器***包括用于响应于DMA的第一个DMA不存取由第一数据缓冲器指针所指向的整个主机数据缓冲器,而在非易失性储存器***中保存用于DMA的数据缓冲器指针的第一个的构件。非易失性储存器***包括用于响应于确定用于不同存储器阵列操作的第二DMA将存取主机数据缓冲器的由第一数据缓冲器指针所指向的部分,而进行存取第一数据缓冲器指针的构件,该第一数据缓冲器指针保存在非易失性储存器***中。非易失性储存器***包括用于对第二DMA使用所保存的第一数据缓冲器指针来存取主机数据缓冲器的被第一数据缓冲器指针所指向、未被第一DMA存取的部分的构件。
在一个实施例中,用于从主机***存取命令以存取非易失性存储器单元的构件包含,控制器122、处理器122c、前端模块208、命令找取器246、和/或其它硬件和/或软件中的一个或多个。
在一个实施例中,用于解析命令以确定命令是否具有第一字段和第二字段的构件包含,控制器122、处理器122c、命令解析器248、命令找取器246、和/或其它硬件和/或软件中的一个或多个,该第一字段具有对数据缓冲器的指针和进入数据缓冲器中的非零偏移,该第二字段具有对主机***中的数据缓冲器的数据缓冲器指针的列表的列表指针。
在一个实施例中,响应于命令来初始化非易失性储存器***中的存储器裸芯中的非易失性存储器单元的存储器阵列操作的构件包含,控制器122、处理器122c、后端模块210、命令调度器226、命令执行器228、和/或其它硬件和/或软件中的一个或多个。
在一个实施例中,用于对于存储器阵列操作来找取主机***的用于直接存储器存取(DMA)的对数据缓冲器的数据缓冲器指针的构件包含,控制器122、处理器122c、前端模块208、缓冲器指针管理器250、和/或其它硬件和/或软件中的一个或多个。
在一个实施例中,使用找取的数据缓冲器指针来进行主机***中的存储器的DMA的构件包含,控制器122、处理器122c、DMA 253、缓冲器指针管理器250、和/或其它硬件和/或软件中的一个或多个。
在一个实施例中,响应于DMA的第一个DMA不存取由第一数据缓冲器指针所指向的整个主机数据缓冲器而在非易失性储存器***中保存用于DMA的数据缓冲器指针的第一个的构件包含控制器122、处理器122c、DMA253、缓冲器指针管理器250、和/或其它硬件和/或软件中的一个或多个。
在一个实施例中,响应于确定用于不同存储器阵列操作的第二DMA将存取主机数据缓冲器的由第一数据缓冲器指针所指向的部分而进行存取第一数据缓冲器指针的构件包含,控制器122、处理器122c、DMA 253、缓冲器指针管理器250、和/或其它硬件和/或软件中的一个或多个,该第一数据缓冲器指针保存在非易失性储存器***中。
在一个实施例中,对第二DMA使用所保存的第一数据缓冲器指针来存取主机数据缓冲器的由第一数据缓冲器指针所指向、未被第一DMA存取的部分的构件包含,控制器122、处理器122c、DMA 253、缓冲器指针管理器250、和/或其它硬件和/或软件中的一个或多个。
附图说明
图1A是3D堆叠的非易失性存储器装置中的区块的集合的透视图。
图1B是诸如图1A的3D堆叠的非易失性存储器装置的存储器装置的功能框图。
图2A是示例存储器***的框图,其描绘了控制器和主机的更多细节。
图2B是企业环境的一个实施例的图。
图3A是主机命令、主机数据缓冲器和数据缓冲器指针的列表的一个实例的图。
图3B示出了主机命令、主机数据缓冲器和数据缓冲器指针的列表的一个示例的图,其中第一数据缓冲器指针具有非零偏移。
图4是操作非易失性储存器***的过程的一个实施例的流程图。
图5是对读取命令从存储器***到主机***进行DMA的过程的一个实施例的流程图。
图6是对写入命令从存储器***到主机***进行DMA的过程的一个实施例的流程图。
图7是命令上下文储存器、环缓冲器、缓冲器指针管理器和主机存储器的一个实施例的图。
图8是管理列表指针的过程的一个实施例的流程图。
图9是存取数据缓冲器指针的过程的一个实施例的流程图。
图10是当第一数据缓冲器指针具有非零偏移时的过程的一个实施例的流程图。
具体实施方式
本文描述了用于操作非易失性储存器的技术。一个实施例是非易失性存储器***中的控制器,该控制器将指针找取到主机***存储器中的数据缓冲器。在一个实施例中,数据缓冲器指针被及时地找取。例如,如果数据缓冲器指针过早被找取,则非易失性存储器***中的存储器可能浪费储存的指针。如果数据缓冲器指针太晚被找取,则由于数据传送中的延迟使性能可能劣化。
在一些实施例中,数据缓冲器指针是物理区域页(PRP)列表中的NVMe物理区域页(PRP)条目,其可以存在于连接到非易失性存储器***的主机***的存储器中。在一个实施例中,数据缓冲器指针(例如,NVMe PRP条目)通过主机***和非易失性存储器***之间的***组件互连快速(PCIe)总线进行找取。本文中公开的实施例高效地使用了PCIe总线的带宽。在一些实施例中,所找取的数据缓冲器指针(例如,NVMe PRP条目)的数量导致了PCIe总线之上的高效传送。
本文中公开的实施例通过主机***和存储器***之间的物理接口(例如,PCIe总线)在用于传送数据的数据信息包中高效地找取数据缓冲器指针。例如,可以使用事务层信息包(TLP)通过PCIe总线来传送数据。在一些实施例中,选择TLP的信息包的大小以用于高效的传送。例如,可以为高效的传送来选择在数据载荷中的缓冲器指针(例如,NVMe PRP条目)的数量。
本文中公开的实施例减少或者消除了对相同的数据缓冲器指针(例如,NVMe PRP条目)的多于一次的找取。一些常规的技术可能多于一次地找取相同的数据缓冲器指针(例如,NVMe PRP条目),这是低效的。在一个实施例中,响应于非易失性存储器***确定可能第二次需要数据缓冲器指针(例如,对于不同的DMA),保存该数据缓冲器指针使得其可以重新使用。因此,不需要第二次找取数据缓冲器指针。然而,注意,如果非易失性存储器***确定将不再需要数据缓冲器指针,则可以从存储器***中的储存器移除(或者覆写)数据缓冲器指针。因此,高效地使用了存储器。这可以帮助减少高速缓存大小,其可以减少装置面积。
即使在特定命令内,本文中公开的实施例允许数据不按顺序地传送。例如,来自主机***的单个读取命令可以造成对若干存储器裸芯的分别的读取操作。读取操作可以并行进行,其中存储器裸芯完成其读取操作的顺序可以是不确定的。在一个实施例中,恰好在由读取操作导致的向存储器裸芯所读取的数据准备传输到主机***前,存储器***找取数据缓冲器指针。这允许不按顺序的数据传送(以及不按顺序地找取数据缓冲器指针)。注意,不按顺序的数据传送允许下一个准备好的数据接下来被传送。由于其可以减少储存在存储器***中的数据缓冲器指针的数量,因此这也提供了存储器***中储存空间的高效利用。
本文所描述的技术可以采用各种类型的非易失性存储器来使用。一个示例是三维(3D)非易失性存储器***。然而,还可以在二维(2D)非易失性存储器***中实施实施例。图1A是3D堆叠的非易失性存储器装置中的区块的集合的透视图。存储器***100包含衬底101。存储器单元(储存元件)的示例区块BLK0、BLK1、BLK2和BLK3和具有区块所使用的电路的***区域104在衬底上。例如,电路可以包含电压驱动器105,其可以连接于区块的控制栅极层。在一种方法中,通常驱动在区块中的公共高度处的控制栅极层。衬底101还可以连同以导电路径进行图案化以承载电路信号的一个或多个下部的金属层,来承载在区块的下方的电路。区块可以形成在存储器装置的中间区域102中。在存储器装置的上部区域103中,一个或多个上部的金属层以导电路径进行图案化,以承载电路信号。每个区块包括存储器单元的堆叠区域,其中堆叠体的交替的级别代表控制栅极层。在一种可能的方法中,每个区块的在公共高度的控制栅极层相互连接,并且连接到电压驱动器。尽管作为示例描绘了四个区块,但是可以使用在x-和/或y-方向上延伸的两个或更多的区块。
平面在x-方向上的长度可以代表在一个或多个上部的金属层中延伸到字线的信号路径的方向(例如,字线或SGD线的方向),并且平面在y-方向上的宽度代表了在一个或多个上部的金属层中延伸到字线的信号路径的方向(例如,位线方向)。z-方向代表存储器装置的高度。
图1B是诸如图1A的3D堆叠的非易失性存储器***100的存储器装置的功能框图。功能区块图还可以用于2D非易失性存储器***。存储器***100可以包含一个或多个存储器裸芯108。图1A的区块的集合可以在一个裸芯上。存储器裸芯108包含存储器单元的存储器结构126(诸如存储器单元的阵列)、控制电路110和读取/写入电路128。在3D配置中,存储器结构可以包含图1A的区块。存储器结构126通过字线经由行解码器124并且通过位线经由列解码器132是可寻址的。读取/写入电路128包含多个感测区块SB1、SB2、...、SBp(感测电路),并且允许存储器单元的页并行读取或编程。典型的控制器122与一个或多个存储器裸芯108被包含在相同的存储器***100(例如,可移除的储存卡)中。命令和数据经由数据总线120在主机140和控制器122之间传送,并且经由线118在控制器和一个或多个存储器裸芯108之间传送。
可以配置结构126中的多个存储器元件,以便它们串联连接或者使得每个元件可单独地存取。通过非限制性的示例,NAND配置中的闪速存储器装置(NAND存储器)典型地含有串联连接的存储器元件。NAND串是包括存储器单元和选择栅极晶体管的串连晶体管的集合。
可以配置NAND存储器阵列,使得阵列由存储器的多个串组成,在存储器中串由共享单个位线的多个存储器元件构成并且成组地存取。替代地,可以配置存储器元件,使得每个元件是可单独地存取的,例如,NOR存储器阵列。NAND和NOR存储器配置是示例性的,并且存储器元件可以以其它方式进行配置。
还可以使用除了NAND闪速存储器之外的其它类型的非易失性存储器。半导体存储器装置包含易失性存储器装置,诸如动态随机存取存储器(dynamic random accessmemory,”DRAM”)或静态随机存取存储器(static random access memory,”SRAM”)设备,非易失性存储器装置,诸如电阻式随机存取存储器(resistive random access memory,”ReRAM”)、电可擦除可编程只读存储器(electrically erasable programmable read onlymemory、”EEPROM”)、闪速存储器(其也可以被认为是EEPROM的子集)、铁电随机存取存储器(ferroelectric random access memory,”FRAM”)和磁阻随机存取存储器(magnetoresistive random access memory,”MRAM”),以及其它能够储存信息的半导体元件。每种类型的存储器装置可以具有不同的配置。例如,闪速存储器装置可以配置为NAND或NOR配置。
存储器元件可以由无源和/或有源元件以任何组合形成。通过非限制性示例,无源半导体存储器元件包含ReRAM装置元件,其在一些实施例中包含电阻性开关储存元件——诸如反熔丝或相变材料,以及可选的操纵元件(steering element)——诸如二极管或晶体管。进一步通过非限制性示例,有源半导体存储器元件包含EEPROM和闪速存储器装置元件,其在一些实施例中包含含有电荷储存区域的元件,诸如浮置栅极、导电纳米颗粒或者电荷储存介电材料。
存储器结构126可以是二维(2D)或者三维(3D)。存储器结构126可以包括存储器元件(也被称为存储器单元)的一个或多个阵列。在二维存储器结构中,半导体存储器元件布置在单个平面或单个存储器装置级别中。典型地,在二维存储器结构中,存储器元件布置在实质上平行于支撑存储器元件的衬底的主表面延伸的平面中(例如,在x-y方向的平面中)。衬底可以是晶片,存储器元件的层形成在晶片上或晶片中,或者衬底可以是载体衬底,在形成存储器元件之后载体衬底被附接至存储器元件。作为非限制性的示例,衬底可以包含诸如硅的半导体。
三维存储器阵列被布置使得存储器元件占据多个平面或者多个存储器装置级别,从而以三维的方式形成结构(即在x、y和z方向上,其中z方向实质上垂直于衬底的主表面,且x方向和y方向实质上平行于衬底的主表面)。
存储器结构可以包括单片三维存储器结构,其中多个存储器级别形成在单个衬底(诸如晶片)的上方(并且不再单个衬底中),而不具有介入的衬底。存储器结构可以包括任何类型的非易失性存储器,该非易失性存储器单片地形成在存储器单元的阵列的一个或多个物理级别中,该一个或多个物理级别具有设置在硅衬底的上方的高效区。存储器结构可以在具有与存储器单元的操作相关联的电路的非易失性存储器装置中,不管相关联的电路是在衬底的上方还是在衬底内。
典型地,在单片三维存储器阵列中,一个或多个存储器装置级别形成在单个衬底的上方。可选地,单片三维存储器阵列还可以具有至少部分在单个衬底处的一个或多个存储器层。作为非限制性的示例,衬底可以包含诸如硅的半导体。在单片三维阵列中,构成阵列的每个存储器装置级别的层典型地形成在阵列的下卧的存储器装置级别的层上。但是,单片三维存储器阵列的相邻的存储器装置级别的层可以被共享或者具有在存储器装置级别之间的中间层。
作为非限制性的示例,三维存储器结构可以被垂直地布置成多个二维存储器装置级别的堆叠体。作为另一个非限制性的示例,三维存储器阵列可以被布置成多个垂直列(例如,实质上垂直于衬底的主表面(即在y方向上)延伸的列),而每个列具有多个存储器元件。可以以二维配置(例如在x-z平面中)来布置列,造成具有在多个垂直堆叠的存储器平面上的元件的存储器元件的三维布置。三维形式的存储器元件的其它配置还可以构成三维存储器阵列。
通过非限制性的示例,在三维NAND存储器阵列中,存储器元件可以被耦接在一起以形成在单个水平(例如,x-y)存储器装置级别内的NAND串。替代地,存储器元件可以被耦接在一起以形成横穿多个水平存储器装置级别的垂直的NAND串。可以设想其它的三维配置,其中一些NAND串在单个存储器级别中含有存储器元件,而其它串含有跨越过多个存储器级别的存储器元件。
其次,二维阵列可以分开形成并且然后封装在一起,以形成具有存储器的多个层的非单片存储器装置。例如,可以通过在分开的衬底上形成存储器级别并且然后在彼此顶部堆叠存储器级别来构建非单片堆叠存储器。衬底在堆叠前可以变薄或者从存储器装置级别移除,但是随着最初在分开的衬底上形成存储器装置级别,得到的存储器阵列不是单片三维存储器阵列。此外,多个二维存储器阵列或三维存储器阵列(单片的或非单片的)可以在分开的芯片上形成,并且然后封装在一起,以形成堆叠芯片存储器装置。
本领域技术人员将认识到,本技术不限于所描述的二维和三维示例性结构,而是覆盖如本文所描述并如本领域技术人员所理解的在本技术的精神和范围内的所有相关存储器结构。
对于存储器元件的操作以及与存储器元件的通信通常需要相关联的电路。作为非限制性的示例,存储器装置可以具有用于控制和驱动存储器元件以完成诸如编程和读取的功能的电路。该相关联的电路可以与存储器元件在相同的衬底上和/或在分开的衬底上。例如,用于存储器读取-写入操作的控制器可以位于分开的控制器芯片上和/或在与存储器元件相同的衬底上。
控制电路110与读取/写入电路128协作以在存储器结构126上进行存储器操作,并且包含状态机112、片上地址解码器114和功率控制模块116。状态机112提供了存储器操作的芯片级别的控制。可以为用于操作存储器装置的参数——诸如,不同行或者存储器单元的其它组的编程参数,提供储存区域113。这些编程参数可以包含位线电压和验证电压。
片上地址解码器114向由解码器124和132所使用的硬件地址提供了由主机或存储器控制器之间使用的地址接口。功率控制模块226控制在存储器操作期间供应给字线和位线的电力和电压。其可以包含用于以3D配置的字线层(WLL)、SGS和SGD选择栅极以及源极线的驱动器。在一种方法中,感测区块可以包含位线驱动器。SGS选择是NAND串的源极端部处的栅极晶体管,并且SGD选择栅极是NAND串的漏极端部处的晶体管。
在一些实现方式中,可以组合一些组件。在各种设计中,除了存储器结构126之外的一个或多个组件(单独的或者组合的)可以被认为是配置为进行本文所描述的行为的至少一个控制电路。例如,控制电路可以包含控制电路110、状态机112、解码器114/132、功率控制模块116、感测区块SB1、SB2、...、SBp、读取/写入电路128、控制器122等等中的任一个或者其组合。
芯片外控制器122可以包括处理器122c以及诸如ROM 122a和RAM 122b的储存装置(存储器)。储存装置包括诸如指令集的代码,并且处理器可操作为执行指令集以提供本文所描述的功能。替代地或附加地,处理器可以从存储器结构的储存装置126a(诸如存储器单元在一个或多个字线中的保留区域)存取代码。
代码由控制器122用于存取存储器结构126,诸如用于编程、读取或者操作操作。代码可以包含启动代码和控制代码(例如,指令集)。启动代码是在启动或开启过程期间初始化控制器并且使控制器能够存取存储器结构的软件。代码可以由控制器用于控制一个或多个存储器结构。在上电时,处理器122c从ROM 122a或者储存装置126a找取启动代码来执行,并且启动代码初始化***组件并且将控制代码加载到RAM 122b中。一旦控制代码加载到RAM中,其由处理器执行。控制代码包含驱动器以进行基本任务,诸如控制和分配存储器、区分指令处理的优先级、以及控制输入和输出端口。
图2A是示例存储器***100的框图,其描绘了控制器122和主机***140的一个实施例的更多细节。在一个实施例中。图2A的***是固态驱动器。如本文所用的,存储器控制器是管理储存在存储器***上的数据并且与主机***进行通信的装置,诸如计算机或电子装置。存储器控制器可以具有除了本文所描述的特定功能之外的各种功能。例如,存储器控制器可以格式化存储器,以确保适当地操作存储器,映射出坏的闪速存储器单元,以及分配空闲单元来替换未来失效的单元。空闲单元的一些部分可以用于将固件保持为操作存储器控制器并且实现其它特征。在操作中,当主机需要从闪速存储器读取数据或者将数据写入到闪速存储器时,其将与存储器控制器通信。如果主机提供要读取/写入数据的逻辑地址(LA),则闪速存储器控制器可以将从主机接收的逻辑地址转换为存储器中的物理地址。(替代地,主机可以提供物理地址)。存储器控制器还可以进行各种存储器管理功能,诸如但不限于,损耗均衡(分布写入以避免损耗存储器的特定区块,否则将重复写入到该特定区块)和垃圾收集(在区块满了后,仅将数据的高效页移动到新的区块,所以可以擦除和重复使用满的区块)。
主机***140具有主机存储器160。在一个实施例中,主机存储器160包含命令提交队列(SQ)162和命令完成队列(CQ)164。存取非易失性存储器108的命令可以由主机放置到提交队列162中。例如,命令可以是读取或写入非易失性存储器108。在一个实施例中,提交队列162是具有固定大小的间隙的圆形缓冲器。在一个实施例中,主机告知存储器***何时新的命令已经放置在提交队列162上。这样的一种机制被称为“门铃”。
控制器122可以写入到相关联的完成队列164,以发布所完成的命令的状态。在一个实施例中,完成队列164是具有固定大小的间隙的圆形缓冲器。
数据缓冲器168可以用于储存要被写入到非易失性存储器108的数据,或者储存从非易失性存储器108读取的数据。控制器122可以从数据缓冲器168进行数据的DMA,作为将数据写入到非易失性存储器108的部分。例如,控制器122可以将写入数据从数据缓冲器168传送到存储器***中的写入缓冲器。控制器122可以将数据的DMA进行到数据缓冲器168,作为从非易失性存储器108读取数据的部分。例如,控制器122可以将读取数据从存储器***中的读取缓冲器传送到数据缓冲器168。
主机存储器160还可以包含数据缓冲器指针166。数据缓冲器指针166在数据缓冲器168中识别位置。在实施例中,存储器控制器122使用数据缓冲器指针166来进行DMA,以满足读取或写入命令。
在一个实施例中,提交队列(SQ)162、完成队列(CQ)和数据缓冲器指针166符合NVM快速(NVM Express)。在一个实施例中,数据缓冲器指针166是NVMe“物理区域页(PRP)条目”。然而,提交队列(SQ)162、完成队列(CQ)和数据缓冲器指针166不需要符合NVM快速。
控制器122和非易失性存储器裸芯108之间的接口可以是任何适当的接口。在一个实施例中,存储器***100可以是基于***的卡,诸如安全数字(SD)或微型安全数字(micro-SD)卡。在替代实施例中,存储器***100可以是嵌入式存储器***的部分。例如,存储器可以嵌入在主机内,诸如以安装在个人计算机中的固态硬盘(SSD)的形式。
在一些实施例中,非易失性存储器***100包含在控制器122和非易失性存储器裸芯108之间的单一通道,本文所描述的主题不限于具有单一存储器通道。例如,在一些存储器***架构中,根据控制器的能力,2、4、8或更多个NAND通道可以存在于控制器和存储器裸芯之间。在本文所描述的实施例的任一个中,即使在附图中示出了单一通道,但是多于一个通道可以存在于控制器和存储器裸芯104之间。
如图2A中所描绘的,控制器122包含与主机***104接口的前端模块208、与一个或多个非易失性存储器裸芯108相结合的后端模块210、以及进行现在将详细描述的功能的各种其它模块。
图2A中描绘的控制器122的组件可以例如采用以下形式:为与其它组件一起使用所设计的封装的功能性硬件单元(例如,电路)、由通常进行相关功能的特定功能的(微)处理器或处理电路(或者一个或多个处理器)所执行的程序代码的部分(例如,软件或固件)、或者与更大的***接口的自包含的硬件或软件组件。例如,每个模块可以包含特定集成电路(ASIC)、现场可编程门阵列(FPGA)、电路、数字逻辑电路、模拟电路、分立电路的组合、门电路、或者任何其它类型的硬件、或其组合。替代地或附加地,每个模块可以包含或者包括储存在处理器可读装置(例如,存储器)中的软件,以编程控制器122的一个或多个处理器来进行本文所描述的功能。图2A中描绘的架构是一个示例实现方式,该实现方式可以(或不可以)使用图1B中描绘的控制器122的组件(例如,RAM 122b、ROM 122a、处理器122c)。
控制器122可以与一个或多个存储器裸芯108接口。在一个实施例中,控制器122和多个存储器裸芯(同时包括非易失性储存器***100)实现固态驱动器(SSD),其可以模拟、替换或者用于代替主机内侧的硬盘驱动器作为NAS装置等。此外,SSD不需要作为硬盘驱动器工作。
再次参照控制器122的模块,读取/编写(R/W)缓冲器管理器214管理随机存取存储器(RAM)中的缓冲器。这些缓冲器可以包含写入缓冲器和读取缓冲器。RAM可以用作临时缓冲器来储存来自主机140的数据,以写入到非易失性存储器108。RAM还可以用作临时缓冲器来储存从非易失性存储器108读取的数据,以传送到主机140。R/W缓冲器管理器214还可以对控制器122的内部总线判优进行控制。只读存储器(ROM)储存器***启动代码。
RAM和ROM未在图2A中描绘。在一个实施例中,RAM和/或ROM位于控制器122内。在一个实施例中,RAM和/或ROM位于控制器122的外部。在其它实施例中,RAM和ROM的部分可以既位于控制器122内又位于控制器的外侧。另外,在一些实现方式中,控制器122、RAM和ROM可以位于分开的半导体裸芯上。
前端模块208包含主机接口220和物理层接口(PHY)222,其提供与主机或下个级别的储存控制器的电接口。在一个实施例中,PHY 222是***组件互连快速(PeripheralComponent Interconnect Express,PCIe)。然而,PHY 222不限于PCIe。
主机接口220典型地促进数据、控制信号和时间信号的传送。主机接口220的类型的选择可以取决于正在使用的存储器的类型。在一些实施例中,主机接口220符合NVM快速(NVMe)。NVMe是逻辑装置接口,其可以用于当使用主机140和存储器***100之间的PCIe总线时存取所附连的非易失性储存器。然而,注意,主机接口220不限于NVMe。主机接口220包含命令上下文储存器242、接口寄存器244、命令找取器246、命令解析器248、缓冲器指针管理器250、以及数据缓冲器指针储存器252。
命令上下文储存器242用于储存来自主机的目前正在被存储器控制器处理的命令的信息。该信息可以包含主机存储器160中的指针的列表的指针。在一个实施例中,对于来自主机***140的每个显著的读取或写入命令存在分开的命令上下文。然而,不需要的是,来自主机***140的所有类型的命令具有储存在命令上下文中的信息。图7进一步示出了命令上下文储存器242的一个实施例的细节。
接口寄存器244包含在提供主机接口中使用的各种寄存器。在一个实施例中,寄存器中的一个是“门铃寄存器”,在一个实施例中主机可以写入该“门铃寄存器”以通知存储器***在SQ162中有新的命令。命令找取器246配置为从SQ 162找取新的命令。命令解析器248配置为解析新的命令。在一个实施例中,命令解析器248分析命令中的数据指针字段,以确定存储器控制器应该如何处理存取数据缓冲器指针。
数据缓冲器指针储存器252用于将指针储存到主机存储器中的数据缓冲器。在一个实施例中,数据缓冲器指针储存器252用于储存NVMe PRP条目。PRP条目可以用在NVMe中作为对主机存储器中的数据缓冲器的指针。在一个实施例中,对于每个存储器裸芯108存在一个数据缓冲器指针储存器252。缓冲器指针管理器250可以配置为从主机存储器存取数据缓冲器指针,并且将它们传送到数据缓冲器指针储存器252。
后端模块210包含调度器226、命令执行器228、误差校正控制器(ECC)引擎224和存储器接口230。
命令调度器226产生要发送到非易失性存储器裸芯108的命令序列,诸如编程、读取和擦除命令序列。命令执行器228监督这些命令的执行。
存储器接口230将命令序列提供给非易失性存储器裸芯108并且从非易失性存储器裸芯108接收状态信息。在一个实施例中,存储器接口230可以是双数据速率(DDR)接口。在一些实施例中,存储器接口203是闪速存储器接口。然而,非易失性存储器108中的存储器单元不限于闪速存储器。因此,存储器接口230不限于闪速存储器接口。在存储器108是闪速存储器的事件中,后端模块210可以包含闪速控制层,其控制后端模块210的整体操作。
ECC引擎224对从主机***140接收的数据字节编码,并且对从非易失性存储器108读取的数据字节进行解码和误差校正。在一个实施例中,ECC引擎224包括低密度奇偶检查(LDPC)解码器。
DMA 253配置为控制数据在存储器***100和主机***140中的存储器160之间的直接存储器存取(DMA)传送。例如,DMA 253可以从主机数据缓冲器168存取数据,并且将其传送到RAM中的写入缓冲器(例如,图1B,122b)。DMA 253可以使用数据缓冲器指针166,该数据缓冲器指针166从主机接口220提供,以存取位于主机数据缓冲器168中的正确位置。DMA253可以从RAM 122b中的读取缓冲器传送数据,并且传送到主机数据缓冲器168。DMA 253可以使用数据缓冲器指针166,该数据缓冲器指针166从主机接口220提供,以存取位于主机数据缓冲器168中的正确位置来传送从非易失性存储器108读取的数据。注意,对于读取和写入两者,后端模块210可以进行数据的附加处理,诸如误差校正、加扰等。因此,例如,向主机数据缓冲器168传送的数据通常不是从非易失性存储器108读取的原始数据。
图2B是企业环境的一个实施例的图。在该实施例中,SQ 162、CQ和数据缓冲器指针166储存在储存器264(也被称为“储存单元”)中。储存器264可以通过(但不限于)RAM、DRAM、ReRAM来实现。在一个实施例中,储存器264是非易失性存储器108的部分。例如,储存器264可以是存储器阵列中的闪速存储器单元。储存器264通过一些物理通信链路来耦接到控制器122。储存器的储存SQ 162、CQ和数据缓冲器指针166的部分可以充当控制器存储器缓冲器(CMB)。在一个实施例中,CMB符合NVMe规范的CMB。在一个实施例中,储存器264中的提交队列(SQ)162允许主机***140将命令直接写入到存储器控制器的内部存储器空间。这减轻了存储器控制器从主机存储器存取命令的需要。在一个实施例中,储存器264中的数据缓冲器指针166允许主机***140将数据缓冲器指针直接写入到存储器控制器的内部存储器空间。基于CMB的SQ 162、CQ和数据缓冲器指针166可以以相似的方式使用,并且SQ 162、CQ和数据缓冲器指针166储存在主机***上。不同的是以存储器控制器的存储器空间来代替主机存储器使用。
控制器122具有储存控制器262,以管理在储存器264和控制器122中的储存器之间的传送数据。例如,来自储存器264的数据可以被传送到命令上下文储存器242、接口寄存器244和/或数据缓冲器指针储存器252。因此,命令上下文储存器242、接口寄存器244和/或数据缓冲器指针储存器252可以在控制器122的内部。该内部储存器可以是RAM、寄存器等。
注意,在图2B的实施例中,可以存在任意数量的主机接口220。
在图2B的实施例中,主机存储器160含有数据缓冲器168。因此,控制器122可以基于数据缓冲器指针,将DMA初始化到数据缓冲器168或者从数据缓冲器168初始化DMA。然而,在一个实施例中,存储器控制器122首先将数据缓冲器指针从储存器264的区域166传送到数据缓冲器指针储存器252,该数据缓冲器指针储存器252在一个实施例中存在于控制器122内。
对于图2A和2B中描绘的实施例的其它变体是可能的。例如,SQ 162、CQ 164和数据缓冲器指针166的任何子集可以储存在存储器***100的储存器264中。例如,在一个实施例中,SQ 162和CQ 164储存在储存器264中,但是数据缓冲器指针166储存在主机存储器160中。
图3A是主机命令320、主机数据缓冲器168和数据缓冲器指针的列表304的一个实例的图。在一个实施例中,主机数据缓冲器中的每一个是主机存储器中的物理页。另外,在一个实施例中,列表304中的每一个是主机存储器中的物理页。在一个实施例中,列表304存在于主机存储器160中的数据缓冲器指针166中。然而,注意,列表304可以存在于存储器***100。例如,关于图2B的实施例,列表304可以存在于储存器264中的数据缓冲器指针166中,该储存器264通过物理通信链路来耦接到控制器122。
在一个实施例中,主机***可以将主机命令320放置在主机存储器160中的SQ 162上。在一个实施例中,主机***可以将主机命令320放置在储存器264中的SQ 162上。注意,主机命令302可以是用于存储器存取操作,诸如写入(还被称为“编程”)或者读取。命令标识符340可以用于识别命令。换言之,命令标识符340可以将一个读取命令与另一个读取命令进行区分等。存储器控制器122可以使用该命令标识符340来为完成队列(例如,图2A,164或者图2B,164)上的所完成的命令提供状态。命令类型342指示了命令的类型(例如,读取、写入等)。起始LBA字段344指示了用于读取或者写入的起始逻辑区块地址(LBA)。长度字段346是用于读取或者写入的长度。长度可以指定为逻辑区块的数量。注意,存储器控制器122可以将起始LBA、以及由读取或写入的长度所指示的另一个LBA,转换成非易失性存储器108中的物理地址。
主机命令320包含字段322和字段324。字段322和字段324可以包含数据指针。例如,字段322可以指向主机存储器中的数据缓冲器。在一个实施例中,字段324(如果使用)可以指向主机存储器中的数据缓冲器指针的列表。注意,在一些实施例中,字段324(如果使用)可以指向储存器264(参见图2B)中的数据缓冲器指针的列表。主机命令320还可以具有另一个字段。例如,各种字段可以用于数据管理——诸如数据是否是可压缩的,该命令是否是顺序请求、时延需求的一部分。
在该示例中,字段322含有主机存储器中的对第一数据缓冲器的指针。在一些实施例中,字段322具有零或者非零的偏移。偏移可以用于细化数据缓冲器的起始位置。图3B和10以及其描述提供了当在字段322中存在非零偏移时处理数据缓冲器指针的一个实施例的其它细节。
在该示例中,字段324含有对数据缓冲器指针304a的列表的指针。列表304a含有若干条目。除最后的条目之外的所有条目都含有主机存储器中的对数据缓冲器的指针。在本文中,主机***的存储器中的对数据缓冲器的指针将被称为“数据缓冲器指针”。列表304a中的最后的条目含有对列表304b的指针。列表304b含有若干条目。除最后的条目之外的所有条目都含有主机存储器中的对数据缓冲器的指针。列表304b中的最后的指针含有对另一个列表304的指针(未在图3A中描绘)。在本文中,术语“列表指针”可以用于指代对包含数据缓冲器指针的列表的指针。然而,注意,列表还可以包含不是数据缓冲器指针的条目,诸如对另一个列表的指针。注意,最后的条目并不总是对另一个列表304的指针。最后的条目可以只是对主机数据缓冲器的指针。
在一个实施例中,当术语在NVMe中使用时,字段322是物理区域页(PRP)条目。物理区域页(PRP)条目可以是主机存储器中的对物理存储器页的指针。PRP可以用作存储器***控制器和主机存储器之间的数据传送的分散/聚集机制。在一个实施例中,主机存储器中的物理存储器页的大小由主机***配置。例如,主机***可以指定每个物理存储器页是4KB、8KB、16KB或者一些其它大小。
在一个实施例中,PRP条目可以是固定大小的。在一个实施例中,PRP条目可以是64-位(例如,8字节)物理存储器页地址。然而,PRP条目可以大于或小于64-位。PRP条目可以具有页基底地址和偏移。在一个实施例中,PRP条目的较低位指示主机存储器中的物理存储器页内的偏移。例如,如果存储器页是4KB,则位11:02可以形成偏移,如果存储器页是8KB,则位12:02可以形成偏移,等等。
在一个实施例中,字段324是对NVMe PRP的列表的指针。因此,在一个实施例中,列表304是PRP列表。作为一个示例,PRP列表可以具有512个PRP条目。例如,PRP列表可以是4KB的大小,具有512个PRP条目,该条目中的每一个是64位。然而,在PRP列表304中可以存在更多或更少的PRP条目。另外,PRP列表可以大于或小于4KB。例如,8KB PRP列表304可以含有1024个条目,该条目中的每一个是64位。在一个实施例中,PRP列表304具有与主机存储器中的连续存储器的一个单个页相等的大小。
注意,主机命令320可以与数据缓冲器指针的多于一个列表304相关联。命令所需要的数据缓冲器指针的总数可以由命令参数和物理存储器页大小所隐含。列表304中的最后的条目可以是对数据缓冲器的指针或者是对下一个列表的指针。在最后的条目是对下一个列表的指针的事件中,该条目指向含有下一个列表304的主机存储器。注意,下一个列表304可以包括一个物理存储器页。
在一个实施例中,基于一个物理存储器页的大小,存储器控制器122能够确定给定列表304中的最后的条目的位置。在一个实施例中,基于是否需要更多数据缓冲器指针来满足读取或写入命令,存储器控制器122能够确定最后的条目是对另一个列表304的指针还是数据缓冲器指针。
可以存在大量的列表304。例如,命令可以是在非易失性储存器***中读取256MB。如果每个数据缓冲器是4KB,则其可能需要约64,000个数据缓冲器——并且因此是64,000个列表条目。在每个列表条目是64位的情况下,这意味着数据缓冲器指针可以使用约512KB的储存器。
注意,对于一些读取或写入命令,不使用字段324。例如,如果读取仅对于一个数据缓冲器,则可以仅使用字段322。另外,在一些情形下,可以仅存在一个列表304。再次,同样,如果要读取或写入的数据量相对较少,则其可以是该情况。然而,当存在多个列表时,存储器控制器122更难以高效地管理来自例如主机存储器的数据缓冲器指针的存取。
本文公开的实施例足够快地找取数据缓冲器指针(例如,NVMe PRP条目),以使得对主机存储器数据缓冲器的指针以及时的方式可用于DMA。因此,实现了主机和存储器***之间的高数据传送速率。然而,太快地找取数据缓冲器指针需要存储器装置上相当大的储存器。例如,当命令第一次由存储器***接收时,是对要找取的命令的数据缓冲器指针的全部,这可能需要存储器装置的大量储存器。因此,本文公开的实施例避免了从主机存储器数据缓冲器找取数据缓冲器指针或者将数据缓冲器指针找取到主机存储器数据缓冲器,直到其马上被DMA需要之前。因此,高效地使用了存储器***上的存储器空间。例如,高效地使用了RAM 122b。
本文中公开的实施例在主机***和存储器***之间的物理接口(例如,PCIe总线)之上高效地找取数据缓冲器指针。在一个实施例中,被一次存取的数据缓冲器指针的数量适合于PCIe总线上的高效传输。
本文中公开的实施例通过主机***和存储器***之间的物理接口(例如,PCIe总线)在用于传送数据的数据信息包中高效地找取数据缓冲器指针。例如,PCIe可以使用事务层信息包(TLP)。例如,在一些配置中,64字节的TLP载荷大小可以是最佳效率。在这种情况下,在一个TLP信息包中找取的数据缓冲器指针的数量(例如,NVMe PRP)可以包括64字节的数据。然而,在其它配置中,多于或少于64字节可以是TLP载荷大小的最佳效率。
在一个实施例中,来自主机的命令中的第一数据缓冲器指针可以具有偏移。图3B示出了与图3A相似的主机命令、主机数据缓冲器和数据缓冲器指针的列表的一个实例的图。未示出图3A中的列表304b以便简化该图。另外,图3B中的命令320中的字段322中的对第一数据缓冲器的指针具有非零偏移。通过这个偏移,第一主机缓冲器的大小少于其它缓冲器的大小。例如,缓冲器168(1)到168(24)每个可以是4KB。然而,缓冲器168(0)的使用部分通过偏移的大小可以少于4KB。注意,数据缓冲器可以由数据缓冲器的大小(其可以是由主机指定的固定值)和数据缓冲器指针所指向的主机存储器地址来限定。例如,在一个实施例中,对数据缓冲器168(1)、168(2)等的指针指向数据缓冲器的起点。
偏移可以使得主机***和存储器***之间的所有传送是不对齐的。例如,存储器***可能想要传送第一个64KB。假设4KB数据缓冲器,这对应于八个完整的主机数据缓冲器。在该示例中,数据传送需要字段322中的对第一缓冲器的指针,以及第一列表304a中的八个数据缓冲器指针。这八个数据缓冲器指针指向数据缓冲器168(1)到168(8)。然而,与该示例的64KB传送相关联的最后的主机数据缓冲器(例如,168(8))由于偏移将不会从该64KB数据完全占据。
当传送在缓冲器中顺序地接续的64KB时,数据缓冲器168(8)的剩余部分可能被占据。为了避免数据缓冲器指针的多次找取,在一个实施例中使用了剩下的数据缓冲器指针储存器(图7,714)。剩下的数据缓冲器指针储存器714用于储存与未被完全占据的数据缓冲器相对应的数据缓冲器指针。例如,对数据缓冲器168(8)的数据缓冲器指针可以储存在剩下的数据缓冲器指针储存器714中。在一个实施例中,响应于对数据缓冲器指针找取的请求,缓冲器指针管理器250首先检查是否任何需要的数据缓冲器指针(例如,NVMe PRP条目)储存在剩下的数据缓冲器指针储存器714中。如果是这样,不需要从主机存储器找取这些数据缓冲器指针。其通过不必再次找取这些数据缓冲器指针(例如,PRP条目)而提供了相当大的性能改善。
注意,在以上的场景中,在剩下的数据缓冲器指针储存器714中保存的数据缓冲器指针是在64KB数据传送的结束处。另一个可能是在64KB传送的起点处保存数据缓冲器指针。例如,存储器控制器可以接着进行64KB数据传送,该数据传送部分填充了数据缓冲器168(16),完全填充了数据缓冲器168(17)到168(23),并且部分填充了数据缓冲器168(24)。在这种情况下,对数据缓冲器168(16)和168(24)两者指针可以保存在剩下的数据缓冲器指针储存器714中。后来的传送可以涉及数据缓冲器168(8)到168(16)(其中数据缓冲器168(8)被部分写入,并且数据缓冲器168(16)的剩余被填满)。在这种情况下,存储器控制器不需要再次传送对数据缓冲器168(16)的指针。因此,在该示例中,存储器控制器不需要在数据传送结束时来传送对数据缓冲器的数据缓冲器指针。
另外,在前面注意,避免了对一次传送九个数据缓冲器指针的需要。在一些实施例中,当传送八个数据缓冲器指针而不是九个数据缓冲器指针时,通过PCIe总线的传送是更为高效的。
图4是操作非易失性储存器***的过程400的一个实施例的流程图。过程400可以由存储器***100中的控制电路进行。在一个实施例中,存储器控制器122进行过程400。在一个实施例中,过程400在诸如图2A所描绘的环境中进行,在该环境中主机***140含有SQ162、CQ 164和数据缓冲器指针166。在一个实施例中,过程400在诸如图2B所描绘的环境中进行,在该环境中存储器***100含有SQ 162、CQ 164和数据缓冲器指针166。在一个实施例中,过程400在主机***140含有数据缓冲器指针166的环境中进行,但是存储器***具有SQ162和CQ 164。在一些实施例中,主机***140具有数据缓冲器166。在一些实施例中,数据缓冲器指针166是NVMe PRP条目。
在步骤402处,存储器控制器122从主机***存取命令,以在存储器***100中进行非易失性储存器的存储器存取。该命令可以是读取操作或者写入操作。在一个实施例中,该命令指定了起始LBA和长度。因此,命令可以是在一些LBA处(根据长度)进行读取或写入。在一个实施例中,存储器控制器122从主机存储器160中的SQ 162存取命令。在一个实施例中,存储器控制器122从存储器***100(例如,储存器264,图2B)上的SQ 162存取命令。在一个实施例中,命令具有列表指针。列表指针指向包含对主机***中的数据缓冲器的数据缓冲器指针的列表。
在步骤404处,存储器控制器122确定主机***数据缓冲器的DMA需要什么数据缓冲器指针。可能的是,这些数据缓冲器指针中的一些从先前的DMA保存。在一个实施例中,可能的是,保存了在先前的DMA的起点和/或结束处的数据缓冲器指针。
在步骤406处,存储器控制器122确定是否所需的数据缓冲器指针中的任一个目前储存在存储器***中。例如,存储器控制器122确定是否所需的数据缓冲器指针中的任一个保存在命令上下文储存器242中。如果是这样,在步骤408处,存储器控制器122存取所保存的(多个)数据缓冲器指针。注意,这减轻了通过例如PCIe总线来存取该数据缓冲器指针的需求。这可以提供相当高效的操作。
在步骤410处,存储器控制器122为DMA存取对主机数据缓冲器的数据缓冲器指针。在从先前的DMA未保存任何指针的事件下,该步骤可以找取DMA的数据缓冲器指针的全部。在存在一个或多个从先前的DMA保存的指针的事件下,其可以找取DMA所需的剩余数据缓冲器指针。
在一个实施例中,存储器控制器122仅存取DMA所需的数据缓冲器指针。例如,如果DMA需要八个数据缓冲器指针,则存储器控制器可以仅找取八个数据缓冲器指针。存储器控制器122可以将该找取基于命令中的列表指针。然而,注意,命令可以与数据缓冲器指针的多个列表相关联。在一个实施例中,存储器控制器使用命令中的列表指针来定位另一个列表指针,例如,在主机存储器中的。
在一个实施例中,在步骤410中,存储器控制器122从主机存储器160找取数据缓冲器指针。在一个实施例中,在步骤410中,存储器控制器122从储存器264(参见图2B)找取数据缓冲器指针。
步骤412用于存储器控制器122进行存储器***100和由数据缓冲器指针所指定的主机存储器数据缓冲器之间的DMA。在一个实施例中,DMA是从存储器***100中的读取缓冲器到主机存储器中的数据缓冲器。在一个实施例中,DMA是从主机存储器中的数据缓冲器到存储器***中的写入缓冲器。
步骤414是确定DMA是否完全地存取了所有数据缓冲器。例如,对于读取操作,DMA可以仅具有部分填充的数据缓冲器中的一个或多个。作为一个示例,数据缓冲器可以是4KB。DMA可以将少于4KB的数据写入到数据缓冲器中的一个。对于写入操作,DMA可以从数据缓冲器中的一个或多个的仅一部分来存取数据。在这种情况下,DMA可以为数据缓冲器中的一个读取少于4KB。对于其它数据缓冲器(其被完全地存取),可以已经写入或读取4KB。
如果存在未完全存取的缓冲器,则对该数据缓冲器的数据缓冲器指针被保存在例如命令上下文储存器242中。过程400然后返回到步骤404,以处理另一个DMA。
图5是对读取命令从存储器***到主机***进行DMA的过程500的一个实施例的流程图。该处理500假设命令与数据缓冲器指针的多个列表(例如,多个NVMe PRP列表)相关联。将相对于图3A或3B的示例命令320来讨论过程500,但是不限于此。
在步骤502中,“门铃”响起。门铃是一种机制,通过该机制,主机***告知存储器***:新的命令在提交队列(SQ)162上准备好了。在一个实施例中,存储器控制器122具有门铃寄存器,其中主机***写入以“响起门铃”。
在步骤504中,存储器控制器122响应于门铃从SQ 162找取新的命令。在一个实施例中,存储器控制器122从主机存储器160(例如,命令队列162,图2A)存取新的命令。在一个实施例中,存储器控制器122从存储器***中的RAM(例如,储存器264中的SQ 162,图2A)存取新的命令。
在步骤506中,存储器控制器122将字段322中的数据指针添加到该命令的命令上下文储存器。注意,这是在该示例中的对数据缓冲器的指针。存储器控制器122还将字段324中的列表指针添加到该命令的命令上下文储存器。
注意,命令解析器248可以解析命令,以基于字段324应该如何处理确定数据缓冲器指针(例如,NVMe PRP条目)。例如,如果字段324不是列表指针,则数据缓冲器指针处理不需要使用过程500。
步骤508用于存储器控制器122来将命令发布到存储器裸芯,以进行读取操作。注意,其假设了来自主机的读取命令涉及多个存储器裸芯上的物理位置。读取不需要涉及多个存储器裸芯,在这种情况下存储器控制器可以将读取命令发布到一个存储器裸芯。
步骤510包含存储器控制器122接收指示,其指示从存储器裸芯中的一个所读取的数据即将准备好以用于DMA。然而,注意,这不一定是来自存储器裸芯的原始数据。典型地,误差校正由ECC 224进行。另外,可以采取其它步骤,诸如解密或加密。因此,在其被放置于读取缓冲器中用于传送到主机***之前,从存储器裸芯所读取的数据可以通过存储器控制器中的管道。
在一个实施例中,DMA是用于预定数量的主机数据缓冲器。例如,DMA可以用于八个主机数据缓冲器。作为一个示例,每个主机数据缓冲器是4K字节,其可以是用于32K字节的DMA。
步骤512包含存储器控制器存取用于读取的这部分的数据缓冲器指针(例如,NVMePRP)。这些数据缓冲器指针可以储存在存储器裸芯(数据从该存储器裸芯读取)的数据缓冲器指针储存器252中。
步骤514是等待,直到数据准备好被DMAd。在一个实施例中,当其被放置到存储器***100的RAM 122b中的读取缓冲器中时,数据准备好被DMAd。如以上提到的,在其被放置到读取缓冲器中用于传送到主机***之前,数据可以通过存储器控制器中的管道。
在步骤516中,存储器控制器使用数据缓冲器指针来从存储器控制器到主机数据缓冲器进行数据的DMA。
在一个实施例中,存储器控制器利用了步骤510的指示和步骤514中准备好传送数据之间的短延迟的优势,来在步骤512中找取数据缓冲器指针。基于以下因素,可以容易地计算(或者至少估计)延迟:从将读取命令发布到存储器裸芯直到存储器裸芯将数据发送到存储器控制器通常将花费多长时间,处理数据(例如,ECC加密/解密等)通常将花费存储器控制器多长时间,以及从主机存储器(或者替代地储存器264)找取数据缓冲器指针通常将花费多长时间。存储器控制器122对找取计时,使得在数据准备好传送到主机数据缓冲器的时候,数据缓冲器指针准备好用于DMA。因此,数据缓冲器指针可以被“恰好及时地”提供。
然而,存储器控制器122避免了过早地找取数据缓冲器指针(例如,NVMe PRP)使得存储器空间为了保持DMA还不需要的数据缓冲器指针而被浪费。另外,在实施例中,存储器控制器122避免了多于一次地找取数据缓冲器指针(例如,NVMe PRP)。在一个实施例中,这可能是因为存储器控制器122不找取数据缓冲器指针,直到知道DMA准备好。与此相反,可能找取大量数据缓冲器指针(不管它们是否需要)的一些技术可以结束数据缓冲器指针的覆写,并且因此需要重新找取该数据缓冲器指针。这不仅浪费了存储器***上的存储器空间,也浪费了存储器***和主机之间的数据总线的传输带宽。与此相反,本文公开的一些实施例通过仅通过总线来传送每个数据缓冲器指针(例如,每个NVMe PRP)一次,高效地使用总线带宽。
图6是对写入命令从存储器***到主机***进行DMA的过程600的一个实施例的流程图。该处理600假设命令与数据缓冲器指针的多个列表(例如,多个NVMe PRP列表)相关联。将相对于图3A或3B的示例命令320来讨论过程600,但是不限于此。
在步骤602中,“门铃”响起。在步骤604中,响应于门铃,存储器控制器122从SQ 162找取新的命令。在步骤606中,存储器控制器122将字段322中的数据指针添加到该命令的命令上下文储存器。步骤602、604和606可以分别相似于过程500的步骤502、504和506。
在步骤608中,存储器控制器122确定写入缓冲器即将准备好用于新的数据。在一个实施例中,该写入缓冲器是存储器***100中的缓冲器,该缓冲器用于储存要被写入到存储器裸芯108的数据。写入缓冲器可以用于储存从主机存储器160中的数据缓冲器存取的数据。
步骤610包含存取用于写入的部分的数据缓冲器指针(例如,NVMe PRP)的存储器控制器。例如,存储器控制器可以确定,要被写入的数据的一些32K字节的部分需要怎样的数据缓冲器指针。这些数据缓冲器指针可以储存在存储器裸芯(数据要被写入到该存储器裸芯)的数据缓冲器指针储存器252中。
步骤612是确定写入缓冲器是否具有用于要从主机数据缓冲器传送的数据的空间。如果不是,过程等待。当充足的空间可用时,处理在步骤614处继续。
在步骤614中,存储器控制器使用数据缓冲器指针来从主机数据缓冲器到写入缓冲器进行数据的DMA。
在步骤616中,存储器控制器将命令发布到要写入数据的存储器裸芯,以进行写入操作。过程600然后可以返回步骤608,其指示存储器控制器再次确定写入缓冲器即将准备好用于新的数据。
在一个实施例中,在步骤610中,存储器控制器利用了步骤608的指示和步骤612中准备好写入缓冲器之间的短延迟的优势来找取数据缓冲器指针。
图7是命令上下文储存器242、环缓冲器752、缓冲器指针管理器250和主机存储器160的一个实施例的图。环缓冲器752是数据缓冲器指针储存器252的一个实施例。
在一个实施例中,对于每个显著的读取或写入命令可以存在一个命令上下文储存器242(1)到242(n)。命令上下文储存器具有字段702,其可以用于储存来自主机命令的数据缓冲器指针。在一个实施例中,字段702用于储存来自图3的示例的命令320中的字段322的值。在图7中,该值被称为PRP1,并且是被称为“data_ptr0”的数据缓冲器指针。这可以是主机存储器中的数据缓冲器的序列中的第一个。
字段704可以用于储存来自命令320的列表指针。在一个实施例中,字段704用于储存来自图3的示例的命令320中的字段324的值。在图7中,该值被称为PRP2,并且是被称为“list_ptr0”的列表指针。注意,其指向主机存储器160中的数据缓冲器指针的第一列表304(1)。
PRPTR_A 706可以用于储存对数据缓冲器指针的列表(例如,NVMe PRP的列表)的指针。PPTR_A_INDEX 708是用于PRPTR_A 706中储存的指针的索引。索引是从零开始向上的整数,其指示了正在指向哪个列表304。零的值可以用于指示PRPTR_A 706中的值未指向任何列表。如提到的,命令可以与数据缓冲器指针304的多个列表相关联。这些列表304可以基于其主机存储器地址来编号。
PRPTR_B 710可以用于储存对PRP的列表的指针。PPTR_B_INDEX 712是用于PRPTR_B 710中储存的指针的索引。索引是从零开始向上的整数,其指示了正在指向哪个列表304。零的值可以用于指示PRPTR_B 710中的值未指向任何列表。
剩下的数据指针缓冲器可以储存当字段702中的第一数据缓冲器指针具有偏移时的相关的值。图10提供了使用剩下的数据指针缓冲器714的一个实施例的其它细节。在一个实施例中,剩下的数据指针缓冲器714储存剩下的NVMe PRP条目。
主机存储器160包含数据缓冲器指针(例如,NVMe PRP)的多个列表。在该示例中,存在列表304(1)和304(2)。与列表304相关联的值“1”(或“2”)是指索引。可以存在许多更多的列表304,其每个具有他们自身的索引。
在一个实施例中,对每个存储器裸芯都存在一个环缓冲器752。环缓冲器752每个都储存数据缓冲器指针。在一个实施例中,环缓冲器752储存NVMe PRP。在一个实施例中,环缓冲器252(1)到252(m)每个都是圆形(环)缓冲器。在一个实施例中,从给定存储器裸芯读取的数据按顺序地传送到主机数据缓冲器。通过“按顺序”,其是指按照给定存储器裸芯的环缓冲器中的指针的顺序。然而,来自不同存储器裸芯的数据相对于其它存储器裸芯不必要按顺序传送。例如,如果这两个数据指针与从两个不同存储器裸芯读取的数据相关联,则在对被data_ptr2(两者都在列表304(1)中)所指向的数据缓冲器进行DMA之前,存储器***100可以对被data_ptrN所指向的数据缓冲器进行DMA。因此,缓冲器指针管理器250可以配置为相对于其它存储器裸芯的环缓冲器不按顺序地进行对于给定存储器裸芯的环缓冲器的DMA。
缓冲器指针管理器250配置为从命令上下文储存器242存取列表指针,并且使用这些来存取来自主机存储器160的数据指针和其它列表指针。缓冲器指针管理器250配置为将数据缓冲器指针传送到适当的环缓冲器252。例如,缓冲器指针管理器250配置为传送与存储器裸芯相关联的环缓冲器252的数据指针,该存储器裸芯将进行与这些数据指针相关联的读取或写入。缓冲器指针管理器250配置为向命令上下文储存器传送新的列表指针。
图8是管理列表指针的过程800的一个实施例的流程图。该过程800可以与图7的上下文储存器的一个实施例一起使用,但是不限于此。当来自主机***140的新的命令正在由存储器控制器处理时,过程800开始。在一个实施例中,当存储器控制器122接收到具有与其相关联的数据缓冲器指针的多个列表的命令时,存储器控制器122进行过程800。例如,当存储器控制器122接收到具有与其相关联的多个NVMe PRP列表的命令时,存储器控制器122可以进行过程800。
在步骤802中,存储器控制器122在PPTR_A 706中储存列表指针。此外,存储器控制器可以在字段702和704中储存指针。参考图3的示例,来自字段322的对第一缓冲器的指针可以储存在字段702中,并且来自字段324的列表指针可以储存在字段704中。来自字段324的列表指针还可以储存在PPTR_A 706中。
步骤804包含将PPTR_A_INDEX设定为识别哪个列表304储存在PPTR_A 706中。参考图7的示例,最初,PPTR_A_INDEX可以设定为“1”,以指示PPTR_A 706指向列表304(1)。注意,此时,PPTR_B_INDEX可以设定为“0”,以指示PPTR_B 710不包含高效列表指针。
在处理命令的某些点处,可以存在对列表304(对于该列表304,存储器***不具有列表指针)中的数据缓冲器指针(例如,NVMe PRP条目)的需求。换言之,存储器***不具有对某一列表304的列表指针。这可以是因为字段704、706或者710中没有一个具有诸如列表指针。当其发生(步骤806=是)时,然后存储器控制器可以存取新的列表指针并且将其储存到PPTR_B 710。存储器控制器122可以确定以下需要哪个数据缓冲器指针(例如,NVMe PRP条目)。参考图7的示例,第一列表304(1)含有若干数据指针(data_ptr1–data_ptrN)。存储器控制器122可以确定所需的数据缓冲器指针不在列表304(1)中的某处。为了如此进行,存储器控制器122知道多少数据缓冲器指针是在列表304(1)上以及多少逻辑区块与列表相关联。在一个实施例中,每个数据缓冲器指针与一个逻辑区块相关联。因此,存储器控制器可以确定逻辑区块的哪个范围对应于列表304(1)。这仅仅是用于确定所需的数据缓冲器指针是否在列表304(1)中的一个示例。
为了讨论,存储器控制器122确定DMA需要列表304(2)内的数据缓冲器指针。存储器控制器存取来自列表304(1)的末端的list_ptr1。注意到list_ptr1指向列表304(2)。因此,list_ptr1可以储存在PPTR_B 710中。在一个实施例中,列表指针从主机存储器存取(例如,从主机存储器160中的数据缓冲器指针166,图2A)。在一个实施例中,列表指针从主机存储器存取(例如,从主机存储器264中的数据缓冲器指针166,图2B)。
另外,在步骤810中,索引“2”可以储存在PPTR_B_INDEX 712中,以识别储存在PPTR_B 710中的列表指针指向列表304(2)。注意,PPTR_B 710可以指向一些其它列表,在这种情况下PPTR_B_INDEX 712被设定为该列表304的相对索引。
在某些点处,DMA可以需要另一个列表指针。当存储器控制器确定需要一个指针(步骤812=是)时,过程800返回到步骤802。这次,储存在PPTR_A 706中的列表指针以新的列表指针来覆写。例如,存储器控制器可以在PPTR_A 706中储存来自的列表304(2)的末端的list_ptr2。在这种情况下,存储器控制器可以在PPTR_A_INDEX 708中储存索引”3”,以指示哪个PRP列表通过PPTR_A 706指向。
过程800可以继续使用PPTR_A 706和PPTR_B 710来作为”乒乓”缓冲器(”ping-pong”buffer),其中当DMA需要新的列表指针时覆写最老的列表指针。
注意,不需要顺序地使用列表304。当然,可能接下来可以需要跳过索引的列表304。另外,注意,多于或少于两个列表指针可以储存在一个命令的命令上下文中。例如,对第三列表指针可以存在PPTR_C和PPTR_C_INDEX。另外,在一个实施例中,不需要PPTR_B_INDEX 712和PPTR_B 710。
图9是存取数据缓冲器指针的过程900的一个实施例的流程图。过程900是过程400的步骤410的一个实施例。在一个实施例中,过程400用于存取NVMe PRP条目。在一个实施例中,数据缓冲器指针从主机存储器存取(例如,从主机存储器160中的数据缓冲器指针166,图2A)。在一个实施例中,数据缓冲器指针从主机存储器存取(例如,从主机存储器264中的数据缓冲器指针166,图2B)。
在步骤902中,存储器控制器计算DMA需要哪个数据缓冲器指针(例如,NVMe PRP条目)。在一个实施例中,存储器控制器基于主机的逻辑地址来做出该计算。存储器控制器可以在主机***所使用的逻辑地址和非易失性储存器中的物理地址之间进行转换。因此当例如存储器控制器即将传送从某些物理地址读取的一些数据单元时,存储器控制器可以将这些物理地址转换成逻辑地址。回想到,起始逻辑地址可以在来自主机***的读取命令中指定。还回想到,数据缓冲器指针可以是某一大小(例如,64位)并且每个数据缓冲器可以是某一大小(例如,4KB)。采用这些信息,存储器控制器能够确定,所需的数据缓冲器指针(对于LBA)存在于进入数据缓冲器指针的列表的多远处。
在步骤904处,存储器控制器确定与所需的数据缓冲器指针相关联的列表指针是否储存在存储器***100中。在一个实施例中,缓冲器指针管理器250确定字段706或者710是否含有所需的列表指针。在一个实施例中,缓冲器指针管理器250计算哪个索引用于所需的列表304。换言之,缓冲器指针管理器250计算所需的数据缓冲器指针是否在第一列表304(1)、第二列表304(2)、第三列表、第四列表等中。缓冲器指针管理器250可以简单地检查字段708和712,以确定是字段708还是712含有所需的列表的索引。
如果所需的列表指针已经储存在存储器***100中,则存储器控制器可以使用该列表指针来从主机存储器中的相关列表找取所需的数据缓冲器指针。例如,存储器控制器可以使用来自字段706的PPTR_A或者来自字段710的PPTR_B,来确定列表304的起始位置。然后,存储器控制器确定所需数据缓冲器指针存在于进入该列表的多远处。
在一个实施例中,存储器控制器仅从列表存取所需的数据缓冲器指针。例如,可能只需要512个数据缓冲器指针的列表之中的八个数据缓冲器指针。在一个实施例中,存储器控制器经由PCIe总线通过获得单个事务层信息包(TLP)信息包来存取所需的数据缓冲器指针。因此,可以相对于PCIe总线使用而非常高效地获得所需的数据缓冲器指针。注意,为了通过PCIe总线的高效传送可以优化所获得的数据缓冲器指针的数量。在一些情况下,多于或少于八个数据缓冲器指针可以使得PCIe总线更高效地使用。
在一个实施例中,所找取的数据缓冲器指针可以储存到适当的环缓冲器中。例如,数据缓冲器指针可以与某一存储器裸芯的读取操作相关联。因此,数据缓冲器指针可以放置到该存储器裸芯的环缓冲器中。
如果所需的列表指针还未储存在存储器***100(步骤904=否)中,则在步骤908中,存储器控制器从主机存储器中的相关列表找取所需的列表指针。例如,存储器控制器可以使用来自字段706的PPTR_A或者来自字段710的PPTR_B,来确定列表304中的一个的起始位置。[注意,在该示例中,PPTR_A或PPTR_B都不是所需的列表指针。]然后,存储器控制器可以确定所需的列表指针存在于与该列表的起点相距多远的地方。参考图7,作为一个示例,假设所需的列表指针是在列表304(2)的末端处的list_ptr2。在这种情况下,存储器控制器可以基于列表304(2)的起点和列表304(2)的长度来确定list_ptr2的位置。注意,存储器控制器可以采用新的列表指针来覆写在字段706或字段710中的列表指针。
在步骤910中,存储器控制器从主机存储器中的相关列表找取所需的数据缓冲器指针。该步骤可以相似于步骤906,现在所需的列表指针是现在可用的。
图10是当第一数据缓冲器指针具有非零偏移时管理数据缓冲器指针的过程1000的一个实施例的流程图。图10提供了过程400的一个实施例的其它细节。在图10中,该示例是关于读取命令的。然而,该过程可以修改为写入命令。图7的命令上下文242可以用于过程1000中,但是过程1000不限于该示例。在一个实施例中,过程1000由图2A中的存储器控制器进行。在一个实施例中,过程1000由图2B中的存储器控制器进行。然而,过程1000不限于图2A或者2B。
在步骤1002中,存储器控制器确定给定的DMA所需要的数据缓冲器指针(例如,NVMe PRP条目)。这可以是例如64KB DMA。然而,DMA可以是一些其它的大小。其可以是写入或者读取。
在步骤1004中,存储器控制器确定PRP1是否具有非零偏移。例如,缓冲器指针管理器250可以确定命令上下文储存器242的字段702中的“data_ptr0”是否具有非零偏移。该偏移可以位于这个字段702中的位的某一范围中。
如果不存在非零偏移(步骤1004=否),则可以如过程900中的步骤904-910来继续处理。如果存在非零偏移(步骤1004=是),则可以在步骤1006处继续处理。注意,图3B中描绘了非零偏移的示例。在步骤1006中,存储器控制器确定,是否任何所需要的数据缓冲器指针(例如,NVMe PRP条目)储存在剩下的数据缓冲器指针储存器714中。例如,这些可以是上述示例中提到的数据传送的第一个和/或最后一个数据缓冲器指针。
如果所需要的数据缓冲器指针中的任一个是在剩下的数据缓冲器指针储存器714中,则在步骤1008中,从剩下的数据缓冲器指针储存器714来存取这些数据缓冲器指针。在一个实施例中,这些数据缓冲器指针可以传送到适当的环缓冲器。另外,从剩下的数据缓冲器指针储存器714所存取的数据缓冲器指针可以从剩下的数据缓冲器指针储存器714丢弃。在一个实施例中,由于将不再需要这些数据缓冲器指针,因此这节约了存储器空间。在本文中,“丢弃”数据缓冲器指针是指允许储存了数据缓冲器指针的存储器空间被释放,使得该空间可以用于另一个数据缓冲器指针。这可以通过将存储器空间标记为可用于另一个数据缓冲器指针来完成。这不需要存储器空间的物理改变。例如,在稍后的某些时间点,被丢弃的数据缓冲器指针可以被覆写。存储器控制器可以提示哪个存储器位置目前具有高效的(未丢弃的)数据缓冲器指针以及剩下的数据缓冲器指针储存器714中的哪个存储器位置是空闲的。然后,可以如过程900中的步骤904-910来继续处理,以便获得用于该数据传送的其它数据缓冲器指针。
如果所需的数据缓冲器指针中没有一个是在剩下的数据缓冲器指针储存器714中,则可以如过程900中的步骤904-910来继续处理,以便获得用于该数据传送的全部数据缓冲器指针。
在步骤1010中,存储器控制器确定是否存在将要在数据传送之后被完全占据的任何主机数据缓冲器。例如,在数据传送之后,第一个和/或最后一个主机数据缓冲器可能将不会被完全占据。如果如此,则在步骤1012中,与这些未被完全占据的数据缓冲器相关联的数据缓冲器指针储存在剩下的数据缓冲器指针储存器714中。完全占据是指,例如整个4KB数据缓冲器将具有写入到其中的数据。数据缓冲器可以是另外的大小。
如果主机数据缓冲器将被完全占据,则该过程可以结束,而不保存剩下的数据缓冲器指针储存器714中的任何数据缓冲器指针。另外,在进行步骤1012的事件下,任何被完全占据的对应于数据缓冲器的数据缓冲器指针不被储存在剩余数据缓冲器指针储存器714中。
在进行DMA之后,DMA中涉及的数据缓冲器指针的全部可以在环缓冲器752中。在一个实施例中,缓冲器指针管理器250确定,DMA中涉及的环缓冲器752中的数据缓冲器指针现在可以被覆写。因此,在DMA之后,无论是否进行步骤1012,环缓冲器752中的数据缓冲器指针可能丢失。
还可以提供相应的方法、***以及具有用于进行本文中提供的方法的可执行代码的计算机-或处理器-可读储存装置。
已经为图示和描述的目的呈现了本发明的详细描述。其不意图穷举或将本发明限制为所公开的精确形式。鉴于以上教导,可以进行诸多修改和变体。选择所描述的实施例,以便最佳地解释本发明的原理及其应用,以由此使得本领域其它技术人员能够在各种实施例中且以如适合于预期的特定用途的各种修改中最佳地利用本发明。本发明的范围意图由所附权利要求限定。

Claims (20)

1.一种非易失性储存器***,包括:
多个非易失性存储器单元;
命令上下文储存器;以及
与所述命令上下文储存器和所述多个非易失性存储器单元通信的控制电路,所述控制电路配置为:
从主机***存取命令,以存取所述非易失性储存器***中的非易失性存储器单元,所述命令包括对第一列表的第一列表指针,所述第一列表包括对所述主机***中的数据缓冲器的数据缓冲器指针;
在所述命令上下文储存器中储存所述第一列表指针;
在所述命令上下文储存器中储存对所述主机***中的数据缓冲器指针的第二列表的第二列表指针;
响应于确定要用于直接存储器存取DMA以响应命令的数据缓冲器指针是在所述第一列表或是在所述第二列表内,使用所述第一列表指针或者所述第二列表指针来找取所述数据缓冲器指针;以及
响应于确定要用于直接存储器存取DMA以响应命令的所述数据缓冲器指针不在所述第一列表或者所述第二列表内,从主机***存储器找取第三列表指针,并且使用所述第三列表指针来找取所述数据缓冲器指针;以及
在非易失性储存器***和由找取的数据缓冲器指针指向的主机***中的数据缓冲器之间执行直接存储器访问DMA。
2.如权利要求1所述的非易失性储存器***,其中所述控制电路还配置为:
在所述命令上下文储存器中储存所述第三列表指针,其中所述第三列表指针覆写所述第一列表指针或者所述第二列表指针;以及
在所述命令上下文储存器中储存所述第三列表指针的索引。
3.如权利要求1所述的非易失性储存器***,还包括:
对于所述非易失性储存器***中的多个存储器裸芯中的每一个存储器裸芯的分开的数据缓冲器指针储存器,其中所述控制电路还配置为在所述多个存储器裸芯的相应的数据缓冲器指针储存器中储存对主机***数据缓冲器的数据缓冲器指针。
4.如权利要求3所述的非易失性储存器***,其中所述控制电路还配置为相对于其它存储器裸芯的数据缓冲器指针储存器不按顺序地进行对于给定存储器裸芯的数据缓冲器指针储存器的DMA。
5.如权利要求1所述的非易失性储存器***,其中所述数据缓冲器指针是非易失性存储器快速NVMe接口中的物理区域页PRP指针。
6.如权利要求1所述的非易失性储存器***,其中:
所述控制电路配置为通过***计算机接口快速PCIe总线来找取所述数据缓冲器指针连同对主机***数据缓冲器的其它数据缓冲器指针;
所述命令与所述主机***的存储器中的数据缓冲器指针的多个列表相关联;并且
所述控制电路还配置为通过PCIe总线,仅找取与单个事务层信息包TLP相适配的数据缓冲器指针。
7.如权利要求1所述的非易失性储存器***,其中:
所述命令是读取命令;并且
所述控制电路还配置为在所述控制电路向所述非易失性储存器***中的存储器裸芯发布读取操作以满足所述读取命令之后,但是在响应于所述读取命令而从所述存储器裸芯读取的数据准备好传送到所述主机***之前,找取所述数据缓冲器指针。
8.如权利要求1所述的非易失性储存器***,其中所述控制电路还配置为响应于确定所述DMA存取由所述数据缓冲器指针所指向的整个主机数据缓冲器,而丢弃所述数据缓冲器指针。
9.如权利要求1所述的非易失性储存器***,其中所述控制电路还配置为从主机***存储器找取所述数据缓冲器指针。
10.如权利要求1所述的非易失性储存器***,还包括:
存储器控制器;以及
耦接到所述存储器控制器的储存单元,其中所述控制电路还配置为从耦接到所述存储器控制器的所述储存单元来找取所述数据缓冲器指针。
11.如权利要求1所述的非易失性储存器***,其中所述DMA是第一DMA,并且其中所述控制电路还被配置为:
响应于所述第一DMA不存取整个数据缓冲器,将找取的数据缓冲器指针保存到命令上下文储存器中;
从所述命令上下文储存器存取保存的数据缓冲器指针;以及
使用保存的数据缓冲器指针来进行第二DMA,以存取主机数据缓冲器的由数据缓冲器指针所指向的、所述第一DMA未存取的部分。
12.一种操作非易失性储存器***的方法,所述方法包括:
从主机***存取命令,以存取在所述非易失性储存器***中的非易失性存储器单元,所述命令包括第一字段和第二字段,所述第一字段具有对数据缓冲器的数据缓冲器指针,所述第二字段具有对所述主机***中的数据缓冲器的数据缓冲器指针的第一列表的第一列表指针;
在所述非易失性储存器***中的命令上下文储存器中储存所述第一列表指针;
在所述命令上下文储存器中储存对所述主机***中的数据缓冲器指针的第二列表的第二列表指针;
响应于确定要用于对于非易失性存储器单元的第一读取操作或第一写入操作的第一直接存储器存取DMA以响应命令的第一数据缓冲器指针是在所述第一列表或是在所述第二列表内,使用所述第一列表指针或者所述第二列表指针来找取所述第一数据缓冲器指针,其中将所述第一数据缓冲器指针从所述主机***找取到所述非易失性储存器***中的储存器;以及
响应于确定要用于对于非易失性存储器单元的第二读取操作或第二写入操作的第二DMA以响应命令的第二数据缓冲器指针不在所述第一列表或者所述第二列表内,从主机***存储器找取第三列表指针并且使用所述第三列表指针来找取所述第二数据缓冲器指针,其中将所述第二数据缓冲器指针从所述主机***找取到所述非易失性储存器***中的储存器;
在非易失性储存器***和由找取的第一数据缓冲器指针指向的主机***中的数据缓冲器之间执行第一DMA;以及
在非易失性储存器***和由找取的第二数据缓冲器指针指向的主机***中的数据缓冲器之间执行第二DMA。
13.如权利要求12所述的方法,还包括:
响应于确定所述第一DMA已经完全地存取了由所述第一数据缓冲器指针所指向的主机数据缓冲器,而丢弃所述第一数据缓冲器指针。
14.如权利要求12所述的方法,还包括:
响应于所述第二DMA中的特定DMA存取由所述第二数据缓冲器指针中的特定数据缓冲器指针所指向的整个主机数据缓冲器,而确定所述特定数据缓冲器指针不应被保存。
15.如权利要求12所述的方法,其中所述第一列表指针指向所述主机***中的非易失性存储器快速NVMe物理区域页PRP条目的第一列表,并且所述第二列表指针指向所述主机***中的NVMe PRP条目的第二列表。
16.如权利要求12所述的方法,其中使用所述第三列表指针来找取所述第二数据缓冲器指针包括:在初始化所述第二读取操作之后但是在从存储器裸芯读取的数据准备好传送到所述主机***之前,找取对所述主机***的数据缓冲器的第二数据缓冲器指针。
17.如权利要求12所述的方法,还包括:
在对于所述非易失性储存器***中的多个存储器裸芯中的每一个存储器裸芯的、所述非易失性储存器***中的分开的数据缓冲器指针储存器中保存对主机***数据缓冲器的数据缓冲器指针。
18.如权利要求12所述的方法,其中使用所述第一列表指针或者所述第二列表指针来找取所述第一数据缓冲器指针,以及使用所述第三列表指针来找取所述第二数据缓冲器指针包括:
通过PCIe总线来仅找取与单个事务层信息包TLP相适配的数据缓冲器指针。
19.如权利要求12所述的方法,还包括:
响应于对于第一数据缓冲器指针的特定数据缓冲器指针的第一DMA不存取由所述特定数据缓冲器指针所指向的整个数据缓冲器,将特定数据缓冲器指针保存到命令上下文储存器中;
从所述命令上下文储存器存取保存的特定数据缓冲器指针;以及
使用保存的数据缓冲器指针来进行第二DMA,以存取主机数据缓冲器的由所述特定数据缓冲器指针所指向的、对于特定数据缓冲器指针的第一DMA未存取的部分。
20.一种非易失性储存器***,包括:
非易失性存储器单元的多个存储器裸芯;
构件,用于从主机***存取命令,以存取所述非易失性存储器单元;
构件,用于解析所述命令,以确定所述命令是否具有第一字段和第二字段,所述第一字段具有对数据缓冲器的指针,所述第二字段具有对主机***中的数据缓冲器的数据缓冲器指针的第一列表的第一列表指针;
构件,用于储存第一列表指针;
构件,用于储存对所述主机***中的数据缓冲器指针的第二列表的第二列表指针;
构件,用于响应于所述命令来初始化所述非易失性储存器***中的存储器裸芯中的非易失性存储器单元的存储器阵列操作;
构件,用于响应于确定所述数据缓冲器指针是在所述第一列表或者所述第二列表内,使用所述第一列表指针或者所述第二列表指针来找取要用于对于所述存储器阵列操作的主机***中的存储器的直接存储器存取DMA的对所述主机***的数据缓冲器的数据缓冲器指针;
构件,用于响应于确定所述数据缓冲器指针不在所述第一列表或者所述第二列表内,从主机***存储器找取第三列表指针并且使用所述第三列表指针来找取所述数据缓冲器指针;以及
构件,用于在非易失性储存器***和由找取的数据缓冲器指针指向的主机***中的数据缓冲器之间执行DMA。
CN201810151717.4A 2017-03-07 2018-02-14 用于直接存储器存取的数据缓冲器指针找取 Active CN108572933B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/452,039 2017-03-07
US15/452,039 US10275378B2 (en) 2017-03-07 2017-03-07 Data buffer pointer fetching for direct memory access

Publications (2)

Publication Number Publication Date
CN108572933A CN108572933A (zh) 2018-09-25
CN108572933B true CN108572933B (zh) 2021-02-19

Family

ID=60655113

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810151717.4A Active CN108572933B (zh) 2017-03-07 2018-02-14 用于直接存储器存取的数据缓冲器指针找取

Country Status (4)

Country Link
US (1) US10275378B2 (zh)
CN (1) CN108572933B (zh)
DE (1) DE112017005890T5 (zh)
WO (1) WO2018164741A1 (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10254967B2 (en) * 2016-01-13 2019-04-09 Sandisk Technologies Llc Data path control for non-volatile memory
US10528267B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Command queue for storage operations
US10528255B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US10528286B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US20180341494A1 (en) * 2017-05-26 2018-11-29 Intel Corporation Accelerating network security monitoring
TWI662409B (zh) * 2018-01-23 2019-06-11 祥碩科技股份有限公司 實體區域頁面位址轉換器與實體區域頁面清單存取方法
KR20190135746A (ko) * 2018-05-29 2019-12-09 삼성전자주식회사 쓰기 버퍼 메모리를 포함하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법
US10943032B2 (en) * 2018-07-31 2021-03-09 EMC IP Holding Company LLC Data encryption and decryption techniques
CN110109845B (zh) * 2019-04-26 2021-03-05 深圳忆联信息***有限公司 缓存数据管理方法、装置、计算机设备及存储介质
EP3842952B1 (en) * 2019-12-23 2023-05-10 Samsung Electronics Co., Ltd. Storage controller managing completion timing, and operating method thereof
KR20210080761A (ko) * 2019-12-23 2021-07-01 삼성전자주식회사 컴플리션 타이밍을 관리하는 스토리지 컨트롤러, 및 이의 동작 방법
US11507309B2 (en) * 2020-05-04 2022-11-22 Western Digital Technologies, Inc. Storage system and method for using memory allocated in a host for read data as a host memory buffer
US11934693B2 (en) 2021-01-20 2024-03-19 Western Digital Technologies, Inc. Detection of scattered data locations
US11809745B2 (en) 2021-05-13 2023-11-07 Western Digital Technologies, Inc. Multi-fetching data for multi-pass programming within storage devices
US11853555B2 (en) * 2021-10-11 2023-12-26 Western Digital Technologies, Inc. NVMe dual port enterprise SSD optimization
US20230136664A1 (en) * 2021-11-02 2023-05-04 SK Hynix Inc. Storage device and electronic device
US11656798B1 (en) * 2021-12-03 2023-05-23 Western Digital Technologies, Inc. Immediate partial host buffer fetching
US11768606B2 (en) 2021-12-27 2023-09-26 Western Digital Technologies, Inc. Maximizing performance through traffic balancing
US11847323B1 (en) * 2022-06-07 2023-12-19 Westem Digital Technologies, Inc. Data storage device and method for host buffer management
CN115622954B (zh) * 2022-09-29 2024-03-01 中科驭数(北京)科技有限公司 数据传输方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5890212A (en) * 1997-05-28 1999-03-30 Western Digital Corporation Disk drive with cache employing host pointer jumps during skip-ahead or semi-repeating accesses
CN101763246A (zh) * 2008-12-23 2010-06-30 国际商业机器公司 用于对直接存储器存取引擎进行编程的方法和装置
CN103021460A (zh) * 2011-09-22 2013-04-03 爱思开海力士有限公司 包括存储器件和***的半导体器件的设定数据储存
CN105593942A (zh) * 2013-09-30 2016-05-18 美光科技公司 非易失性存储器装置中的易失性存储器架构及相关控制器

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6981104B2 (en) * 2002-07-12 2005-12-27 Hewlett-Packard Development Company, L.P. Method for conducting checkpointing within a writeback cache
US8817029B2 (en) * 2005-10-26 2014-08-26 Via Technologies, Inc. GPU pipeline synchronization and control system and method
KR20120001405A (ko) 2010-06-29 2012-01-04 삼성전자주식회사 메모리 시스템 및 그것의 웨어 레벨링 방법
US8589735B2 (en) * 2011-05-16 2013-11-19 International Business Machines Corporation Creating randomly ordered fields while maintaining the temporal ordering based on the value of the fields
US9148819B2 (en) * 2012-11-06 2015-09-29 Peraso Technologies, Inc. In-place A-MSDU aggregation for wireless systems
US20140331001A1 (en) 2013-05-02 2014-11-06 Lsi Corporation Command Barrier for a Solid State Drive Controller
US8977786B1 (en) * 2013-07-30 2015-03-10 Qlogic, Corporation Method and system for processing information at peripheral devices
US20160342545A1 (en) 2014-02-12 2016-11-24 Hitachi, Ltd. Data memory device
KR102330389B1 (ko) 2014-07-24 2021-11-24 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 처리 방법
US9563367B2 (en) 2014-08-26 2017-02-07 HGST Netherlands B.V. Latency command processing for solid state drive interface protocol
US9678665B2 (en) * 2015-03-06 2017-06-13 Western Digital Technologies, Inc. Methods and systems for memory page allocation
US9990138B2 (en) * 2015-03-31 2018-06-05 Toshiba Memory Corporation Out of order SGL read sorting in a mixed system with PRP read or system that supports only SGL reads
US10108565B2 (en) * 2015-03-31 2018-10-23 Toshiba Memory Corporation Method for on-demand fetching of SGL pointers based buffer, traffic and command requirements

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5890212A (en) * 1997-05-28 1999-03-30 Western Digital Corporation Disk drive with cache employing host pointer jumps during skip-ahead or semi-repeating accesses
CN101763246A (zh) * 2008-12-23 2010-06-30 国际商业机器公司 用于对直接存储器存取引擎进行编程的方法和装置
CN103021460A (zh) * 2011-09-22 2013-04-03 爱思开海力士有限公司 包括存储器件和***的半导体器件的设定数据储存
CN105593942A (zh) * 2013-09-30 2016-05-18 美光科技公司 非易失性存储器装置中的易失性存储器架构及相关控制器

Also Published As

Publication number Publication date
CN108572933A (zh) 2018-09-25
DE112017005890T5 (de) 2019-08-01
US10275378B2 (en) 2019-04-30
WO2018164741A1 (en) 2018-09-13
US20180260347A1 (en) 2018-09-13

Similar Documents

Publication Publication Date Title
CN108572933B (zh) 用于直接存储器存取的数据缓冲器指针找取
US11487434B2 (en) Data storage device and method for adaptive command completion posting
US10725835B2 (en) System and method for speculative execution of commands using a controller memory buffer
US10296473B2 (en) System and method for fast execution of in-capsule commands
CN108885584B (zh) 使用主机存储器缓冲区的无序读取传输
US10296249B2 (en) System and method for processing non-contiguous submission and completion queues
US10025532B2 (en) Preserving read look ahead data in auxiliary latches
US10613778B2 (en) Dynamic host memory allocation to a memory controller
CN110073323B (zh) 使用控制器存储器缓冲区进行推测性执行命令的***和方法
US10558576B2 (en) Storage device with rapid overlay access
US20180329815A1 (en) Storage system and method for non-volatile memory command collision avoidance with explicit tile grouping
US10740243B1 (en) Storage system and method for preventing head-of-line blocking in a completion path
US10713157B2 (en) Storage system and method for improving read performance using multiple copies of a logical-to-physical address table
US10372378B1 (en) Replacement data buffer pointers
US11914900B2 (en) Storage system and method for early command cancelation
US11537325B2 (en) Storage system and method for token provisioning for faster data access
US11544107B2 (en) Storage system and method for multiprotocol handling

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