CN114003514A - 用于处理复制命令的系统和方法 - Google Patents
用于处理复制命令的系统和方法 Download PDFInfo
- Publication number
- CN114003514A CN114003514A CN202110624906.0A CN202110624906A CN114003514A CN 114003514 A CN114003514 A CN 114003514A CN 202110624906 A CN202110624906 A CN 202110624906A CN 114003514 A CN114003514 A CN 114003514A
- Authority
- CN
- China
- Prior art keywords
- command
- data
- storage device
- metadata
- controller
- 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 OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0607—Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
公开了用于处理复制命令的系统和方法。存储装置的第一控制器经由第一队列从主机接收复制命令。存储装置基于复制命令生成读取命令和写入命令,并且经由第二队列将读取命令和写入命令提交到存储装置的第二控制器。第二控制器从第二队列获取并处理读取命令和写入命令。存储装置基于对读取命令的处理来读取存储在存储介质的与源地址相关联的第一位置中的数据,并且将数据写入存储介质的与目的地地址相关联的第二位置。第一控制器将用于指示复制命令的完成的信号发送到主机。
Description
本申请要求于2020年7月28日提交的题为“在NVME SSD中处理复制命令的方法”的第63/057,726号美国临时申请的优先权和权益,所述美国临时申请的全部内容通过引用包含于此。本申请还涉及于2020年9月17日提交的题为“用于处理针对存储装置的命令的系统和方法”的第17/024,598号美国申请,所述美国申请的内容通过引用包含于此。本申请还涉及于2020年10月2日提交的第17/062,467号美国申请,所述美国申请的内容通过引用包含于此。
技术领域
根据本公开的实施例的一个或多个方面涉及存储装置,更具体地,涉及处理用于访问存储装置的命令。
背景技术
主机计算装置可利用存储接口协议来访问非易失性存储装置(诸如,以固态驱动器(SSD)为例)。非易失性存储装置可包括用于处理使用协议生成的命令的控制器。随着协议发展,越来越多的特征(例如,命令)可被添加到协议。传统SSD可能无法在不必重新设计SSD控制器的情况下处理添加的特征。因此,期望具有即使在命令被添加到协议时也能够在不必重新设计SSD控制器的情况下处理来自主机的命令的SSD控制器。
发明内容
本公开的实施例包括一种用于处理从主机到存储装置的复制命令的方法。存储装置的第一控制器经由第一队列从主机接收复制命令。复制命令包括第一源地址和第一目的地地址。存储装置基于复制命令生成第一读取命令和第一写入命令。存储装置经由第二队列将第一读取命令和第一写入命令提交到存储装置的第二控制器。第二控制器从第二队列获取并处理第一读取命令和第一写入命令。存储装置基于对第一读取命令的处理来读取存储在存储装置的存储介质的与第一源地址相关联的第一位置中的数据。存储装置基于对第一写入命令的处理来将数据写入存储介质的与第一目的地地址相关联的第二位置。第一控制器将用于指示复制命令的完成的信号发送到主机。
根据一个实施例,第一源地址与存储装置的由第一标识符标识的第一逻辑空间相关联,并且第一目的地地址与存储装置的由第二标识符标识的第二逻辑空间相关联。
根据一个实施例,复制命令包括第二目的地地址,其中,写入数据的步骤包括:将数据的第一部分写入存储介质的与第一目的地地址相关联的第二位置,以及将数据的第二部分写入存储介质的与第二目的地地址相关联的第三位置。
根据一个实施例,存储在存储介质的第一位置中的数据包括具有第一部分和第二部分的元数据,其中,写入数据的步骤包括:将元数据的第一部分写入存储介质的与第一目的地地址相关联的第三位置;由存储装置基于第一目的地地址生成元数据的第三部分;和由存储装置将元数据的第三部分而不是元数据的第二部分写入存储介质中。
根据一个实施例,所述方法还包括:基于对第一读取命令的处理,跳过对元数据的第二部分的读取。
根据一个实施例,所述方法还包括:基于对第一写入命令的处理,跳过对元数据的第二部分的写入。
根据一个实施例,元数据的第二部分包括数据保护信息。
根据一个实施例,第一源地址与被配置为存储第一大小的数据块的第一逻辑空间相关联,并且第一目的地地址与被配置为存储与第一大小不同的第二大小的数据块的第二逻辑空间相关联。
根据一个实施例,复制命令与第二源地址相关联。所述方法还包括:由存储装置基于复制命令生成第二读取命令;由存储装置经由第二队列将第二读取命令提交到存储装置的第二控制器;由第二控制器从第二队列获取并处理第二读取命令;和基于对第二读取命令的处理,由存储装置读取存储在存储装置的与第二源地址相关联的第三位置中的数据,其中,第二控制器对第二读取命令的处理与对第一写入命令的处理同时发生。
根据一个实施例,存储装置是非易失性存储装置,并且第一控制器和第二控制器遵循快速非易失性存储器(NVMe)协议。
根据一个实施例,所述方法还包括:由第二控制器将第一完成状态提交到第一完成队列。
根据一个实施例,发送信号的步骤包括:基于将第一完成状态提交到第一完成队列而将第二完成状态提交到第二完成队列。
本公开的实施例还包括一种存储装置,所述存储装置包括存储介质和连接到存储介质的一个或多个处理器。所述一个或多个处理器分别被配置为:经由第一控制器和第一队列从主机接收复制命令,其中,复制命令包括第一源地址和第一目的地地址;基于复制命令生成第一读取命令和第一写入命令;经由第二队列将第一读取命令和第一写入命令提交到第二控制器;经由第二控制器从第二队列获取并处理第一读取命令和第一写入命令;基于对第一读取命令的处理,读取存储在存储介质的与第一源地址相关联的第一位置中的数据;基于对第一写入命令的处理,将数据写入存储介质的与第一目的地地址相关联的第二位置;和经由第一控制器将用于指示复制命令的完成的信号发送到主机。
如本领域技术人员应当认识到的,本公开的实施例允许传统存储装置对命令和/或扩展的处理。命令可以是具有相同的逻辑块地址(LBA)格式的同一命名空间中的两个地址之间的复制命令和/或具有不同的LBA格式/大小以及多个目的地范围的两个命名空间中的地址之间的复制命令。将复制命令分解为可同时处理的内部读取命令和写入命令可导致存储装置的更好的性能和/或处理开销的降低。
当针对下面的具体实施方式、所附权利要求和附图进行考虑时,将更充分地理解本公开的实施例的这些和其他特征、方面和优点。当然,发明的实际范围由所附权利要求限定。
附图说明
本实施例的非限制性和非详尽的实施例参照下面的附图被描述,其中,除非另外说明,否则贯穿各个示图,相同的参考标号表示相同的部件。
图1是根据一个实施例的数据存储和获取系统的框图;
图2是根据一个实施例的用于提交和处理存储接口命令的各种模块的概念布局图;
图3是根据一个实施例的作为提交队列条目(SQE)存储在内部提交队列中的内部命令的布局框图;
图4是根据一个实施例的用于处理用于从给定命名空间回收(deallocate)(释放(unmap))逻辑块地址范围的给定集合的数据集管理(DSM)命令的流程图;
图5是根据一个实施例的逻辑块的格式的概念框图;
图6A和图6B是根据一个实施例的用于处理由主机提交到外部提交队列的复制命令的流程图;
图7是根据一个实施例的存储装置的用于处理与复制命令相关联的内部读取和写入命令的组件的更详细的框图;
图8A至图8C是根据一个实施例的被调用以将数据从源命名空间复制到目的地命名空间的各种缓冲器的概念布局图;
图9A至图9B是根据一个实施例的被调用以将数据从源命名空间的多个LBA范围复制到目的地命名空间的单个LBA范围的各种缓冲器的概念布局图,其中,源命名空间和目的地命名空间两者具有相同的LBA格式;
图10A至图10B是根据一个实施例的被调用以将数据从源命名空间的多个LBA范围复制到目的地命名空间的多个LBA范围的各种缓冲器的概念布局图,其中,源命名空间和目的地命名空间具有不同的LBA格式;和
图11A至图11B是根据一个实施例的用于将一个命名空间的一个源LBA范围中的数据复制到另一命名空间的目的地LBA范围的缓冲器和SGL表的概念布局图,其中,源LBA范围和目的地LBA范围具有与图10A至图10B中的源LBA范围和目的地LBA范围的格式类似的格式。
具体实施方式
在下文中,将参照附图更详细地描述示例实施例,其中,相同的参考标号始终表示相同的元件。然而,本公开可以以各种不同的形式实施,并且不应被解释为仅限于在此示出的实施例。相反,这些实施例作为示例被提供,使得本公开将是彻底和完整的,并且将本公开的方面和特征充分地传达给本领域技术人员。因此,对于本领域普通技术人员来说对于完全理解本公开的方面和特征而不必要的处理、元件和技术可不被描述。除非另外说明,否则贯穿附图和文字描述,相同的参考标号表示相同的元件,因此,其描述可不被重复。此外,在附图中,为了清楚,元件、层和区域的相对尺寸可被夸大和/或简化。
主机计算装置可利用通信协议来访问非易失性存储装置(诸如,以固态驱动器(SSD)为例)。非易失性存储装置可包括用于处理使用协议生成的命令的控制器。随着协议发展,越来越多的特征(例如,命令)可被添加到协议。传统SSD可能无法在不必重新设计SSD控制器的情况下处理添加的特征。因此,期望具有即使在命令被添加到协议时也能在不必重新设计SSD控制器的情况下处理来自主机的命令的SSD控制器。
一般而言,本公开的实施例涉及一种存储装置,存储装置被配置为处理来自遵循通信协议的主机的命令。通信协议可以是例如快速非易失性存储器(NVMe)协议,但是本公开的实施例不限于此,并且可扩展到本领域技术人员将理解的其他协议。
在一个实施例中,来自主机的命令被分解成用于由存储装置执行的一个或多个内部命令。存储装置可包括被配置为提取并执行一个或多个内部命令的内部控制器。在一个实施例中,在主机与内部控制器之间未建立通信路径。因此,内部控制器不暴露给主机。
在一个实施例中,主机使用接口(诸如,以NVMe接口为例)将主机命令提交到暴露给主机并且与存储装置相关联的外部提交队列。存储装置的外部控制器可提取/获得主机命令,并且将提取的命令传递到存储装置的处理器以用于生成内部命令。内部命令可被提交到一个或多个内部提交队列。在一个实施例中,内部提交队列和内部控制器未暴露给主机(例如,对主机隐藏)。
内部控制器可提取/获得内部命令,并将它们作为遵循通信协议(例如,NVMe协议)的标准命令或厂商特定命令进行发送,以供处理器执行,就像这些命令源自主机一样。在一个实施例中,内部命令由存储装置彼此同时地(例如,并行地)提取/获得并执行。术语“同时”和“并行”可表示基本上同时、以比顺序处理快的速率等。
图1是根据一个实施例的数据存储和获取系统100的框图。系统包括配置有相同或不同的操作系统(例如,Windows OS和Linux OS)的一个或多个主机102a至102b(主机A和主机B,统称为102)。一个或多个主机102可通过存储接口总线106a、106b(统称为106)连接到数据存储装置104。存储接口总线106可以是例如快速外围组件互连(PCIe)总线。在一个实施例中,主机102使用存储接口协议通过存储接口总线106从数据存储装置104传送和接收数据。存储接口协议可以是如可在http://nvmexpress.org获得的2020年3月9日的NVM(NVMe)基本规范修订版1.4a(或先前的或未来的修订版)中描述的NVMe协议,其内容通过引用包含于此。出于描述本实施例的目的,NVMe协议被用作示例。然而,本领域技术人员应当理解,在不脱离发明构思的精神和范围的情况下,各种实施例将扩展到与NVMe协议类似的其他当前的或未来的存储接口协议。
主机102可以是具有被配置为处理数据的处理器108a、108b(统称为108)的计算装置。处理器108可以是通用中央处理器(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或配置有软件指令、微代码和/或固件的任何其他形式的处理单元。
在一个实施例中,处理器108连接到主机存储器空间110a、110b(统称为110)。主机存储器空间110可以是静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)等。应用程序可存储在主机存储器空间110中以由处理器108执行。应用可请求将数据存储到存储装置104或从存储装置104获取数据。应用可基于数据的存储或获取来生成输出。输出可以是例如在显示装置上显示获取的数据。在一个实施例中,存储装置104使用内部命令来处理来自应用的请求,允许更快地并且以更少的开销处理请求。
主机存储器空间110还可存储一个或多个外部提交队列(SQ)112a、112b(统称为112)以及一个或多个外部完成队列(CQ)114a、114b(统称为114)。主机102可使用外部提交队列112来提交存储接口命令以供存储装置104执行,并且在命令已经被执行之后使用外部完成队列114来从存储装置104接收完成消息。在一些实施例中,代替主机存储器空间110(或除了主机存储器空间110之外),外部提交队列112和外部完成队列114被包括在存储装置104的控制器存储器缓冲器(CMB)中。因此,对主机存储器空间110的引用可被理解为包括对CMB的引用。在任一场景中,外部提交队列112和外部完成队列114被暴露给主机并且可由主机访问。
在一个实施例中,主机存储器空间110存储物理区域页(PRP)/分散聚合表(SGL)条目116a、116b(统称为116)和其他数据117a、117b(统称为117)。例如,PRP/SGL条目116可描述主机存储器空间110的物理存储器位置,用于写入从存储装置104读取的数据以用于NVMe读取命令,以及用于读取将要写入存储装置104的数据以用于NVMe写入命令。对于特定存储接口命令,逻辑块地址(LBA)范围可作为数据117存储在主机存储器空间中,而不是将该范围包括在命令本身中。这样的命令的示例是可用于回收(deallocate)/释放(unmap)由主机提供的LBA范围的数据集管理回收命令。
存储装置104可以是非易失性存储装置(诸如,以固态驱动器(SSD)为例)。存储装置104可包括通信接口118、NVMe子系统120和装置控制器122。尽管NVMe子系统120和装置控制器122被描绘为单独的模块,但是应当理解,NVMe子系统120和装置控制器122的功能还可被合并为单个模块。在一个实施例中,通信接口118包括PCIe端口和端点,使得能够实现从主机102到存储装置104的入口通信以及从存储装置104到主机102的通信的出口。
NVMe子系统120可包括但不限于一个或多个外部控制器124a、124b(统称为124)和一个或多个内部控制器126。外部控制器124和内部控制器126可经由一个或多个处理器(诸如,以专用集成电路(ASIC)为例)来实现。在一个实施例中,一个或多个外部控制器124经由通信接口118(例如,PCI e接口)暴露给主机,并且被调用以处理外部提交队列112和外部完成队列114的队列操作。例如,特定外部控制器124可提取特定外部提交队列112中的存储接口命令,并且基于请求的命令的状态(例如,所请求的命令已经完成的指示)将完成状态放置在对应的外部完成队列114中。
在一个实施例中,特定外部控制器124与命名空间中的一个或多个相关联。在这方面,存储装置104的逻辑空间可被划分成一个或多个逻辑空间/命名空间,每个命名空间由唯一命名空间ID(NSID)标识。例如,假设使用4K逻辑块的1TB存储装置,三个命名空间可被分配具有下面的容量:512GB、256GB和256GB。由主机102提交的命令可涉及经由NSID标识的特定命名空间。
在一个实施例中,一个或多个内部控制器126未暴露给主机102(例如,对主机102隐藏)并且不可由主机102访问。在这方面,在主机102与内部控制器126之间未设置通信接口(例如,PCIe接口)。根据一个实施例,内部控制器126可模仿外部控制器124的功能。在这方面,内部控制器126可与装置控制器122交互,就像它是外部控制器124一样。
在一个实施例中,存储装置104包括存储一个或多个内部提交队列130以及一个或多个内部完成队列132的内部CMB 128。CMB 128可存储其他数据134(例如,内部数据缓冲器)和内部PRP/SGL条目136。在一个实施例中,内部控制器126访问内部CMB 128以提取并处理由装置控制器122提交的内部命令。内部CMB 128的内容和内部命令的处理可不暴露给主机102(例如,对主机102隐藏)并且不可由主机102访问。
在一个实施例中,装置控制器122与外部控制器124和内部控制器126交互以执行由主机102请求的命令。装置控制器122可包括但不限于一个或多个处理器140和一个或多个介质接口142。一个或多个处理器140可被配置为执行计算机可读指令,计算机可读指令用于处理到外部控制器124和内部控制器126的命令以及来自外部控制器124和内部控制器126的命令,并且用于管理存储装置104的操作。由一个或多个处理器140执行的计算机可读指令可以是例如固件代码。
在一个示例中,一个或多个处理器140可被配置为与外部控制器124和内部控制器126交互,以用于接收到存储介质(例如,NVM介质144)的写入命令或从存储介质(例如,NVM介质144)的读取命令。一个或多个处理器140可通过介质接口142与NVM介质144交互,以实现写入或读取动作。NVM介质144可包括一种或多种类型的非易失性存储器(诸如,以闪存为例)。
在一个实施例中,存储装置104还包括用于在存储装置104的操作期间进行短期存储或临时存储的内部存储器138。内部存储器138可包括DRAM(动态随机存取存储器)、SRAM(静态随机存取存储器)和/或DTCM(数据紧密耦合存储器)。代替内部CMB 128或除了内部CMB 128之外,内部存储器138可被使用,以对存储在内部CMB 128中的一些或全部数据(诸如,以内部提交队列130、内部完成队列132、数据134、PRP/SGL条目136等为例)进行存储。因此,对内部CMB 128的引用可被理解为包含对内部存储器138的引用。
图2是根据一个实施例的用于提交和处理与存储接口协议相关联的命令或厂商定义的命令的各种模块的概念布局图。各种模块可由外部控制器124和/或内部控制器126托管。此外,尽管假设一个或多个模块是单独的功能单元,但是本领域技术人员将认识到,在不脱离发明构思的精神和范围的情况下,模块的功能可组合或集成到单个模块中,或者进一步细分为另外的子模块。
在一个实施例中,命令模块200和PRP/SGL提取模块202的实例包括在外部控制器124和内部控制器126两者中。命令模块200可包括例如命令仲裁子模块、命令提取子模块、命令解析器子模块和命令调度器子模块。命令提取子模块可被配置为从外部提交队列112提取主机命令,或从内部提交队列130提取内部命令。命令仲裁子模块可被配置为调用仲裁突发策略以在各种控制器之间以及在所选控制器的各种提交队列之间进行仲裁,以挑选从中提取命令的提交队列。命令解析器子模块可被配置为对提交到外部控制器124或内部控制器126的命令进行解析,以用于基于命名空间格式检查和验证命令格式、NSID有效性、预留状态、是否需要LBA检查、的保护信息有效性等。命令解析器子模块还可被配置为与LBA重叠检查器(未示出)接口连接,以基于编程的配置信息在LBA重叠检查对于命令是必要的情况下传递命令。命令解析器子模块还可确定是否应当绕过主机子系统将命令直接发送到介质接口142,以提高系统性能。LBA重叠检查器可负责检查主机或内部命令当前是否正在针对与新到达的命令相同的范围进行处理。如果答案为是,则LBA重叠检查器可保持新到达的命令,直到先前提取的并且当前正在处理的命令完成为止。命令调度器子模块可负责基于命令的类型(例如,性能、非性能或管理)将命令分配给各种处理器。
PRP/SGL提取模块202可被配置为从主机存储器提取PRP或SGL条目116(在外部控制器124的情况下),或者从内部CMB 128提取PRP或SGL条目136(在内部控制器126的情况下)。在一个实施例中,命令模块200和PRP/SGL提取模块202两者分别在提取命令和PRP/SGL条目时遵循存储接口协议。
在一个实施例中,主机102向外部提交队列112之一提交存储接口命令。外部控制器124之一中的命令模块200(例如,命令提取子模块)从外部提交队列112提取/获得命令,并且将命令传递到装置控制器122以用于进一步处理。根据由主机提交的命令的类型,装置控制器122可访问主机存储器110以用于读取对提取的命令进行处理所需的数据117(诸如,以LBA范围为例)。在一个实施例中,如果由主机102提交的命令是数据传送命令,则与外部控制器124相关联的PRP/SGL提取模块202可分别从主机存储器110或CMB提取PRP/SGL条目116或PRP/SGL条目136,用于读取或写入与数据传送命令相关联的数据。
在一个实施例中,装置控制器122被配置为基于提取的命令来生成一个或多个内部命令。一个或多个内部命令可包括提取的命令的一部分(例如,提取的命令中的操作码)。在一个实施例中,一个或多个内部命令与提取的命令不同。例如,内部命令可具有与提取的命令中的操作码不同的操作码。
类似于主机102向外部提交队列112提交NVMe命令的方式,装置控制器122可向内部提交队列130提交一个或多个内部命令。例如,装置控制器122可通过更新硬件门铃寄存器来通知内部控制器126的命令模块200一个或多个内部命令已经被提交。在一些情况下,由主机102提交的命令可被分解成多个内部命令。在一个实施例中,多个内部命令由一个或多个内部控制器126彼此同时地(例如,并行地)提交和处理,从而允许存储装置104的提高的性能。
在一个实施例中,如果内部命令需要数据传送,则内部控制器126的PR P/SGL提取模块202可从内部CMB 128提取内部PRP/SGL条目136,以用于读取或写入与内部命令相关联的数据。内部PRP/SGL条目136可由装置控制器122生成。在一个实施例中,对于需要从NVM介质144传送的读取操作,内部PRP/SGL条目136可用于目的地缓冲器204。对于需要传送到NVM介质144的写入操作,内部PRP/SGL条目136可用于源缓冲器206。
在一个实施例中,传送队列(TQ)模块208可被配置为基于命令类型(例如,读取或写入)来处理用于向/从中间缓冲器(未示出)传送数据的内部请求。例如,对于内部读取或写入操作,传送队列模块208可从装置控制器122获得关于用于控制直接存储器访问的某些数据结构的信息(包括传送(TR)描述符和直接存储器访问(DMA)描述符)。TR描述符可包含用于数据传送的命令类型(例如,读取或写入)。DMA描述符可包含关于命令类型的中间缓冲器的信息。例如,如果命令类型是内部读取命令,则中间缓冲器可以是由介质接口142用来临时保持从NVM介质144读取的数据的中间读取缓冲器。如果命令类型是内部写入命令,则中间缓冲器可以是由介质接口142用来临时保持将要写入NVM介质144的数据的中间写入缓冲器。
在一个实施例中,DMA管理器(DMA_M)模块210接收DMA描述符以及PRP/SGL条目136,并且(经由DMA描述符中提供的中间缓冲器)将数据从源缓冲器206传送到NVM介质144以用于内部写入操作,或者(经由DMA描述符中提供的中间缓冲器)将数据从NVM介质144传送到目的地缓冲器204以用于内部读取操作。
图3是根据一个实施例的作为提交队列条目(SQE)存储在内部提交队列130中的内部命令的布局框图。在一个实施例中,根据用于生成外部命令的存储接口协议来生成内部命令。在这方面,内部命令的大小可以是64字节,并且可包括命令标识符(ID)300、操作码(OpCode)302、命名空间ID(NSID)304、缓冲器地址306和命令参数308。命令ID 300可以是内部命令被提交到的内部提交队列130内的命令ID。
OpCode 302可标识将要执行的特定命令。在一个实施例中,OpCode 302是标识NVM命令(例如,写入、读取、管理、数据集管理或厂商特定命令)的NVMe OpCode。在一些实施例中,OpCode 302标识内部命令集中的可由内部控制器126单独访问的新命令。
命名空间ID 304可标识由操作码302标识的命令在其上操作的命名空间。缓冲器地址306可包括内部CMB 128中的内部PRP/SGL条目136(或PRP/SGL条目的指针)。与将要执行的命令相关联的任何参数可被存储为命令参数308。
图4是根据一个实施例的用于处理由主机102提交到外部提交队列112的数据集管理(DSM)命令以用于从给定命名空间回收(释放)LBA范围的给定集合的流程图。处理开始,在框400中,外部控制器124之一从外部提交队列112提取命令,并将提取的命令传递到装置控制器122以供处理器140预处理。
在框402中,处理器140采取某些预处理动作(包括例如通过存储接口总线106开始主机直接存储器访问操作)以将LBA范围从主机存储器110传送到存储装置的内部存储器138。此外,处理器140可对LBA范围进行解析以用于标识非连续LBA范围的总数。
在框404中,处理器140针对由处理器标识的每个非连续LBA范围生成内部释放命令。在一个实施例中,释放命令是并非存储接口协议的一部分的命令。处理器140可将一个或多个内部释放命令提交到内部提交队列130中的一个或多个。
在框406至412中,针对每个LBA范围提交的释放命令被处理。尽管关于针对单个LBA范围的一个释放命令描述了处理,但是应当理解,针对其他LBA范围提交的其他释放命令也可根据框406至412并行地处理。
在框406中,内部控制器126从内部提交队列130提取并处理释放命令。内部控制器126的命令模块200可被调用,以从内部提交队列130提取释放命令。在一个实施例中,假定释放命令的处理不需要数据传送,则内部控制器126的PRP/SGL提取模块202不被调用,并且不创建内部PRP/SGL条目136。
在框408中,内部控制器126(例如,LBA重叠检查器)确定内部释放命令中的LBA范围是否与代表主机102正在处理的命令的LBA重叠。例如,释放命令的LBA范围可与当前作为主机102的读取操作的对象的LBA地址重叠。如果检测到重叠,则内部控制器126可等待,直到主机命令完成为止,然后继续进行LBA范围的释放。
然而,如果没有检测到重叠,则在框410中,内部控制器126经由装置控制器122向介质接口142传输一个或多个命令,以用于在NVM介质144上执行LBA范围的实际释放操作。应当理解,命令解析器子模块也可被调用,以在将一个或多个命令递送到介质接口142之前基于命名空间格式执行对释放命令的其他检查和验证(诸如,以检查和验证命令格式、NSID有效性、预留状态、是否需要LBA检查、保护信息有效性等为例)。
在确定释放操作的完成状态时,在框412中,内部控制器126将内部完成条目提交到与提交内部释放命令的内部提交队列130相关联的内部完成队列132。
在框414中,处理器140(例如,基于内部释放命令的状态)确定所提交的DSM回收命令的所有LBA范围是否已经被回收。如果答案为是,则在框416中,外部控制器124将外部完成条目提交到与DSM回收命令被提交到的外部提交队列112对应的外部完成队列114。
应当理解,根据本公开的实施例的DSM回收命令的处理提供了对数据存储装置104的功能的技术改进。例如,由于将DSM回收命令划分成独立的释放命令(每个释放命令具有单独的LBA范围)而导致的LBA范围的并行处理,允许存储装置的更好的性能。此外,检查每个LBA范围的重叠(例如,经由硬件)由于可避免范围的手动锁定和解锁,因此降低了处理器140的开销。此外,在存储装置包括具有执行固件(例如,在处理器140上运行的固件)的专用处理器(例如,处理器140)的两个子系统(例如,用于与主机102交互的主机子系统和用于与NVM介质144交互的闪存子系统)的实施例中,由于可在没有主机子系统的太多参与的情况下处理内部命令,因此可降低主机子系统的开销。
处理复制命令
在一个实施例中,由主机102提交的命令是用于将数据从NVM介质144的一个或多个源地址复制到一个或多个目的地地址的复制命令(例如,NVMe复制命令或厂商唯一复制命令)。源地址和目的地地址可被提供为源LBA范围和目的地LBA范围。在一个实施例中,LBA范围包括起始LBA以及该范围中的逻辑块的数量。
在一个实施例中,请求的复制动作可从单个源LBA范围到单个或多个目的地LBA范围,或者从多个源LBA范围到单个或多个目的地LBA范围。一个或多个目的地LBA范围可处于与源LBA范围相同或不同的命名空间,和/或具有相同或不同格式的LBA大小(例如,逻辑块大小)。在一些实施例中,逻辑块可具有为错误检测指定的端到端保护信息(PI)。
图5是根据一个实施例的逻辑块500的格式的概念框图。逻辑块可包括数据部分502和可选的元数据部分504。数据部分502可具有不同大小(诸如,以512B、1024B、4096B等为例)中的一个。具有不同数据大小的逻辑块可被描述为具有不同的LBA格式。
元数据部分504可以是例如16B,并且可用于传达元数据信息504a(包括例如端到端保护信息(PI)504b)。控制器124和/或主机102可使用端到端保护信息来确定逻辑块的完整性。如果存在,则PI 504b部分可根据命名空间的格式而占据元数据部分504的前八个字节或者后八个字节。元数据的剩余部分(可被称为用户数据)也可以是八个或更多个字节。在一些情况下,整个元数据部分504仅包含PI信息504b或元数据信息504a。在一个实施例中,元数据部分504可被称为元数据,并且PI 504b可以是元数据的组成部分。
图6A至6B是根据一个实施例的用于处理由主机102提交到外部提交队列112的复制命令(例如,NVMe复制命令或厂商唯一复制命令)的流程图。尽管使用NVMe复制命令或厂商唯一复制命令作为示例,但是应当理解,流程图还可应用于使用与NVMe协议类似的其他协议提交的其他复制命令。还应当理解,处理的步骤顺序不固定,而是可改变为本领域技术人员认识到的任何期望的顺序。此外,处理的步骤中的两个或更多个步骤可依次执行或彼此同时执行。
处理开始,在框600,外部控制器124之一从外部提交队列112提取所提交的复制命令,并将复制命令传递到装置控制器122以供处理器140预处理。
在框602,由处理器140采取的预处理动作可包括通过存储接口总线106开始主机直接存储器访问操作,以将源LBA范围和目的地LBA范围从主机存储器110传送到存储装置的内部存储器138。此外,处理器140可对LBA范围进行解析以合并连续的任何范围。一个或多个源LBA范围和目的地LBA范围可处于不同的命名空间,和/或具有不同的LBA格式。例如,当使用NVMe厂商唯一复制命令时,用于不同源命名空间和目的地命名空间的不同NSID可经由64B本身传递。然而,NVMe复制命令由于可能不被NVMe协议支持,因此可以不包括不同的命名空间信息。
在一个实施例中,处理器140可从复制命令生成读取命令和写入命令。例如,处理器140将复制命令分解成可在主机不知道的情况下由内部控制器126处理的独立的读取命令和写入命令。在这方面,在框604,处理器140准备用于由处理器140标识的非连续源LBA范围的内部读取命令,以用于提交到内部提交队列130中的一个或多个。
在框606,处理器140准备描述将要从中读取数据的内部源缓冲器206的一个或多个PRP/SGL条目136。假设使用SGL条目,则特定SGL条目可包括SGL数据块描述符。SGL数据块描述符可包括将被读取的数据块的地址和长度。
在框608,内部控制器126从内部提交队列130提取并处理读取命令。内部控制器126的命令模块200可被调用,以提取并处理读取命令。在这方面,命令模块200可与处理器140交互以执行从NVM介质144到例如托管在存储装置104的内部存储器138中的中间读取缓冲器的读取传送。在一些实施例中,内部控制器126可基于将命令提交到内部提交队列130来处理读取命令,而无需处理器140干预,以便帮助提高存储装置的性能。在这样的实施例中,中间缓冲器可由装置控制器122分配,而无需处理器140干预。
除了读取命令的提取之外,PRP/SGL提取模块202还可被调用,以提取由处理器140生成的PRP/SGL条目136。
在处理读取命令时,传送队列模块208可被调用,以获得存储读取数据的中间读取缓冲器的信息。基于该信息,DMA管理器模块210将中间读取缓冲器中的数据传送到由PRP/SGL条目136描述的内部源缓冲器206,并在传送完成时通知处理器140。
在一个实施例中,源缓冲器206中的数据被处理以用于复制到由主机在复制命令(例如,NVMe复制命令或厂商唯一复制命令)中提供的目的地LBA范围。在这方面,DMA管理器模块210可将内部源缓冲器206中的数据传送到内部目的地缓冲器204,以准备用于执行复制的内部写入命令。在一些实施例中,处理器140供应数据经由内部读取命令被复制在其中的内部源缓冲器206的地址,以用作用于处理内部写入命令的缓冲器。这可帮助避免在将数据从内部源缓冲器206传送到内部目的地缓冲器204时相关联的开销。
在框609中,确定是否已经处理了所有LBA范围以用于生成读取命令。如果答案为否,则处理器140返回到框604以准备用于由处理器140标识的另一非连续源LBA范围的内部读取命令。例如,假设处理器140标识将要读取的100个非连续LBA范围,则处理器140可生成100个单独的读取命令,其中每个读取命令包括不同的源LBA范围作为命令的一部分。
经由内部读取命令读取的数据然后可经由内部写入命令写入。在这方面,在框610中,处理器140准备用于提交到内部提交队列130中的一个或多个的内部写入命令。在一个实施例中,内部写入命令包括由主机提交的复制命令(例如,NVMe复制命令或厂商唯一复制命令)中的目的地LBA范围之一。
在框612,处理器140准备PRP/SGL条目136,PRP/SGL条目136描述包含将要写入NVM介质144中的数据的内部目的地缓冲器204(或者内部源缓冲器206(如果由处理器140供应))。在使用SGL条目的实施例中,SGL条目可包括SGL数据块描述符,SGL数据块描述符包括将要读取的数据块的地址和长度。在一些实施例中,SGL条目可包括SGL位桶描述符(bitbucket descriptor),SGL位桶描述符包括当写入中间写入缓冲器时将要跳过的数据的长度。在一个实施例中,在源命名空间的PI的格式/类型与目的地命名空间的PI的格式/类型不同的情况下,SGL位桶描述符用于跳过写入数据的PI部分。尽管PI被用作数据的可跳过的一部分的示例,但是公开不限于此,并且针对其他类型的命令,数据的其他部分也可被跳过。
在框614,内部控制器126从内部提交队列130提取并处理写入命令。内部控制器126的命令模块200可被调用,以提取和处理写入命令。在这方面,命令模块200可与处理器140交互,以执行从内部目的地缓冲器204到例如在存储装置104的内部存储器138中托管的中间写入缓冲器的写入传送。
除了写入命令的提取之外,PRP/SGL提取模块202还可被调用以提取由处理器140生成的PRP/SGL条目136。
在处理写入命令时,传送队列模块208可被调用,以获得数据将被传送到的中间写入缓冲器的信息。基于该信息,DMA管理器模块210将由PRP/SGL条目136描述的内部目的地缓冲器204(或内部源缓冲器206(如果由处理器140供应))中的数据传送到中间写入缓冲器,并且在传送完成时通知处理器140。
在一个实施例中,单独的读取命令和/或写入命令被提交到一个或多个内部提交队列130以供同时处理。例如,在经由图6A的步骤已经执行了针对LBA范围的第一读取命令之后,可经由图6B的步骤处理针对LBA范围的第一写入命令,而无需等待针对所有LBA范围的读取命令完成。类似地,针对第二LBA范围的第二读取命令可与第一写入命令的处理同时处理。向内部提交队列130提交内部读取命令可能未被主机102检测到。
在框616,确定是否已经复制了所有LBA范围。如果答案为是,则在框618中,外部控制器124将外部完成条目提交到与复制命令提交到的外部提交队列112对应的外部完成队列114。
图7是根据一个实施例的用于处理与复制命令相关联的内部读取和写入命令的存储装置104的组件的更详细的框图。组件可包括主机DMA模块700、闪存DMA模块702、内部CMB缓冲器704、中间读取缓冲器706和中间写入缓冲器708。
在执行内部读取命令时,处理器140向闪存DMA模块702提交读取请求,以从NVM介质144读取与复制命令的源LBA地址对应的逻辑数据块。在一个示例中,闪存DMA模块702可以是介质接口142的一部分。可由闪存DMA模块702访问的数据的大小可取决于从其读取数据的命名空间所使用的LBA格式,并且还可取决于可用的中间数据缓冲器大小。对闪存DMA模块702的请求可以用中间缓冲器粒度来表示,这可以是512B、4KB、8KB或16KB。例如,取决于LBA格式和所需的复制数据长度,512B、4KB、8KB或16KB的数据可被一次访问。
在一个实施例中,从NVM介质144获取的数据块被放置在中间读取缓冲器706中。中间读取缓冲器706可位于例如存储装置104的内部存储器138中。在一个实施例中,中间读取缓冲器706中的数据由主机DMA模块700访问,并且被放置在内部CMB缓冲器704之一中。在这方面,主机DMA模块700可类似于DMA管理器模块210,并且放置数据的内部CMB缓冲器704之一可类似于内部源缓冲器206。
在执行内部写入命令时,主机DMA模块700将内部CMB缓冲器704之一(例如,内部目的地缓冲器204)中的数据放置到中间写入缓冲器708中。中间写入缓冲器708可位于例如存储装置104的内部存储器138中。在一个实施例中,数据根据与目的地LBA相关联的命名空间的LBA格式被写入中间写入缓冲器708。闪存DMA模块702可访问中间写入缓冲器708中的数据,并且将数据写入NVM介质144的与目的地LBA对应的位置。
图8A至图8C是根据一个实施例的被调用以将数据从源命名空间复制到目的地命名空间的各种缓冲器的概念布局图。源命名空间(NS-A)800中的数据可存储在多个LBA范围802a至802c(即范围A、范围B、范围C,统称为802)中。在处理内部读取命令以执行复制命令的读取部分时,闪存DMA模块702(图7)可执行从源LBA范围802到中间读取缓冲器(例如,读取数据缓冲器706a和读取元数据缓冲器706b)中的读取传送。在这方面,如参照图5所讨论的,逻辑数据块可具有数据部分502和元数据部分504。在一个实施例中,闪存DMA模块702读取各个源LBA范围802中的数据部分,并且将数据部分存储到读取数据缓冲器706a中。闪存DMA模块702还可读取数据的元数据部分,并将元数据部分存储到读取元数据缓冲器706b中。
在完成内部读取命令时,主机DMA模块700可将读取数据缓冲器706a中的数据和读取元数据缓冲器706b中的元数据传送到内部CMB缓冲器704a中。传送的数据可存储在内部CMB缓冲器704a的数据部分808中,并且传送的元数据可存储在内部CMB缓冲器704a的元数据部分810中,但实施例不限于此。
然后,读取的数据可被处理以写入到一个或多个目的地LBA范围中。在图8B的示例中,数据被写入目的地命名空间(NS-B)804中的单个目的地LBA范围812。在图8C的示例中,数据被写入目的地命名空间(NS-C)806中的多个目的地LBA范围814、816(即,目的地范围A、目的地范围B)。对于这两种情况,主机DMA模块700可将内部CMB缓冲器704a中的数据传送到中间写入缓冲器(例如,写入数据缓冲器708a和写入元数据缓冲器708b)。例如,主机DMA模块700可将数据部分808传送到写入数据缓冲器708a,并且将元数据部分810传送到写入元数据缓冲器708b。在图8B的示例中,闪存DMA模块702随后可将写入缓冲器708a、708b中的数据连同对应的元数据一起传送到目的地命名空间804中的单个目的地LBA范围812。在图8C的示例中,闪存DMA模块702可将写入缓冲器708a、708b中的数据连同对应的元数据一起传送到多个目的地LBA范围814、816。例如,写入数据缓冲器708a中的数据可被传输到目标LBA范围814和816,并且写入元数据缓冲器708b的元数据可被传输到目标LBA范围814和816。
图9A至图9B是被调用以将数据从源命名空间900的多个LBA范围复制到目的地命名空间(NS-B)902的单个LBA范围的各种缓冲器的概念布局图,其中,源命名空间和目的地命名空间两者具有相同的LBA格式。例如,源命名空间和目的地命名空间中的逻辑块数据大小可以是512B,其中,每个逻辑块具有包括8B PI的元数据。图9A至图9B还可描述可用于将数据从源命名空间900的多个LBA范围复制到多个目的地LBA范围的缓冲器,其中,源命名空间900和目的地命名空间902二者都利用相同的LBA大小来格式化。
在图9A至图9B的示例中,四个源LBA范围904a至904d(例如LBA 0至7、LBA 10至13、LBA 20至23和LBA 28至43)被复制到单个目的地LBA范围906(例如LBA 0至31)。在这方面,四个源LBA范围904a至904d中的数据可被读取并存储(例如,一次512B、4KB、8KB、16KB)到中间读取数据缓冲器706c中,并且被传送到内部CMB缓冲器704b。与被读取的每个逻辑数据块对应的PI数据也可被读取并存储(例如,一次8B)到中间读取元数据缓冲器706d中,并且被传送到内部CMB缓冲器704b。
在执行写入操作时,内部CMB缓冲器704b中的数据可传送到中间写入数据缓冲器708c。存储在内部CMB缓冲器704b中的元数据还可复制到中间写入元数据缓冲器708d。在一个实施例中,因为图9A至图9B的示例中的源LBA格式和目的地LBA格式相同,所以元数据的PI部分不被复制到中间写入元数据缓冲器708d中。中间写入数据缓冲器708c和中间写入元数据缓冲器708d中的数据和元数据可被传送到目的地LBA范围906以完成复制操作。在一个实施例中,未被复制的元数据的PI部分可被重新生成(例如,通过主机DMA模块700),并且存储在目的地LBA范围906中。
图10A至图10B是被调用以将数据从源命名空间(NS-A)1000的多个LBA范围复制到目的地命名空间(NS-B)1002的多个LBA范围的各种缓冲器的概念布局图,其中,源命名空间和目的地命名空间具有不同的LBA格式。例如,源命名空间1000的逻辑块数据大小可以是512B,而目的地命名空间1002的逻辑块数据大小可以是4096B。在图10A至图10B的示例中,四个源LBA范围1004a至1004d(例如LBA 0至7、LBA 10至13、LBA 20至23和LBA 28至43)被复制到两个目的地LBA范围1006a、1006b(例如LBA 0至1和LBA 4至5)。图10A至图10B还可描述可用于将数据从源命名空间1000的多个LBA范围复制到目的地命名空间1002的单个LBA范围的缓冲器,其中,源命名空间1000和目的地命名空间1002利用不同的LBA大小来格式化。
在执行读取操作时,源命名空间1000的各个LBA范围1004a至1004d中的数据可被复制到中间读取数据缓冲器706e中,并且对应的元数据可被复制到中间读取元数据缓冲器706f中。然后,中间读取数据缓冲器706e和中间读取元数据缓冲器706f的内容可被传送到内部CMB缓冲器704c。
在执行写入操作时,内部CMB缓冲器704c中的数据可根据目的地命名空间1002的LBA格式而被传送到中间写入数据缓冲器708e。例如,来自内部CMB缓冲器704c的4096B的数据可一次存储在中间写入数据缓冲器708e中。内部CMB缓冲器704c中的元数据也可被复制到中间写入元数据缓冲器708f。然后,中间写入数据缓冲器708e和中间写入元数据缓冲器708f中的数据和元数据可被传送到目的地LBA范围1006a、1006b。在一个实施例中,因为图10A至图10B的示例中的源命名空间和目的地命名空间具有不同的LBA格式,所以元数据的任何PI部分可由主机DMA模块700根据目的地命名空间所使用的PI格式来重新生成。
图11A至图11B是用于将一个命名空间的一个源LBA范围中的数据复制到另一命名空间的目的地LBA范围的缓冲器和SGL表的概念布局图,其中,源LBA范围和目的地LBA范围是图10A至图10B中的源LBA范围和目的地LBA范围。应当理解,类似的SGL表可用于图9A至图9B的实施例中的缓冲器,其中,源命名空间和目的地命名空间的LBA格式相同。
在图11A至图11B的示例中,如下所述使用SGL位桶描述符1110,以跳过读取数据的PI信息,从而允许在目的地命名空间中以不同LBA格式组装读取数据和相关联的元数据(包括适当的PI信息)。PI信息的跳过可作为读取操作的一部分在写入内部CMB缓冲器的同时完成,或可作为写入操作的一部分在从内部CMB缓冲器读取的同时完成。然后,可由主机DMA模块按照目的地LBA格式来完成PI的重新生成。
在图11A至图11B的示例中,源命名空间中的八个逻辑数据块(每个512B)形成具有4096B大小的单个目的地逻辑块。在处理的写入部分期间,与每个512B数据块相关联的PI信息(例如8B PI信息)使用位桶描述符被跳过,并且可在目的地命名空间中形成具有4096B大小的单个数据块(具有重新生成的PI信息(例如重新生成的8B PI信息))。
更具体地,在执行内部读取操作时,从NVM介质144获取并存储在中间读取数据缓冲器706g中的数据(例如,4KB的数据)(与图10A至图10B中的处理类似)可被传送到内部CMB缓冲器704d中。存储在中间读取元数据缓冲器706h中的元数据也可被传送到内部CMB缓冲器704d中。数据和元数据传送到的内部CMB缓冲器704d可由一个或多个PRP/SGL条目(例如,读取SGL列表)136a描述。在一个实施例中,PRP/SGL条目136a由处理器140基于提取和处理内部读取命令而生成。应当理解,尽管图8A至图10B的示例未明确描绘PRP/SGL条目,但在那些示例中也可使用PRP/SGL条目来描述内部CMB缓冲器704a至704c。
在图11A至图11B的示例中,中间读取元数据缓冲器706h中的元数据可包括用于中间读取数据缓冲器706g中的每个逻辑数据块1104(例如,512B的数据)的元数据部分1100和PI部分1102。在执行复制命令的写入部分时,传送到内部CMB缓冲器704d中的逻辑数据块1104和对应元数据部分1100可从内部CMB缓冲器704d分别写入到中间写入数据缓冲器708g和中间写入元数据缓冲器708h中。在一个实施例中,写入到中间写入数据缓冲器708g中的数据遵循目的地命名空间的LBA格式。例如,中间写入数据缓冲器708g中的每个逻辑数据块的大小可为4096B。
图11A至图11B的示例中的源命名空间和目的地命名空间的LBA格式不同。因此,根据一个实施例,读取元数据的PI部分1102被跳过,并且不从内部CMB 704d复制到写入元数据缓冲器708h中。在一个实施例中,元数据的跳过的PI部分由主机DMA模块700生成为PI1106。生成的PI 1106可基于目的地命名空间使用的PI格式。
在一个实施例中,由用于将数据写入中间写入数据缓冲器708g和中间写入元数据缓冲器708h的PRP/SGL条目(例如,写入SGL列表)136b提供的信息允许跳过内部CMB 704d中的读取的元数据的PI部分1102。在一个实施例中,PRP/SGL条目136b由处理器140基于提取和处理内部写入命令而生成。在一个实施例中,处理器140可确定将要写入的元数据的PI部分将被跳过。这样的确定可基于确定从源命名空间读取的元数据具有启用的PI部分,并且还基于确定目的地命名空间的LBA格式与源命名空间的LBA格式不同。
在一个实施例中,SGL条目可包括针对将被复制的数据的SGL数据描述符1108(包括针对将被复制的数据块(例如,512B)的描述符和相关联的元数据(例如,不包括PI部分的8B用户数据))。在一个实施例中,在SGL数据描述符1108之后的SGL位桶描述符1110可用于避免复制内部CMB 704d中的元数据的PI部分。例如,SGL位桶描述符1110可标识将被跳过的8B PI数据。
在一个实施例中,主机DMA模块700利用PRP/SGL条目136b将数据从内部CMB缓冲器704d传送到中间写入数据缓冲器708g和中间写入元数据缓冲器708h。在这方面,主机DMA模块700可将SGL数据描述符1108中描述的CMB缓冲器中的数据传送到中间写入数据缓冲器708g和中间写入元数据缓冲器708h,并且跳过SGL位桶描述符1110中描述的数据的一部分。主机DMA模块700可以以类似的方式继续,传送在剩余的SGL数据描述符1112中描述的数据,并且跳过在剩余的SGL位桶描述符1114中描述的数据。被跳过的元数据的PI部分随后可由主机DMA模块700按照目的地命名空间LBA格式重新生成并且存储在中间写入元数据缓冲器708h中。在一个实施例中,重新生成的PI的大小为8B,并且与目的地命名空间中的4096B数据相关联。在一个实施例中,8B PI信息1106可形成用户数据(用户数据在图11B的示例中大小为56B,并从源命名空间复制)的之后8B。
在一些实施例中,代替将SGL位桶描述符包括在PRP/SGL条目136b中以用于在写入处理期间将数据从内部CMB缓冲器704d传送到中间写入数据缓冲器708g和中间写入元数据缓冲器708h中,SGL位桶描述符可包括在用于读取处理的PRP/SGL条目136a中。根据该实施例,在PRP/SGL条目中的SGL位桶描述符中描述的数据的部分被跳过,并且不从中间读取元数据缓冲器706h传送到内部CMB缓冲器704d中。
应当理解,即使当命名空间之间的LBA格式不同时,和/或即使当不同的命名空间使用不同的端到端保护信息时,本公开的实施例也允许横跨不同的命名空间处理复制命令。使用SGL位桶描述符来跳过读取数据的端到端保护信息允许在目的地命名空间中以不同的LBA格式组装数据和相关联的元数据(包括保护信息)。然后,可由主机DMA模块按照目的地LBA格式来完成PI的重新生成。
应当理解,以上论述的一个或多个处理器可包括例如专用集成电路(ASIC)、通用或专用中央处理器(CPU)、数字信号处理器(DSP)、图形处理器(GPU)和/或可编程逻辑装置(诸如,现场可编程门阵列(FPGA))。在处理器中,如在此所使用的,每个功能可由硬件、固件和/或软件执行。处理器可在单个印刷电路板(PCB)上制造或在若干互连的PCB上分布。处理器可包含其他处理电路(例如,处理电路可包括在PCB上互连的两个处理电路(FPGA和CPU))。
将理解,尽管在此可使用术语“第一”、“第二”、“第三”等来描述各种元件、组件、区域、层和/或部分,但是这些元件、组件、区域、层和/或部分不应受这些术语限制。这些术语仅用于将一个元件、组件、区域、层或部分与另一元件、组件、区域、层或部分区分开。因此,在不脱离发明构思的精神和范围的情况下,在此讨论的第一元件、第一组件、第一区域、第一层或第一部分可被称为第二元件、第二组件、第二区域、第二层或第二部分。
在此使用的术语仅用于描述特定实施例的目的,而不意在限制发明构思。如在此所用的,术语“基本上”、“约”以及类似术语用作近似术语而非程度术语,并且意在考虑本领域普通技术人员将认识到的测量值或计算值的固有偏差。
如在此所使用的,除非上下文另外明确地说明,否则单数形式也意在包括复数形式。还将理解,当在本说明书中使用时,术语“包括”表明存在陈述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或它们的组。如在此使用的,术语“和/或”包括相关所列项中的一个或多个的任何和所有组合。诸如“……中的至少一个”的表述在一列元素之后时修饰整列元素,而不是修饰列中的单个元素。此外,在描述发明构思的实施例时所使用的“可”表示“本公开的一个或多个实施例”。此外,术语“示例性”意在表示示例或说明。如在此所用的,术语“使用(use)”可被认为与术语“利用(utilize)”同义。
将理解,当元件或层被称为“在”另一元件或层“上”、“连接到”、“结合到”或“邻近”另一元件或层时,它可直接在另一元件或层上、直接连接到、结合到或紧邻另一元件或层,或者可存在一个或多个中间元件或层。相反,当元件或层被称为“直接在”另一元件或层“上”、“直接连接到”、“直接结合到”或“紧邻”另一元件或层时,不存在中间元件或层。
在此叙述的任何数值范围意在包括包含在叙述的范围内的相同数值精度的所有子范围。例如,“1.0至10.0”的范围意在包括叙述的最小值1.0与叙述的最大值10.0之间(并且包括叙述的最小值1.0和叙述的最大值10.0)的所有子范围(即,具有等于或大于1.0的最小值以及等于或小于10.0的最大值(诸如,以2.4至7.6为例))。在此叙述的任何最大数值限度意在包括其中包含的所有较低的数值限度,并且本说明书中叙述的任何最小数值限度意在包括其中包含的所有较高的数值限度。
尽管在此已经具体描述和说明了用于处理复制命令的系统和方法的示例性实施例,但是对于本领域技术人员来说,许多修改和变化将是清楚的。因此,应当理解,根据本公开的原理构造的用于处理复制命令的系统和方法可以以不同于在此具体描述的方式来实现。公开还在所附权利要求及其等同物中限定。
Claims (20)
1.一种用于处理从主机到存储装置的复制命令的方法,所述方法包括:
由存储装置的第一控制器经由第一队列从主机接收复制命令,其中,复制命令包括第一源地址和第一目的地地址;
由存储装置基于复制命令生成第一读取命令和第一写入命令;
由存储装置经由第二队列将第一读取命令和第一写入命令提交到存储装置的第二控制器;
由第二控制器从第二队列获取并处理第一读取命令和第一写入命令;
由存储装置基于对第一读取命令的处理来读取存储在存储装置的存储介质的与第一源地址相关联的第一位置中的数据;
由存储装置基于对第一写入命令的处理来将数据写入存储介质的与第一目的地地址相关联的第二位置;和
由第一控制器将用于指示复制命令的完成的信号发送到主机。
2.根据权利要求1所述的方法,其中,第一源地址与存储装置的由第一标识符标识的第一逻辑空间相关联,并且第一目的地地址与存储装置的由第二标识符标识的第二逻辑空间相关联。
3.根据权利要求1所述的方法,其中,复制命令包括第二目的地地址,其中,写入数据的步骤包括:将数据的第一部分写入存储介质的与第一目的地地址相关联的第二位置,以及将数据的第二部分写入存储介质的与第二目的地地址相关联的第三位置。
4.根据权利要求1所述的方法,其中,存储在存储介质的第一位置中的数据包括具有第一部分和第二部分的元数据,其中,写入数据的步骤包括:
将元数据的第一部分写入存储介质的与第一目的地地址相关联的第三位置;
由存储装置基于第一目的地地址生成元数据的第三部分;和
由存储装置将元数据的第三部分而不是元数据的第二部分写入存储介质中。
5.根据权利要求4所述的方法,还包括:
基于对第一读取命令的处理,跳过对元数据的第二部分的读取。
6.根据权利要求4所述的方法,还包括:
基于对第一写入命令的处理,跳过对元数据的第二部分的写入。
7.根据权利要求4所述的方法,其中,元数据的第二部分包括数据保护信息。
8.根据权利要求4所述的方法,其中,第一源地址与被配置为存储第一大小的数据块的第一逻辑空间相关联,并且第一目的地地址与被配置为存储与第一大小不同的第二大小的数据块的第二逻辑空间相关联。
9.根据权利要求1所述的方法,其中,复制命令与第二源地址相关联,所述方法还包括:
由存储装置基于复制命令生成第二读取命令;
由存储装置经由第二队列将第二读取命令提交到存储装置的第二控制器;
由第二控制器从第二队列获取并处理第二读取命令;和
基于对第二读取命令的处理,由存储装置读取存储在存储装置的与第二源地址相关联的第三位置中的数据,
其中,第二控制器对第二读取命令的处理与对第一写入命令的处理同时发生。
10.根据权利要求1所述的方法,其中,存储装置是非易失性存储装置,并且第一控制器和第二控制器遵循快速非易失性存储器协议。
11.根据权利要求1所述的方法,还包括:
由第二控制器将第一完成状态提交到第一完成队列。
12.根据权利要求11所述的方法,其中,发送信号的步骤包括:基于将第一完成状态提交到第一完成队列而将第二完成状态提交到第二完成队列。
13.一种存储装置,包括:
存储介质;
一个或多个处理器,连接到存储介质,所述一个或多个处理器分别被配置为:
经由第一控制器和第一队列从主机接收复制命令,其中,复制命令包括第一源地址和第一目的地地址;
基于复制命令生成第一读取命令和第一写入命令;
经由第二队列将第一读取命令和第一写入命令提交到第二控制器;
经由第二控制器从第二队列获取并处理第一读取命令和第一写入命令;
基于对第一读取命令的处理,读取存储在存储介质的与第一源地址相关联的第一位置中的数据;
基于对第一写入命令的处理,将数据写入存储介质的与第一目的地地址相关联的第二位置;和
经由第一控制器将用于指示复制命令的完成的信号发送到主机。
14.根据权利要求13所述的存储装置,其中,第一源地址与所述存储装置的由第一标识符标识的第一逻辑空间相关联,并且第一目的地地址与所述存储装置的由第二标识符标识的第二逻辑空间相关联。
15.根据权利要求13所述的存储装置,其中,复制命令包括第二目的地地址,其中,在写入数据时,所述一个或多个处理器被配置为将数据的第一部分写入存储介质的与第一目的地地址相关联的第二位置,并且将数据的第二部分写入存储介质的与第二目的地地址相关联的第三位置。
16.根据权利要求13所述的存储装置,其中,存储在存储介质的第一位置中的数据包括具有第一部分和第二部分的元数据,其中,在写入数据时,所述一个或多个处理器还被配置为:
将元数据的第一部分写入存储介质的与第一目的地地址相关联的第三位置;
基于第一目的地地址生成元数据的第三部分;和
将元数据的第三部分而不是元数据的第二部分写入存储介质中。
17.根据权利要求16所述的存储装置,其中,所述一个或多个处理器还被配置为:
基于对第一读取命令的处理,跳过对元数据的第二部分的读取。
18.根据权利要求16所述的存储装置,其中,所述一个或多个处理器还被配置为:
基于对第一写入命令的处理,跳过对元数据的第二部分的写入。
19.根据权利要求16所述的存储装置,其中,元数据的第二部分包括数据保护信息。
20.根据权利要求16所述的存储装置,其中,第一源地址与被配置为存储第一大小的数据块的第一逻辑空间相关联,并且第一目的地地址与被配置为存储与第一大小不同的第二大小的数据块的第二逻辑空间相关联。
Applications Claiming Priority (6)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US202063057726P | 2020-07-28 | 2020-07-28 | |
| US63/057,726 | 2020-07-28 | ||
| US17/024,598 US11733918B2 (en) | 2020-07-28 | 2020-09-17 | Systems and methods for processing commands for storage devices |
| US17/024,598 | 2020-09-17 | ||
| US17/062,467 | 2020-10-02 | ||
| US17/062,467 US11789634B2 (en) | 2020-07-28 | 2020-10-02 | Systems and methods for processing copy commands |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN114003514A true CN114003514A (zh) | 2022-02-01 |
| CN114003514B CN114003514B (zh) | 2026-02-17 |
Family
ID=
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN115981549A (zh) * | 2022-12-08 | 2023-04-18 | 苏州浪潮智能科技有限公司 | 一种dsm命令的处理方法、系统、装置及可读存储介质 |
| CN117666944A (zh) * | 2022-09-08 | 2024-03-08 | 三星电子株式会社 | 用于执行数据处理功能的方法和存储装置 |
| CN118568019A (zh) * | 2023-10-23 | 2024-08-30 | 哈尔滨商业大学 | 含数据编制命令的控制数据处理方法和处理装置 |
Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101815990A (zh) * | 2007-10-02 | 2010-08-25 | 高通股份有限公司 | 用于执行存储器块初始化及复制的存储器控制器 |
| US20120084522A1 (en) * | 2010-10-04 | 2012-04-05 | Fujitsu Limited | Virtualization control apparatus and storage system |
| US20130054914A1 (en) * | 2011-08-23 | 2013-02-28 | Fujitsu Limited | Data copy processing system, storage device, and data copy processing method |
| US20140215129A1 (en) * | 2013-01-28 | 2014-07-31 | Radian Memory Systems, LLC | Cooperative flash memory control |
| CN106575271A (zh) * | 2014-06-23 | 2017-04-19 | 谷歌公司 | 管理存储设备 |
| US20170262176A1 (en) * | 2016-03-08 | 2017-09-14 | Kabushiki Kaisha Toshiba | Storage system, information processing system and method for controlling nonvolatile memory |
| US20190095123A1 (en) * | 2017-09-22 | 2019-03-28 | Silicon Motion, Inc. | Methods for internal data movements of a flash memory device and apparatuses using the same |
| US20190187894A1 (en) * | 2017-12-19 | 2019-06-20 | Western Digital Technologies, Inc. | Nvme controller memory manager |
Patent Citations (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101815990A (zh) * | 2007-10-02 | 2010-08-25 | 高通股份有限公司 | 用于执行存储器块初始化及复制的存储器控制器 |
| US20120084522A1 (en) * | 2010-10-04 | 2012-04-05 | Fujitsu Limited | Virtualization control apparatus and storage system |
| US20130054914A1 (en) * | 2011-08-23 | 2013-02-28 | Fujitsu Limited | Data copy processing system, storage device, and data copy processing method |
| US20140215129A1 (en) * | 2013-01-28 | 2014-07-31 | Radian Memory Systems, LLC | Cooperative flash memory control |
| CN106575271A (zh) * | 2014-06-23 | 2017-04-19 | 谷歌公司 | 管理存储设备 |
| US20170262176A1 (en) * | 2016-03-08 | 2017-09-14 | Kabushiki Kaisha Toshiba | Storage system, information processing system and method for controlling nonvolatile memory |
| US20190095123A1 (en) * | 2017-09-22 | 2019-03-28 | Silicon Motion, Inc. | Methods for internal data movements of a flash memory device and apparatuses using the same |
| US20190187894A1 (en) * | 2017-12-19 | 2019-06-20 | Western Digital Technologies, Inc. | Nvme controller memory manager |
Non-Patent Citations (1)
| Title |
|---|
| 崔丹丹;宫永生;: "NVMe高速存储的FPGA实现", 微电子学与计算机, no. 06, 5 June 2019 (2019-06-05) * |
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN117666944A (zh) * | 2022-09-08 | 2024-03-08 | 三星电子株式会社 | 用于执行数据处理功能的方法和存储装置 |
| CN115981549A (zh) * | 2022-12-08 | 2023-04-18 | 苏州浪潮智能科技有限公司 | 一种dsm命令的处理方法、系统、装置及可读存储介质 |
| CN115981549B (zh) * | 2022-12-08 | 2025-06-24 | 苏州浪潮智能科技有限公司 | 一种dsm命令的处理方法、系统、装置及可读存储介质 |
| CN118568019A (zh) * | 2023-10-23 | 2024-08-30 | 哈尔滨商业大学 | 含数据编制命令的控制数据处理方法和处理装置 |
| CN118568019B (zh) * | 2023-10-23 | 2025-03-07 | 哈尔滨商业大学 | 含数据编制命令的控制数据处理方法和处理装置 |
Also Published As
| Publication number | Publication date |
|---|---|
| EP3945407B1 (en) | 2024-08-14 |
| KR20220014272A (ko) | 2022-02-04 |
| JP2022025000A (ja) | 2022-02-09 |
| TWI873352B (zh) | 2025-02-21 |
| JP7727417B2 (ja) | 2025-08-21 |
| EP3945407A1 (en) | 2022-02-02 |
| TW202205085A (zh) | 2022-02-01 |
| KR102851372B1 (ko) | 2025-08-26 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US10909012B2 (en) | System having persistent memory | |
| US10649815B2 (en) | Apparatus and method of managing shared resources in achieving IO virtualization in a storage device | |
| TWI873352B (zh) | 用於處理複製命令的方法及儲存裝置 | |
| US10761775B2 (en) | System and method for NVMe inter command association in SSD storage using a bridge device | |
| US7958298B2 (en) | System and method for providing address decode and virtual function (VF) migration support in a peripheral component interconnect express (PCIE) multi-root input/output virtualization (IOV) environment | |
| US11789634B2 (en) | Systems and methods for processing copy commands | |
| CN114003168B (zh) | 用于处理命令的存储设备和方法 | |
| US10552340B2 (en) | Input/output direct memory access during live memory relocation | |
| CN107636630A (zh) | 中断控制器 | |
| US7734842B2 (en) | Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages | |
| US11436150B2 (en) | Method for processing page fault by processor | |
| CN120256405A (zh) | 一种请求处理方法、装置、设备、系统、介质和产品 | |
| CN114003514B (zh) | 用于处理复制命令的系统和方法 | |
| US9652296B1 (en) | Efficient chained post-copy virtual machine migration | |
| KR20260018422A (ko) | 추정 읽기 동작을 지원하는 cxl 저장 장치 |
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 |