CN107209644B - 一种数据处理方法以及NVMe存储器 - Google Patents
一种数据处理方法以及NVMe存储器 Download PDFInfo
- Publication number
- CN107209644B CN107209644B CN201680003110.0A CN201680003110A CN107209644B CN 107209644 B CN107209644 B CN 107209644B CN 201680003110 A CN201680003110 A CN 201680003110A CN 107209644 B CN107209644 B CN 107209644B
- Authority
- CN
- China
- Prior art keywords
- nvme
- value
- host
- memory
- storage space
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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; 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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; CALCULATING OR 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; CALCULATING OR 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/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/0626—Reducing size or complexity of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0026—PCI express
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)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据处理方法以及存储装置,所述数据处理方法包括:NVMe存储器接收主机发送的NVMe写命令,所述NVMe写命令中携带key和value指针,所述value指针指向第一存储空间,所述第一存储空间用于存储value;所述NVMe存储器从所述NVMe写命令中获得所述key以及获得value长度,按照所述value长度为所述value分配第二存储空间,所述第二存储空间在所述NVMe存储器中;所述NVMe存储器从所述主机获得所述value,把所述value保存在所述第二存储空间中。
Description
技术领域
本发明实施例涉及存储领域,特别涉及NVMe领域。
背景技术
NVMe(Non-Volatile Memory Express,非易失性存储快速)协议是一种使用在存储系统中的高速接口协议,NVMe协议比SCSI协议提供更快的读写速度和更低的延迟,产业重视和普及程度越来越高。
随着信息技术的发展,经常使用对象存储(object storage)技术。一种常见的对象存储技术是键值(key value,KV)存储。现有技术中,由于NVMe设备仅仅支持块(block)接口,因此如果主机(Host)要把KV数据存储到NVMe存储器中,其步骤是:主机要把KV命令(一般情况下由Key、Value和Metadata构成)转成块数据(例如把一个KV命名拆分/合并成一个或者至少两个块数据);主机给块数据分配LBA地址;主机把块数据发送给NVMe存储器;NVMe存储器收到块数据后按照分配的LBA地址对块数据逐一进行存储。
然而,在上述步骤中,把KV数据转换成块数据,以及给块数据分配LBA地址会耗费主机大量的运算资源,导致存储系统的性能下降,对主机和存储控制器的运行效率也会造成影响。
发明内容
本发明提供数据处理方法、NVMe存储器以及存储系统的方案。可以提高把KV数据写入NVMe存储器的效率。在部分方案中,相应的,也会提高把KV数据从NVMe存储器读出来效率。
本发明实施例第一方面,提供一种数据处理方法,该方法包括:快速非易失性存储NVMe存储器接收主机发送的NVMe写命令,所述NVMe写命令中携带key,所述NVMe写命令携带value指针,所述value指针指向所述主机中的第一存储空间,所述第一存储空间用于存储value,所述key与所述value属于同一个KV对;所述NVMe存储器从所述NVMe写命令中获得所述key,根据所述value指针获得value长度,按照所述value长度为所述value分配第二存储空间,所述第二存储空间在所述NVMe存储器中;所述NVMe存储器发送第一传输请求给所述主机,从所述主机获得所述value,把所述value保存在所述第二存储空间中。基于该方案,KV数据从主机传递到NVMe存储器的过程中,不需要把KV数据转换成块的形式,提高了KV数据的存储效率。
在第一方面的第一种可能的实施方式中,所述NVMe存储器发送第一传输请求给主机以及从所述主机获得所述value,具体包括:所述NVMe存储器发送DMA传输请求给所述主机,从所述主机获得所述value,所述DMA指令携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址,其中,所述NVMe存储器和所述主机用PCIe总线连接。该方案提供了使用DMA的方式存储value传输方式。
在第一方面的第二种可能的实施方式中,所述NVMe存储器发送第一传输请求给主机以及从所述主机获得所述value,具体包括:所述存储器发送RDMA传输请求给所述主机,从所述主机获得所述value,所述RDMA指令携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址,其中,所述NVMe存储器和所述主机用Fabric总线连接。该方案提供了使用RDMA的方式存储value传输方式。
在第一方面的第三种可能的实施方式中,其中:所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述NVMe存储器从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。该方案可以支持正在同一个NVMe写命令中携带复数个KV。
在第一方面的第四种可能的实施方式中,其中:所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构,所述NVMe存储器按照所述KV格式字段所定义的字段内容,从所述NVMe写命令中获取各个字段。该方案可以使得同一个NVMe设备支持多种格式传输KV的NVMe写命令报文,在一次特定的写操作过程中,使用其中一种格式的写命令报文。类似的,在读命令流程中,也可以使得同一个NVMe设备支持多种格式传输KV的NVMe读命令报文。
在第一方面的第五种可能的实施方式中,其中,所述NVMe写命令还携带所述value元数据指针,所述方法还包括:所述NVMe存储器根据所述元数据指针获得元数据长度,按照所述元数据长度为所述元数据分配第四存储空间,所述第四存储空间在所述NVMe存储器中;所述NVMe存储器通过所述第一传输请求从所述主机中获得所述元数据,把所述元数据保存在第四存储空间中。该方案描述了如何对KV中的元数据进行存储的具体方案。
结合第一方面的第五种可能的实施方式,在第六种可能的实施方式中,其中:所述元数据传输失败后,所述NVMe存储器释放为所述value分配的存储空间,以及释放为所述元数据分配的第四存储空间。该方案在元数据传输失败后,可以及时释放被value占用的资源。
结合第一方面的第七种可能的实施方式,其中,所述NVMe存储器发送第一传输请求给所述主机以及从所述主机获得所述value,具体包括下述其中一种:所述存储器发送至少两个DMA传输请求给所述主机以获得所述value,每个DMA传输请求用于请求获得所述value的一部分,当任意一个DMA传输请求执行失败,则NVMe存储器释放为所述value分配的存储空间,其中,所述NVMe存储器和所述主机用PCIe总线连接;或者,所述存储器发送至少两个RDMA传输请求给所述主机以获得所述value,每个RDMA传输请求用于请求获得所述value的一部分,当任意一个RDMA传输请求执行失败,则NVMe存储器释放为所述value分配的存储空间,其中,所述NVMe存储器和所述主机用Fabric连接。该方案可以把同一个value分成多次RDMA传输请求进行传输,减小每次RDMA传输的数据量。
结合第一方面的第八种可能的实施方式,其中,所述方法还包括:生成所述key与所述第二存储空间的映射关系。该映射关系可以为后续的KV(尤其是value)的读取方案提供基础。
结合第一方面的第九种可能的实施方式,该方法之后,进一步包括:所述NVMe存储器从所述主机接收NVMe读命令,所述NVMe读命令中携带所述key。此外,还可以进一步包括:所述NVMe存储器根据所述key在所述映射关系中查询,获得存储所述value的所述第二存储空间的位置信息,把所述第二存储空间的位置信息发送给所述主机;所述NVMe存储器接收所述主机发送的第二传输请求,所述第二传输请求用于请求获得存储在所述第二存储空间的数据。该第一方面的第八种可能的实施方式可以实现对KV(或者value)的读取。
结合第一方面的第十种可能的实施方式,其中,所述NVMe存储器接收所述主机发送的第二传输请求之前,进一步包括:所述主机根据所述第二存储空间的大小预留所述主机中的第三存储空间。所述NVMe存储器发送所述value给所述主机之后,进一步包括:所述主机把收到的来自所述第二存储空间的数据写入所述第四存储空间空间。该方案描述了主机在读取KV(或者value)的过程中所执行的操作。
结合第一方面的第十一种可能的实施方式,所述NVMe存储器接收的所述主机发送的NVMe读命令中还携带所述主机的空闲空间信息,所述NVMe存储器从所述主机接收所述NVMe读命令之后,进一步包括:所述NVMe存储器判断所述主机的空闲存储空间是否大于等于所述第二存储空间,如果是,执行将所述第二存储空间的位置信息发送给所述主机的步骤,如果否,结束步骤。该方案在NVMe读命令中携带所述主机的空闲空间信息,主机不用在收到NVMe存储器响应后判断空闲空间是否足够以及预留存储空间,可以减少NVMe存储器和主机之间的交互次数,提高了主机读取value的效率。需要说明的是,这里的空闲空间是一段地址连续的空间。
结合第一方面的第十二种可能的实施方式,其中:所述第一存储空间用第一存储空间的首地址和所述value长度描述;所述第二存储空间用第二存储空间的首地址描述。该方案描述了存储空间的描述方式。依靠该描述方式所描述的内容,可以定位读出value的存储位置和写入value的存储位置。
第二方面,本发明提供一种NVMe存储器的实施方式,包括控制器以及存储介质,所述控制器和所述存储介质连接,所述存储介质用于提供存储空间,所述处理器被配置为执行:接收主机发送的快速非易失性存储NVMe写命令,所述NVMe写命令中携带key,所述NVMe写命令携带value指针,所述value指针指向所述主机中的第一存储空间,所述第一存储空间用于存储value,所述key与所述value属于同一个KV对;从所述NVMe写命令中获得所述key,根据所述value指针获得value长度,按照所述value长度为所述value分配第二存储空间,所述第二存储空间在所述存储介质中;发送第一传输请求给所述主机,从所述主机获得所述value,把所述value保存在所述第二存储空间中。NVMe存储器被配置为为执行地一方面的方法以及第一方面各种实现方式的方法。
本发明第三方面提供一种数据处理方法的实施方法,该方法包括:非易失性存储快速NVMe存储器接收NVMe写命令,所述NVMe写命令的头部携带键key,所述NVMe命令还携带值value,所述key和所述value对应,所述key和所述value属于同一个KV对;所述NVMe存储器从所述NVMe写命令中获得所述key以及所述value;所述NVMe存储器把所述value保存在所述NVMe存储器的存储介质中。
结合第三方面的第一种可能的实施方式,所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述NVMe存储器从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。
结合第三方面的第二种可能的实施方式,其中,所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构,所述NVMe存储器按照所述KV格式字段所定义的字段内容,从所述NVMe写命令中获取各个字段。
结合第三方面的第三种可能的实施方式,其中,所述NVMe写命令中进一步携带所述key的长度,所述NVMe存储器从所述写命令中获得所述key具体包括:从所述key的预设起始位置,按照所述key的长度从所述写命令中获得所述key。
结合第三方面的第四种可能的实施方式,其中,所述NVMe写命令中进一步携带value偏移量以及所述value的长度,所述NVMe存储器从所述NVMe写命令中获得所述value具体包括:所述NVMe存储器从所述偏移量指示的位置,按照所述value的长度获得所述value。
结合第三方面的第五种可能的实施方式,该方法进一步包括:生成所述key与所述value存储空间的映射关系。
第三种可能的实现方式,是基于本申请第三方面的第五种可能实现方式,该方法之后,进一步包括:主机发送NVMe读命令给所述NVMe存储器,所述NVMe读命令中携带所述key;所述NVMe存储器从所述主机接收所述读命令,从所述NVMe读命令中获得所述key;所述NVMe存储器使用所述key从所述映射关系中查找所述value存储空间;所述NVMe存储器从使用所述value存储空间获得所述value;所述NVMe存储器生成所述NVMe读命令的响应消息发送给所述主机,所述响应消息携带所述value。
第四方面,本发明提供一种NVMe存储器的实施方式,包括控制器以及存储介质。所述控制器被配置为为执行地三方面的方法以及第三方面各种实现方式的方法。
本发明实施例第五方面,提供一种存储装置,该存储装置可以是物理设备,例如NVMe存储器;也可以是逻辑上设备,例如是运行在NVMe存储器的处理器中的程序,或者存储服务器中的程序。该装置包括:接口模块,用于接收主机发送的NVMe写命令,所述NVMe写命令中携带key,所述NVMe写命令携带value指针,所述value指针指向所述主机中的第一存储空间,所述第一存储空间用于存储value,所述key与所述value属于同一个KV对;处理模块,用于从所述NVMe写命令中获得所述key,根据所述value指针获得value长度,按照所述value长度为所述value分配第二存储空间;存储模块,用于发送第一传输请求给所述主机,从所述主机获得所述value,把所述value保存在所述第二存储空间中。所述第二存储空间可以由在所述NVMe存储器的存储介质提供,所述存储介质和所述NVMe存储器的处理器连接。基于该方案,KV数据从主机传递到NVMe存储器的过程中,不需要把KV数据转换成块的形式,提高了KV数据的存储效率。
在第五方面的第一种可能的实施方式中,所述存储模块发送第一传输请求给主机以及从所述主机获得所述value,具体包括:所述存储模块发送DMA传输请求给所述主机,从所述主机获得所述value,所述DMA指令携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址其中。其中,所述存储装置(存储装置是硬件)和所述主机用PCIe总线连接,或者所述存储装置(存储装置是软件)所在的NVMe存储器和所述主机用PCIe总线连接。该方案提供了使用DMA的方式存储value传输方式。
在第五方面的第二种可能的实施方式中,所述存储模块发送第一传输请求给主机以及从所述主机获得所述value,具体包括:所述存储模块发送RDMA传输请求给所述主机,从所述主机获得所述value,所述RDMA指令携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址其中,所述存储装置(存储装置是硬件)和所述主机用Fabric总线连接,或者所述存储装置(存储装置是软件)所在的NVMe存储器和所述主机用Fabric总线连接。该方案提供了使用RDMA的方式存储value传输方式。
在第五方面的第三种可能的实施方式中,其中:所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述NVMe存储器从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。该方案可以支持正在同一个NVMe写命令中携带复数个KV。
在第五方面的第四种可能的实施方式中,其中:所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构,所述NVMe存储器按照所述KV格式字段所定义的字段内容,从所述NVMe写命令中获取各个字段。该方案可以使得同一个NVMe设备支持多种格式传输KV的NVMe写命令报文,在一次特定的写操作过程中,使用其中一种格式的写命令报文。类似的,在读命令流程中,也可以使得同一个NVMe设备支持多种格式传输KV的NVMe读命令报文。
在第五方面的第五种可能的实施方式中,其中,所述NVMe写命令还携带所述value元数据指针,所述方法还包括:所述NVMe存储器根据所述元数据指针获得元数据长度,按照所述元数据长度为所述元数据分配第四存储空间,所述第四存储空间在所述NVMe存储器中;所述NVMe存储器通过所述第一传输请求从所述主机中获得所述元数据,把所述元数据保存在第四存储空间中。该方案描述了如何对KV中的元数据进行存储的具体方案。
结合第五方面的第五种可能的实施方式,在第六种可能的实施方式中,其中:所述元数据传输失败后,所述处理模块还用于释放为所述value分配的存储空间,以及释放为所述元数据分配的第四存储空间。该方案在元数据传输失败后,可以及时释放被value占用的资源。
结合第五方面的第七种可能的实施方式,其中,所述存储模块发送第一传输请求给所述主机以及从所述主机获得所述value,具体包括下述其中一种:所述处理模块发送至少两个DMA传输请求给所述主机以获得所述value,每个DMA传输请求用于请求获得所述value的一部分,当任意一个DMA传输请求执行失败,则所述存储模块释放为所述value分配的存储空间,其中,所述NVMe存储器和所述主机用PCIe总线连接;或者,所述存储模块发送至少两个RDMA传输请求给所述主机以获得所述value,每个RDMA传输请求用于请求获得所述value的一部分,当任意一个RDMA传输请求执行失败,则所述存储模块释放为所述value分配的存储空间,其中,所述NVMe存储器和所述主机用Fabric连接。该方案可以把同一个value分成多次RDMA传输请求进行传输,减小每次RDMA传输的数据量。
结合第五方面的第八种可能的实施方式,其中,所述处理模块还用于:生成所述key与所述第二存储空间的映射关系。该映射关系可以为后续的KV(尤其是value)的读取方案提供基础。
结合第五方面的第九种可能的实施方式,所述接口模块还用于从所述主机接收NVMe读命令,所述NVMe读命令中携带所述key。所述处理模块,还用于根据所述key在所述映射关系中查询,获得存储所述value的所述第二存储空间的位置信息,把处理模块还用于,通过所述接口模块把所述第二存储空间的位置信息发送给所述主机;所述接口模块还用于接收所述主机发送的第二传输请求,所述第二传输请求用于请求获得存储在所述第二存储空间的数据。该第五方面的第八种可能的实施方式可以实现对KV(或者value)的读取。
结合第五方面的第十种可能的实施方式,其中,所述接口模块在接收所述主机发送的第二传输请求之前,所述主机还用于:根据所述第二存储空间的大小预留所述主机中的第三存储空间。所述存储装置发送所述value给所述主机之后,所述主机还用于把收到的来自所述第二存储空间的数据写入所述第四存储空间空间。该方案描述了主机在读取KV(或者value)的具有的功能。
结合第五方面的第十一种可能的实施方式,所述接口模块接收的所述主机发送的NVMe读命令中还携带所述主机的空闲空间信息,所述NVMe存储器从所述主机接收所述NVMe读命令之后,进一步包括:所述NVMe存储器判断所述主机的空闲存储空间是否大于等于所述第二存储空间,如果是,执行将所述第二存储空间的位置信息发送给所述主机的步骤,如果否,结束步骤。该方案在NVMe读命令中携带所述主机的空闲空间信息,主机不用在收到NVMe存储器响应后判断空闲空间是否足够以及预留存储空间,可以减少NVMe存储器和主机之间的交互次数,提高了主机读取value的效率。需要说明的是,这里的空闲空间是一段地址连续的空间。
结合第五方面的第十二种可能的实施方式,其中:所述第一存储空间用第一存储空间的首地址和所述value长度描述;所述第二存储空间用第二存储空间的首地址描述。该方案描述了存储空间的描述方式。依靠该描述方式所描述的内容,可以定位读出value的存储位置和写入value的存储位置。
第六方面:结合第五方面及第五方面的各种可能的实现方式提供的存储装置,本发明还还提供存储系统的实施方式,存储系统包括主机和存储装置。
本发明第七方面提供一种存储装置,该存储装置可以是物理设备,例如NVMe存储器;也可以是逻辑上设备,例如是运行在NVMe存储器的处理器中的程序,或者存储服务器中的程序。该装置包括:接口模块,用于接收NVMe写命令,所述NVMe写命令的头部携带键key,所述NVMe命令还携带值value,所述key和所述value对应,所述key和所述value属于同一个KV对;处理模块,用于从所述NVMe写命令中获得所述key以及所述value;存储模块,用于把所述value保存在所述NVMe存储器的存储介质中。
结合第七方面的第一种可能的实施方式,所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述处理模块从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。
结合第七方面的第二种可能的实施方式,其中,所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构,所述处理模块按照所述KV格式字段所定义的字段内容,从所述NVMe写命令中获取各个字段。
结合第七方面的第三种可能的实施方式,其中,所述NVMe写命令中进一步携带所述key的长度,所述处理模块从所述写命令中获得所述key具体包括:从所述key的预设起始位置,按照所述key的长度从所述写命令中获得所述key。
结合第七方面的第四种可能的实施方式,其中,所述NVMe写命令中进一步携带value偏移量以及所述value的长度,所述处理模块从所述NVMe写命令中获得所述value具体包括:所述处理模块从所述偏移量指示的位置,按照所述value的长度获得所述value。
结合第七方面的第五种可能的实施方式,所述存储模块进一步用于:生成所述key与所述value存储空间的映射关系。
第七种可能的实现方式,是基于第七方面的第五种可能实现方式,提供一种主机的说是方式:主机用于发送NVMe读命令给所述NVMe存储器,所述NVMe读命令中携带所述key;所述接口模块还用于从所述主机接收所述读命令,从所述NVMe读命令中获得所述key;所述处理模块还用于使用所述key从所述映射关系中查找所述value存储空间;所述处理模块还用于从使用所述value存储空间获得所述value;所述处理模块还用于,生成所述NVMe读命令的响应消息,通过所述接口模块把响应消息发送给所述主机,所述响应消息携带所述value。
第八方面:结合第七方面及第七方面的各种可能的实现方式提供的存储装置,本发明还还提供存储系统的实施方式,存储系统包括主机和存储装置。
第九方面:结合第二方面及第二方面的各种可能的实现方式提供的存储器,本发明还还提供存储系统的实施方式,存储系统包括主机和NVMe存储器。
第十方面:结合第四方面及第四方面的各种可能的实现方式提供的存储器,本发明还还提供存储系统的实施方式,存储系统包括主机和存储装置。
基于本发明提供数据处理方法、NVMe存储器以及存储系统的方案。可以提高把KV数据写入NVMe存储器的效率。
附图说明
图1是一种数据处理方法实施例的流程图;
图2是一种NVMe命令格式示意图;
图3是一种NVMe命令格式示意图;
图4是一种NVMe命令格式示意图;
图5是一种NVMe命令格式示意图;
图6是一种key和value存储位置、metadata存储位置映射关系示意图;
图7是一种数据处理系统硬件拓扑实施例拓扑图;
图8是一种数据处理方法实施例的流程图;
图9是一种命令格式示意图;
图10是一种命令格式示意图;
图11是一种命令格式示意图;
图12是一种写数据方法实施例流程图;
图13是一种读数据方法实施例流程图;
图14是一种写数据方法实施例流程图;
图15一种数据处理系统实施例逻辑功能图。
具体实施方式
快速非易失性存储(Non-Volatile Memory Express,NVMe)是一种逻辑设备接口,可以支持使用PCIe总线访问非易失性存储介质。NVMe接口可以用于flash介质的存储器,例如固态硬盘SSD。NVMe接口的设备,称为NVMe设备。NVMe存储器是NVMe设备的一种,指具有存储功能的NVMe设备,下面主要以NVMe存储器(本发明实施例中,把NVME存储器简称存储器)为例进行介绍。
KV存储,也称为K/V存储,是存储技术的一种。在KV存储中,键-值(key-value/keyvalue)对是基本数据模型。Key-value对可以包括键(key)和值(value)。对key-value对进行扩展之后,Key-value对还可以包括元数据(Metadata)。key唯一标记一个value。
如果主机以块的方式把KV数据发送给NVMe存储器进行存储,主机需要执行的操作包括:首先,把KV数据转换为块的形式;然后,给块分配存储器上的逻辑块地址(LogicBlock Address,LBA);接着,生成写命令,写命令中携带块以及块的LBA;NVMe存储器收到块后,按照LBA对应的物理地址对块进行存储。如果要读取这些KV数据,需要先读取块数据,然后把块数据转换成KV数据。写入KV数据过程中,分配LBA地址以及把KV数据转换成块数据需要耗费主机大量的时间和系统资源,增加系统延迟。读取KV数据的过程中,主机需要发送待读块的位置信息(例如起始地址+长度)给NVMe存储器,获得到块数据后,把块数据重新转换成KV数据也会耗费主机大量的运算资源,增加系统延迟。
本申请可以适用NVMe场景以及NVMe Over Fabric(NOF)的场景。NVMe场景中,主机和存储器通过总线(例如PCIe总线)连接,在这种场景下,存储器作为主机的一个组件,例如主机是服务器,存储器是服务器中的NVMe接口固态硬盘(SSD)。NOF场景中,主机和存储器通过fabric(例如以太网、FC等)连接。主机包括内存和处理器以及接口,主机和存储器这二者可以是两个独立的设备。本发明实施例中,主机是读数据和写数据的发起者,因此称作发起者(initiator);存储器是读请求或者写请求的响应者,也称作目标器(target)。
本发明实施例可以扩展现有的NVMe协议,提出了新的NVMe命令。新的NVMe命令对现有的NVMe命令(例如NVMe标准协议1.2.1中所定义的NVMe命令,或者NVMe over Fabric标准协议1.0所定义的NVMe命令)进行了的扩展和优化,使得NVMe设备可以直接支持KV的接口。
由于NVMe设备可以直接支持KV的接口,因此存储器和主机之间可以直接通过NVMe协议传输KV数据。主机可以通过NVMe协议直接把KV数据写入存储器,或者通过NVMe协议直接从存储器中读出KV。因此,存储器和主机之间避免了像现有技术那样在KV格式和Block格式之间的反复转换,降低了系统复杂度,提高了系统性能。在没有特别说明情况下,本发明各实施例中的NVMe命令均是指扩展的NVMe命令。
在一种可选的实现方式中,key直接携带在NVMe命令的命令头中,因此,直接读取NVMe的命令头(不需要解析NVMe命令的净荷)就可以获得key。
对于value,可以携带在NVMe命令中,读取NVMe命令可以获得所述value。此外,NVMe命令也可以不直接携带value,而是携带value的指针,value指针直接或者间接的指向了value的存储空间,通过DMA/RDMA技术可以从value的存储空间获得所述value。
下面对本发明各实施例可能出现的名词进行示例性介绍。
在现有的NVMe写命令中,增加如下参数,或者定义全新的NVMe KV写命令,其中可以包含如下参数。
Number of KV:一个NVMe命令中传输的KV的数量。KV包括key和与key对应的value。或者KV包括key和value指针,value指针指向value存储空间,value和key对应。
Value(值):数据,可以被存储到存储器中,或者从存储器中读取。例如一个电影。
Key(键):唯一标识一个Value,key也可以称为关键码。Key与对应的value的组合可以称为KV或者KV对(pair)。
KV(key value):key和value的组合,也称为KV对(KV pair)。可选的,KV中还包括metadata。
metadata(元数据):用于描述value的属性。例如:如果Value是一部电影,元数据可以包括不限于:电影名称、时长、主演等信息。
Common Header(公共头部):是命令头(Header)的一部分,指命令头中和现有NVMe命令头相同的部分。
KV Format ID(KV格式ID):指示当前NVMe命令的格式。或者说定义NVMe命令中各个字段的内容。传输KV的NVMe命令可以有多种命令格式,通过KV Format ID来区分。不同的命令格式的NVMe报文可以有不同的字段,或者不同的字段排列顺序。
Key Length:描述key的长度。
Value Length:描述value的长度。
Metadata Length:描述Metadata的长度。
Key Offset:描述key在NVMe命令中的偏移位置。
Value Offset:描述value在NVMe命令中的偏移位置。
Metadata Offset:描述元数据在NVMe命令中的偏移位置。
DPTR(Data Pointer):数据指针,指向待传输的数据。
MPTR(Metadata Pointer):元数据指针,指向待传输的元数据。
PRP(Physical Region Page)Entry:物理区域页实例(或者称为物理区域页格式条目),可以记录指针。PRP是NVMe协议中常用的两种数据传输协议,可以用于NVMe overPCIe架构。PRP entry可以指向物理内存页(memory page)的指针。
SGL(Scatter Gather List)Entry:分散搜集表实例(或者称为分散搜集表格式条目),可以记录指针。SGL是NVMe协议中常用的两种数据传输协议之一,可以用于NVMe overPCIe/Fabric架构。
参见图1,本发明提供一种数据处理方法实施例,可以用于NVMe存储器和主机之间。
11,主机生成NVMe写命令(后文简称写命令)发送给存储器,写命令中携带value以及与value对应的key。写命令通过主机的NVMe接口发送给NVMe存储器。key和value可以携带在净荷中,也可以携带在命令头中。
本步骤中,Key可以携带在命令的头(header)中,也可以携带在净荷(payload)中。本发明各实施例中,在没特别声明的情况下,写命令/读命令中携带的字段既可以在命令头中,也可以在净荷中。例如,value可以携带在命令头中,也可以携带在净荷中。
可选的,如果写命令中携带不止一个KV,那么写命令中还可以携带number of KV,用于描述KV的数量。存储器收到写命令后,可以按照number of KV指示的KV数量对KV进行读取,读取完所有KV后停止读取。此外,还可以使用结束符来指示KV的结束,读到结束符后停止读取。
可选的,写命令进一步携带KV Format ID,传输KV的NVMe命令可以有多种命令格式,不同的命令格式中,字段可以不同,字段的位置也可以不同。KV Format ID用于指示本命令所使用的命令格式。
key在写命令的命令头中的位置可以是不固定的,也可以是预先设定的固定位置。如果key在写命令中的位置是不固定的,写命令中可以进一步携带key位置信息。key位置信息可以是key length与key offset的组合,key offset描述key在写命令中的起始位置。key位置信息也可以是key在写命令中的起始位置和key在写命令中结束位置的组合。如果key在写命令中的起始位置预先设定,那么key位置信息可以是key length,key length描述key的长度。
有两种方案可以预先设定关于key的起始位置。一种是预先设定key在命令中的位置,例如从命令的首个bit开始,从第20bits开始是key;另外一种是预先设定key和其他字段的相对位置,例如key字段在key length字段之后,并且key字段与key length字段相邻。类似的,本实施例和其他实施例中涉及到的“预先设定”的位置均可以使用这两种方案,例如本实施例后续将要介绍的value、metadata的起始位置。
key可以是定长或者变长。key是定长,指每个命令中的key长度相同。Key是变长是指不同的命令中,key的长度可以不同。在key为定长的情况下,命令的接收方可以忽略位置信息(例如key length),或者写命令可以不屑道位置信息。存储器收到写命令后,直接按照预设的起始位置,按固定的长度读取key即可。
value在写命令中的位置可以是固定的也可以是不固定的。如果value在写命令中的位置不是固定的,写命令中可以进一步携带value位置信息。value位置信息可以是valuelength,value在写命令中的起始位置预先设定,因此可以不携带在写命令中。从value的起始位置开始,以value length作为读取长度,就可以可从写命令中读取出value。value位置信息可以是value length与value offset的组合,value offset描述value在写命令中起始位置。value位置信息也可以是value在写命令中的起始位置和value在写命令中结束位置这二者的组合。
value可以是定长或者变长。当value为固定长度的时候,命令的接收方可以忽略位置信息(例如value length),或者写命令中不携带位置信息。命令的接收方直接按照预设的起始位置,按固定的长度读取value即可。
可选的,写命令中进一步携带value的metadata。metadata可以携带在写命令的命令头中或者净荷中。
metadata在写命令中的位置可以是固定的。如果metadata在写命令中的位置不是固定的,写命令中可以进一步携带metadata位置信息。Metadata位置信息和value位置信息类似,因此可以参见value位置信息的描述,此处不做赘述。同样的,metadata可以是定长或者变长。
参见图2是一种可选的写命令的命令格式,common header是NVMe命令头的一部分。该命令携带2个KV,因此有2个key,分别是key1和key2;有2个value,分别是value1和value2;2个key length,分别是key1 length和key2 length;2个value length,分别是value1 length以及value2 length。此外,该命令还携带2个metadata,分别是metadata1和metadata2;以及对应的metadata length1和metadata length2。
参见图3,是另一NVMe命令格式示意图。和图2相比,增加了value位置信息(value1offset,value2 offset),以及metadata位置信息(metadata1 offset,metadata1 length,metadata2 offset,metadata2 length),还增加了number of KV,在图3示例的命令中携带了2个KV,因此number of KV的值是2。NVMe命令中的位置信息描述的都是字段在NVMe中的位置。图3中以箭头来表示:通过偏移量可以找到待写数据的位置(例如起始位置)。例如,在读出value1 offset字段后,value1 offset字段的值描述了value1在命令中的偏移位置,从而可以读出value1 offset。图3的命令格式中,字段的分布按字段的类型确定,同类型的字段相邻。例如value和metadata都属于数据部分,因此相邻;value位置信息和metadata位置信息都属于位置信息,因此相邻。
参见图4,是另一NVMe命令格式示意图。和图3相比,字段按照KV归属分布,同一个KV的字段相邻。图4的命令格式中,先是KV1的字段,然后是KV2的字段。此外,在图4的命令格式中,value和value length相邻;metadata和metadata length相邻。
参见图5,是另一NVMe命令格式示意图。图5中,同一个KV的字段相邻。此外,valuelength和metadata length相邻,value和metadata相邻。
12,存储器的NVMe接口接收写命令,存储器从写命令中获得key和value。如果写命令中携带有metadata,则还从写命令中获得metadata。
存储器由控制器和存储介质组成,控制器中包括处理器,可选的,还可以包括内存。存储介质例如是闪存或者磁盘。存储器也可以是具有管理能力的硬盘,称为智能硬盘。
如果多种类型的NVMe命令格式(例如图2和图3分别是不同类型的NVMe命令格式)被同一个存储器支持,则存储器通过KV Format ID可以确定收到的命令是哪一种格式。然后按照这个格式中key、value等字段的位置读出key和value等内容。不同的NVMe命令格式,数据的位置关系可以不同。例如,有的格式中,key的位置是固定的;有的格式中,key的位置不是固定的,由key位置信息确定。
如果写命令中携带一个KV,则读出这一个KV。如果写命令中携带至少两个KV,则读出这至少两个KV。存储器可以通过number of KV字段获知KV的数量,在读出相应数量的KV后完成读操作。除了使用number of KV外来标记什么情况下完成读操作外,也可以在命令中增加结束符来,在读到结束符后表示整个命令中的KV已经读取完毕。
如果key的位置是固定的,则存储器通过固定位置读出key。如果key的位置不固定,则按照key位置信息从写命令中读出key。例如,key的位置信息是key length,key在写命令中的起始位置预先设定,从key的起始位置开始,以key length作为读取长度连续的读出数据,即可获得写命令中携带的key。例如,key的位置信息是key length与key offset的组合,则以key offset作为key的起始位置,以key length以key length作为读取长度连续的读出数据,即可获得写命令中携带的key。例如,key的位置信息是起始位置和结束位置共同组成,则读取起始位置和结束位置之间的数据,即可获得key。
关于读取value和metadata的读取方式,均可以参考key的读取方式,此处不再赘述。在读出key/value/metadata时,存储器可以获得key length/value length/metadatalength。
以图2的命令格式为例,command header、KV format ID、key length以及valuelength这几个字段的长度是固定的,各个字段的相对位置也是固定的,因此可以不需要keyoffset、value offset等字段来确定key、value的起始位置。存储器读取写命令各个字段的顺序是:读取command header,读取KV format ID,读取key 1length,按照key 1length所记录的数值读取key1,读取value1 length,按照value1 length读取value1,读取key2length,按照key2 length读取key2,读取value2 length,按照value2 length读取value2。。
13,存储器对value进行存储。具体而言,是存储器的控制器把key和value存储到非易失性存储介质中。存储器的接口收到value后,先发送到处理器。本步骤中,处理器把value暂存在内存中,然后从内存下发到非易失性存储介质。
此外,存储器还可以记录key和value存储空间的映射关系。映射关系的可以由存储器的存储介质进行存储;也可以是发送给主机,由主机进行存储。后文以由存储器进行存储进行举例。
如果写命令中还携带metadata,则也对metadata进行存储,并记录key和metadata存储空间的映射关系。
value存储空间可以用value存储空间的起始地址和value长度描述。metadata存储空间可以包括metadata存储空间的起始地址和metadata data长度描述。参见图6是映射关系的示意图,包括key和value存储空间的起始地址的映射,key和value长度的映射,key和metadata存储空间的起始地址的映射,key和metadata长度的映射。可以把key作为索引在映射关系中查找对应的value存储空间的起始地址、value长度、metadata存储空间的起始地址以及metadata长度。图6的示意图所描述的内容记录在KV管理单元中。如果value和metadata定长,value长度和metadata长度是可选的。
存储空间可以是逻辑位置或者物理位置。只要存储器的控制器使用存储空间可以从存储介质中读取value和metadata即可。
上面步骤11-步骤13是写KV的过程,接下来的步骤14-步骤16是读KV的过程。这两个过程是相互独立的,读命令所请求的KV和写命令所写入的KV可以不是同一个。
14,主机生成NVMe读命令(后文简称读命令),发送读命令给存储器,读命令中携带所述key。key可以携带在读命令的命令头中。
生成读命令的主机和生成写命令的主机可以是同一个主机,也可以是不同主机。读命令的命令格式参考步骤11中写命令的格式以及图2。读命令包括command header,KVformat ID和key。可选的,读命令中携带key位置信息。一个读命令中可以携带一个key也可以携带至少两个key。当携带至少两个key时,可以携带number of KV字段,以描述携带的key的数量。
读命令中可以没有value字段以及其他和value相关的字段。此外,读命令中可以没有metadata字段以及其他和metadata相关的字段。
15,存储器通过NVMe接口,接收读命令,从读命令中获得key。从存储器存储的KV管理单元中,查找key对应的value存储空间。从value存储空间中获得value并构造读命令的响应消息发送给主机,响应消息中携带value。
参考步骤12,按照命令格式的不同,获得key的方式也略有不同。例如,可以从读命令的固定位置获得key,也可以按照读命令中携带的位置信息从写命令中获得key。
类似的,如果存储器中存储有与key对应的metadata,可以按照类似的方法查询metadata的存储空间并获得metadata。
需说明的是,如果KV管理单元存储在主机中,则使用key在主机中查询value存储空间,把value存储空间方式发送给存储器,存储器依靠value存储空间获得value发送给主机。
16,主机接收value并存储。例如可以存储在主机的内存(例如缓存)中,或者存储在主机的非易失性存储介质中。
上述步骤11-16中,value和metadata都携带在NVMe命令中,不用进行KV和block之间的转换,具有简单快捷的优点。读命令不用携带value和/或metadata的LBA,因此读value和/或metadata的过程也更为快捷。
参见图7,是本发明的数据处理系统硬件拓扑实施例,主机71和存储器72通信。主机71包括处理器711、内存712以及接口713。存储器72包括接口721、控制器722以及存储介质723。接口713和接口721通过通信链路73连接,通信链路73例如是PCIe总线、光纤通道FC或者以太网。
主机71所执行的操作可以由处理器711执行,例如处理器711通过运行内存712中的程序,可以执行步骤11、14和16,内存712和处理器711相对独立,也可以集成在一起。存储器72包括控制器722和存储介质723。存储器72所执行的操作由存储器的控制器722执行。具体而言,可以由处理器7211运行内存7212中的程序来执行存储器的操作,例如存储器的处理器用于执行步骤12、13和15。在一些情况下,例如当处理器是FPGA的时候,可以没有内存,直接由处理器执行相应的操作。
类似的,后续的方法中使用了相同的硬件,不同在于,主机和存储器用于执行的操作不同。例如,步骤21、24和27由主机71执行,23和25由存储器72执行。步骤22和26中,一部分操作由主机71执行,另外一部分操作由存储器72执行。
参见图8,本发明还提供一种实施方式,写命令中不直接携带value或者metadata,而是在NVMe命令中携带指针,通过指针指向的存储空间可以获得待写value和/或metadata,或者采用多级指针的方式,一个指针指向另外一个指针,从另外一个指针所指向的存储空间获得待写value和/或metadata。这种实施方式对于待写的value和/或待写的metadata的大小没有限制。
主机和存储器可以通过IP、FC等网络连接,可以运行在Fabric架构,也称为NOF(NVMe Over Fabric)架构。在NOF架构下,存储器可以通过远程直接数据存取(RemoteDirect Memory Access,RDMA)的方式获得value和/或metadata。如果存储器在主机内部,存储器还可以通过直接数据存取(Direct Memory Access,DMA)的方式从主机获得value和/或metadata。类似的,主机也可以通过RDMA/DMA的方式从存储器直接获得value和/或metadata。
步骤21,主机构造写命令,写命令中携带KV,KV包括value指针以及value的key。写命令通过主机的NVMe接口发送给NVMe存储器。所述key和所述value属于同一个KV对。
value指针可以携带在净荷中,也可以携带在命令头中。类似的,写命令或者读命令中携带的其他数据既可以携带在命令头中,也可以携带在净荷中。
在其他实施例中,写命令也可以携带key指针而不携带key。根据key指针获得key的方案,和通过value指针获得value的原理相同,因此下面不做赘述。仅以写命令携带key为例进行介绍。
value指针直接或者间接的指向了value的存储空间(为了方便描述,后文也称作第一存储空间),因此通过value指针可以获得value。value指针指向value存储空间(这种情况也被视为value指针指向了value)的情况下,可以从value指针指向的存储空间获得value。另外一种情况是,value指针指向第一指针,而第一指针指向value的存储空间,从value指针找到第一指针,从第一指针指向的存储空间可以获得value。后一种情况中,可以携带尺寸更大的value。在其他实施例中,指针之间的引用还可以有更多的层级,只要最终能找到value的存储空间即可,例如value指针指向第一指针,第一指针指向第A1指针,第A1指针指向第A2指针,……,第AN-1指针指向第AN指针,第AN指针指向value的存储空间,N是大于等于2的整数。value指针可以携带在写命令的命令头或者净荷中。
所述第一存储空间可以用第一存储空间的首地址和所述value长度描述,也可以用第一存储空间的首地址和末地址描述。例如:value指针记录第一存储空间的首地址和value长度;或者,value指针指向了另一个指针,所述另一个指针记录第一存储空间的首地址和value长度。第一存储空间可以是逻辑位置或者物理位置。只要存储器使用第一存储空间可以从存储介质中读取存储的数据即可。
可选的,如果写命令中携带不止一个KV,那么写命令中还可以携带Number of KV。用于描述KV的数量。
可选的,写命令进一步携带KV Format ID,传输KV的NVMe命令可以有多种命令格式,不同的命令格式中,字段可以不同,字段的位置也可以不同。KV Format ID指示本命令所使用的命令格式。
key在写命令的命令头中的位置可以是固定的,也可以是预先设定的固定位置。key的特征可以参见步骤11对key的描述,此处不做赘述。
可选的,写命令中进一步携带metadata指针。和value指针类似,metadata指针直接或者间接指向metadata存储空间,因此通过metadata指针可以获得metadata。metadata指针可以携带在写命令的命令头或者净荷中。
metadata指针直接或者间接的指向了metadata的存储空间,通过metadata指针可以获得metadata。metadata指针直接指向metadata(具体而言是metadata的存储空间)的情况下,可以从metadata指针指向的存储空间获得metadata;另外一种情况是,metadata指针指向第二指针,而第二指针指向metadata的存储空间,从metadata指针找到第二指针,从第二指针指向的存储空间可以获得metadata。后一种情况中,可以携带更长的metadata。在其他实施例中,指针之间的引用还可以有更多的层级,只要最终能找到metadata的存储空间即可,例如metadata指针指向第二指针,第二指针指向第B1指针,第B1指针指向第B2指针,……,第BN-1指针指向第BN指针,第BN指针指向metadata的存储空间,N是大于等于2的整数。
此外,metadata可以不通过指针的方式传输,而是直接携带在命令中,具体可以参考步骤11以及图2、图3中metadata的携带方式。
value指针可以是数据指针(Data Pointer,DPTR)。metadata指针可以是元数据指针(Metadata Pointer,PMTR)。
参见图9,是一个命令格式图。图9的命令中携带2个KV,KV中key直接携带在写命令中,value是以指针的方式携带在写命令中。分别是key1和DPTR1(指向value1),以及key2和DPTR2(指向value2)。此外,还通过指针的方式携带了这2个KV的metadata,其中MPTR1指向metadata1,MPTR2指向metadata2。本发明实施例中,每个命令可以携带1个KV,也可以携带2组以上的KV。
参见图10,是另外一个命令格式图。命令中的指针(DPTR,MPTR)没有直接指向value或者metadata,而是指向PRP entry或者SGL entry,PRP entry或者SGL entry是链表中的节点,每个PRP/SGL entry指向了另外一个地址,PRP/SGL entry指向的地址中存储了value或者metadata。也就说,写命令通过二级指针的方式指向了value或者metadata。在图10的方案中,key携带在命令中,具体而言是写的在命令头中。
参见图11的命令格式,和图10不同之处在于,图10的key没有直接携带在命令中,而是通过指针的方式传输,具体如何携带可以参考value指针的介绍。key指针可以携带在命令的命令头中。
具体而言,DPTR指向PRP/SGL entry1,而PRP/SGL entry2和PRP/SGL entry1属于同一个链表,因此找到PRP/SGL entry1即可以找到PRP/SGL entry2。因此,也可以认为DTPR指向了PRP/SGL entry1以及PRP/SGL entry2。PRP/SGL entry1指向了value1,PRP/SGLentry2指向了value2。类似的,MPTR指向了PRP/SGL entry3以及PRP/SGL entry4,PRP/SGLentry3指向了metadata1,PRP/SGL entry4指向了metadata2。依靠DPTR可以找到value1的存储空间和value2的存储空间;依靠MPTR,可以找到metadta1的存储空间和metadata2的存储空间。PRP entry和SGL entry均是链表中的节点,PRP适用于普通NVMe(用PCIe连接主机和存储器),SGL适用于NOF(用Fabric连接主机和存储器)。RDMA可以使用PRP,DMA可以用PRP或者SGL。
PRP通过一系列的指向memory page指针,将数据所在的位置传输给NVMe设备,NVMe设备收到这些地址后,通过DMA的方式即可将数据从主机读取到NVMe设备上。SGL传输机制相对于PRP更加灵活一些,可以指定传输的长度,能够在地址连续的传输过程中跳过一些地址空间进行传输。SGL将需要传输数据的地址传输给NVMe设备,NVMe设备收到这些地址之后,通过DMA的方式将数据从主机读取到NVMe设备上。
此外,相较于图9,图10中还增加了number of KV字段以及key length字段,在步骤11、步骤12中已有介绍,不再赘述。
步骤22,存储器通过NVMe接口接收写命令。存储器通过value指针获得value的长度,按照value长度为value分配存储空间(为了方便描述,后文称作第二存储空间),把分配的存储空间的位置信息发送给主机。存储器发送传输请求(第一传输请求)给主机,从主机的第一存储空间获得value。主机和存储器是PCIe连接,则第一传输请求可以是DMA传输请求,例如单个DMA传输请求。主机和存储器是Fabric连接,则第一传输请求可以是RDMA传输请求,例如单个RDMA传输请求。第一传输请求把第一存储空间的地址作为访问地址,第二存储空间的地址作为写入地址。第一传输请求中,访问地址可以是:第一存储空间的首地址+value长度,写入地址可以是:第二存储空间的首地址(或者是第二存储空间的首地址+value长度)。
存储器发送DMA/RDMA传输请求给主机,主机收到传输请求后执行DMA/RDMA传输,把value发送给存储器。
预先分配第二存储空间是可选的,存储器也可以不提前分配第二存储空间,直接从主机获得value,然后再为value分配第二存储空间。这种情况下,第一传输请求不携带写入地址。
如果写命令中携带有metadata指针,则还为metadata分配存储空间(第四存储空间)。由于metadata指针的处理方式和value指针相似,因此后续仅对value指针进行介绍。
在按照value指针获得value之前,按照value长度在存储器中中分配用于存储value的存储空间(第二存储空间),第二存储空间不小于value长度。第二存储空间的可以用首地址+末地址描述,也可以用首地址+value长度描述,也可以仅用首地址描述。value长度可以由value存储空间确定。例如写命令中,第一存储空间由存储value的空间的起始地址+value长度描述,则可以直接从写命令中获得value长度。
存储器由控制器和存储介质组成,控制器中包括处理器,存储介质例如是闪存或者磁盘。
command header、KV format ID、key以及key length这几个字段在步骤12中已有介绍,如何获得它们,以及如何利用他们获得相应信息此处不再赘述。
和步骤11-16所介绍的实施例不同的是,本实施例中不是直接从命令中获得value和/或metadata,而是依靠指针来获得value和/或metadata。
写命令中携带的value指针直接指向了第一存储空间,例如图9的命令格式,写命令中的指针DPTR指向了value存储空间(第一存储空间)。具体而言,指针DPTR指向了主机的一段内存地址范围,这一段内存地址范围存储了所述value。则按照DPTR描述的存储空间,以DMA或者RDMA的方式从主机内存地址获得value。按照同样的方式,可以通过MPTR获得metadata。
如果写命令中的value指针间接指向value,可以参考图10的写命令格式:value指针直接指向了另外一个指针,另外一个指针指向value。写命令中的指针DPTR指向了PRP/SGL entry,PRP/SGL entry指向了主机内存地址,主机内存地址是value的存储空间。存储器先通过DPTR找到PRP/SGL entry,然后通过PRP/SGL entry找到位于主机内存的value存储空间,以DMA或者RDMA的方式从主机内存中获得所述value。
如果metadata指针携带在写命令中,则获得metadata的方式和获得value的方式相同。如果metadata直接携带在写命令中,则可以参照步骤12从写命令中直接获得metadata。
存储器发送第一传输请求给主机,从主机的第一存储空间获得value。如果主机和存储器是PCIe连接,第一传输请求可以是DMA传输请求;如果主机和存储器是Fabric连接,第一传输请求可以是RDMA传输请求。具体而言,可以分为两个步骤:(1)主机发送传输请求给主机,传输请求中携带第一存储空间作为访问地址,携带所述第二存储空间作为写入地址。具体而言,传输请求中携带的第一存储空间,可以由第一存储空间的首地址和所述value长度描述;第二存储空间用第二存储空间的首地址描述。(2)主机收到传输请求后,从第一存储空间读出数据,发送给存储器的第二存储空间进行存储。
本步骤中,可以传输key、value以及metadata通过单个DMA/RDMA传输。也可以把key、value和metadata分别进行传输。
步骤23,存储器对value进行存储。具体而言,可以是存储器的控制器把key和value存储到存储器的存储介质中。如果步骤22中还获得有metadata,也对metadata进行存储。
例如从第二存储空间的首地址开始,把value连续的存入存储器的存储介质中。
此外,还可以记录key和value存储空间的映射关系,参见图6,图6中value存储空间由首地址+value长度描述。映射关系记录在KV管理单元中。value长度和metadata长度是可选的,因为这value和metadata都可以是固定长度。
上述步骤21-23中,value以指针的方式进行传输。在其他实施例中,key也可以用指针(直接指针或者间接指针)的方式传输,具体可以参照value的传输方式,此处不赘述。
上述步骤21-23是写命令的过程,步骤24-26是读命令的执行过程,这两个过程是相互独立的。读命令所请求的KV和写命令所写入的KV可以不是同一个。读命令和写命令的命令格式相似,区别在于读命令不携带value指针和metadata指针。
24,主机生成读命令发送给存储器,读命令中携带所述key。key可以携带在读命令的命令头中。
生成读命令的主机和生成写命令的主机可以是同一个主机,也可以是不同主机。读命令的格式参考步骤11中写命令的格式以及图2,读命令包括command header,KVformat ID和key。可选的,读命令携带key或者key指针。一个读命令中可以携带一个key也可以携带至少两个key。当携带至少两个key时,可以携带number of KV字段,以描述携带的key的数量。
读命令请求读出value和/或metadata。
和写命令相比,读命令中可以没有value字段以及value位置信息,读命令中可以没有metadata字段以及metadata位置信息。
25,存储器通过NVMe接口接收读命令,从读命令中获得key。使用获得的key,从存储器存储的映射关系中,查找value的存储空间并发送给主机。value在存储器中的存储空间是第二存储空间。
如果key直接携带在读命令中,参考步骤12,按照命令格式的不同,从读命令中获得key的方式也略有不同。例如,可以从读命令的固定位置获得key;如果key在读命令中的位置不固定,可以按照读命令中携带的位置信息从读命令中获得key。
可选的,如果存储器中存储有与key对应的metadata,还可以获得metadata的存储空间并发送给主机。
26,主机按照value长度给value分配存储空间(命名为第三存储空间)。主机构造传输请求(第二传输请求),发送传输请求给存储器,从存储器第二存储空间中获得value。
主机和存储器是PCIe连接,则第二传输请求可以是DMA传输请求,例如单个DMA传输请求;主机和存储器是Fabric连接,则第二传输请求可以是RDMA传输请求,例如单个RDMA传输请求。传输请求中,访问地址可以是:第二存储空间的首地址+value长度,写入地址可以是第三存储空间的首地址(或者是第三存储空间的首地址+value长度)。由前述步骤可知第二存储空间用于存储所述value,因此所述value长度和第二存储空间大小相同。也就是说第二存储空间的大小等于第三存储空间的大小。
value长度可以由value存储空间确定。例如在读命令中中,第二存储空间由存储value的空间的起始地址+value长度描述,则可以直接从写命令中获得value长度。
主机发送DMA/RDMA传输请求给存储器,存储器收到传输请求后执行DMA/RDMA传输,把value发送给主机。
预先分配第三存储空间是可选的,主机也可以不提前分配第三存储空间,直接从存储器获得value,然后再为value分配第三存储空间。这种情况下,传输请求不携带写入地址。
类似的,主机可以按照metadata长度给metadata分配存储空间。并从存储器获取metadata。
27,主机把收到的value存入第三存储空间。例如从第三存储空间的首地址开始,把value连续的存入主机。第三存储空间例如在主机的内存中。
采用把value存入主机的的相类似的方法,把所述metadata存入主机。
需要说明的是,在其他实施例中,可以不使用DMA或者RDMA,把步骤26、27修改为:主机给所述value分配存储空间,存储器从所述第二存储空间中读出所述value,把读出的value写入所述第三存储空间。
此外,步骤26的另外一种可选方案是:所述NVMe存储器接收的所述主机发送的NVMe读命令中还可以进一步携带所述主机的空闲空间信息,空闲空间信息用于描述主机中连续的空闲存储空间的大小。所述NVMe存储器从所述主机接收所述NVMe读命令之后,进一步包括:所述NVMe存储器判断所述主机的空闲存储空间是否大于等于所述第二存储空间,如果是,执行将所述第二存储空间的位置信息发送给所述主机的步骤,如果否,结束步骤。这种方案中,可以把主机中连续的空闲存储空间称为所述第三存储空间。
参见图12,以同一个命令中携带value指针和metadata指针为例,对步骤21-步骤23进行介绍。
步骤31,主机构造写命令。写命令中携带key。此外,写命令中携带value源地址链表和metadata源地址链表。源地址链表拥有指针的功能,value和metadata的源地址链表分别指向value的存储空间和metadata的存储空间。
步骤32,主机发送写命令给NVMe设备。
步骤33,NVMe设备收到写命令后,从写命令中解析出value源地址链表和metadata的源地址链表。链表例如是PRP entry或者SGL entry。
步骤34,NVMe设备从value源地址链表中解析出value长度,从metadata的源地址链表中解析出metadata长度。源地址链表描述了待读取数据的存储空间,因此可以从中解析出value长度和metadata长度。
步骤35,NVMe设备向主机发送DMA或者RDMA请求。请求中携带value源地址链表、metadata源地址链表、value目的地址链表以及metadata目的地址链表。value目的地址链表描述NVMe设备预留的、用于存储value的存储空间,metadata目的地址链表描述NVMe设备预留的、用于存储metadata的存储空间。
步骤36,主机接收到DMA/RDMA请求后,按照步骤35的源地址和目的地址,向NVMe设备发送key。
步骤37,NVMe设备把value和metadata存储在介质中。
步骤38,NVMe设备记录value的存储空间和metadata的存储空间。存储空间和key建立映射,以便后续使用key查找value存储空间和metadata存储空间。映射关系可以存储在KV管理单元中,KV管理单元还可以记录value length和metadata length。
上述步骤中,key直接携带在命令中。在其他实施方式中,命令也可以不携带key而是携带key指针。存储器收到命令后,按照key指针获得key。获得key的具体步骤可以参考步骤22获得value的过程,由于原理类似,此处不再赘述。
参见图13,以同一个命令中携带value指针和metadata指针为例,对步骤24-27的具体描述。
步骤41,主机构造读命令,读命令中携带有key。
步骤42,主机把携带有key的读命令中给NVMe设备。
步骤43,NVMe设备从KV管理单元查找所述key对应的value length和metadatalength。其中,KV管理单元记录有value存储空间和metadata存储空间。
以value存储空间为例,value存储在NVMe设备中,value存储空间由value首地址+末地址描述,或者由首地址+value length。因此,获得value存储空间后,可以获得valuelength。类似的,可以获得metadata length。
步骤44,NVMe设备发送响应消息给主机,响应消息中携带value length和metadata length。
步骤45,主机按照value length和metadata length,给value和metadata分配存储空间,作为将来存储value和metadta之用。
步骤46,主机向NVMe设备发送DMA/RDMA请求,请求中携带本次传输的源地址和目的地址。源地址是NVMe中的value存储空间和metadata存储空间,目的地址是主机为value预留的存储空间,以及为metadata预留的存储空间。
步骤47,收到主机的DMA/RDMA请求后,NVMe设备按照DMA/RDMA协议发送value以及metadata。
步骤48,主机接收value和metadata。
步骤49,主机存储收到的value和metadata,例如存储在主机内存中。
DMA或者RDMA通常用于读取一段连续的地址空间的数据,当存储value的存储空间和存储metadata的存储空间不连续的时候,可以分作两次DMA/RDM传输进行处理。
参见图14,本发明另外提供一个基于步骤21-23的实施例,对基于图12的实施例进行改进。改进之处在于:同一个命令的key、value和metadata分成三次DMA/RDMA传输获得。
可选的,如果其中任意一个传输失败,意味着这个KV传输不成功,因此已传输成功的数据可以删除,上传错误码。取消后续数据传输。并且可以释放之前为KV(key、value和metadata)分配的存储空间。
步骤51,构造NVMe写命令。
写命令中携带key。此外,写命令中携带value源地址链表和metadata源地址链表。源地址链表拥有指针的功能,value和metadata的源地址链表分别指向value的存储空间和metadata的存储空间。
步骤52,主机发送写命令给NVMe设备。
步骤53,NVMe设备收到写命令后,从写命令中解析出value源地址链表和metadata的源地址链表。链表例如是PRP entry或者SGL entry。
步骤54,NVMe设备从key源地址链表中解析出key长度,从value源地址链表中解析出value长度,从metadata的源地址链表中解析出metadata长度。为key、value、metadata预留存储空间。源地址链表描述了待读取数据的存储空间,因此可以从中解析出value长度和metadata长度。
步骤55,NVMe设备向主机发送DMA/RDMA请求。请求中携带key源地址链表和key目的地址链表。key目的地址链表描述NVMe设备预留的、用于存储key的存储空间。
步骤56,主机接收到DMA/RDMA请求后,按照步骤55的源地址和目的地址,向NVMe设备发送key。
步骤57,如果key传输失败,则NVMe设备取消后续value、metadata的传输。可选的,释放为key、value和metadata预留的存储空间。上报错误码给主机。如果key传输成功,则继续后续步骤58。
步骤58,NVMe设备向主机发送DMA/RDMA请求。请求中携带value源地址链表和value目的地址链表。value目的地址链表描述NVMe设备预留的、用于存储value的存储空间。
步骤59,主机接收到DMA/RDMA请求后,按照步骤58的源地址和目的地址,向NVMe设备发送value。
步骤60,如果value传输失败,则NVMe设备取消后续metadata的传输。可选的,释放为value和metadata预留的存储空间。可选的,删除已经传输的key。上报错误码给主机。如果value传输成功,则继续后续步骤61。
步骤61,NVMe设备向主机发送DMA/RDMA请求。请求中携带metadata源地址链表和key目的地址链表。metadata目的地址链表描述NVMe设备预留的、用于存储key的存储空间。
步骤62,主机接收到DMA/RDMA请求后,按照步骤61的源地址和目的地址,向NVMe设备发送metadata。
步骤63,如果metadata传输失败,可选的,释放为metadata预留的存储空间。可选的,删除已经传输的key和value。上报错误码给主机。如果value传输成功,则继续后续步骤64。
步骤64,存储value和metadata到存储器。步骤60和63所获得的value和metadata在内存中,本步骤把value和metadata存储到非易失性介质中,例如NVMe设备的硬盘。
步骤65,记录value的存储空间和metadata的存储空间。
从图14的步骤55-步骤63可以看出,key、value和metadata分别通过不同的DMA传输获得,如果其中任意一项数据传输失败,就取消余下数据的传输,已传输成功的数据可以删除。图14的其余步骤和图12相似,前文已有介绍,此处不再赘述。
类似的,除了value和metadata可以分开传输。value(或者metadata)也可以分开多次传输,例如把一个value分成两次以上DMA/RDMA传输。任意一次传输失败,则判定整个KV传输失败,释放为key、value和metadata预留的存储空间。当所述NVMe存储器和所述主机用PCIe总线连接,所述存储器发送至少两个DMA传输请求给所述主机以获得所述value,每个DMA传输获得所述value的一部分。当所述NVMe存储器和所述主机用Fabric连接,所述存储器发送至少两个RDMA传输请求给所述主机以获得所述value,每次RDMA传输获得所述value的一部分。
value(或metadata)分成多次传输的方案,可以和步骤55-步骤63中所描述的value和metadata分开传输的方案合并使用。这种情况下,任意一次传输失败(或者说,传输请求执行失败),则判定整个KV传输失败,释放为key、value和metadata预留的存储空间。
图14的流程描述的是对写命令的处理方式,DMA/RDMA传输请求的发起者是NVMe设备。类似的,在读命令的处理流程中,也可以采用类似的方案,key、value和metadata分别通过不同的DMA传输获取。不同之处在于,传输请求的发起者是主机,而通过DMA/RDMA传输key、value和metadata的是NVMe设备。
参见图15,本发明提供一种数据处理系统,包括主机装置80和存储装置90,主机装置80和存储装置90通过PCIe或者Fabric连接。主机装置80可以把KV数据读出或者写入存储装置90。
该主机装置80可以是物理上设备或者逻辑装置,包括收发模块801,管理模块802和缓存模块803。存储装置90可以是物理上设备或者逻辑装置,包括接口模块901、处理模块902和存储模块903。收发模块801和接口模块901通信。主机装置80拥有前述主机的功能,存储装置90拥有前述存储器的功能。
下面对主机装置80和存储装置90的功能进行简单介绍。需要说明的是,由于这两个装置(以及相应模块)的功能在方法流程中已有详细说明,因此这里仅做简单介绍。
该存储装置90包括:接口模块901,用于接收主机发送的NVMe写命令,所述NVMe写命令中携带key,所述NVMe写命令携带value指针,所述value指针指向所述主机中的第一存储空间,所述第一存储空间用于存储value,所述key与所述value属于同一个KV对;处理模块902,用于从所述NVMe写命令中获得所述key,根据所述value指针获得value长度,按照所述value长度为所述value分配第二存储空间;存储模块903,用于发送第一传输请求给所述主机,从所述主机获得所述value,把所述value保存在所述第二存储空间中。所述第二存储空间可以由在所述NVMe存储器的存储介质提供,所述存储介质和所述NVMe存储器的处理器连接。基于该方案,KV数据从主机传递到NVMe存储器的过程中,不需要把KV数据转换成块的形式,提高了KV数据的存储效率。
或者该存储装置90包括:接口模块901,用于接收NVMe写命令,所述NVMe写命令的头部携带键key,所述NVMe命令还携带值value,所述key和所述value对应,所述key和所述value属于同一个KV对;处理模块902,用于从所述NVMe写命令中获得所述key以及所述value;存储模块903,用于把所述value保存在所述NVMe存储器的存储介质中。
在一种实施方式中,该主机装置80的包括:收发模块801,用于发送NVMe读命令给存储装置90,所述NVMe命令携带key;所述收发模块801,还用于从所述NVMe存储器接收所述NVMe读命令的响应消息,所述响应消息携带第二存储空间的位置信息;管理模块802,用于按照所述value位置信息中的value长度给value预留第三存储空间;所述收发模块801,还用于发送传输请求给所述NVMe存储器,所述传输请求的访问地址是所述第二存储空间,以及从所述NVMe存储器获得所述value;缓存模块803,把所述value保存在所述主机装置80的第三存储空间中。基于此模块结构,主机装置可以可以读取存储装置读取value和或metadata。
结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,基于本发明的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (32)
1.一种数据处理方法,其特征在于,该方法包括:
快速非易失性存储NVMe存储器接收主机发送的NVMe写命令,所述NVMe写命令中携带key,所述NVMe写命令携带value指针,所述value指针指向所述主机中的第一存储空间,所述第一存储空间用于存储value,所述key与所述value属于同一个KV对;
所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构;
所述NVMe存储器按照所述KV格式的字段所定义的字段内容,从所述NVMe写命令中获得所述key,根据所述value指针获得value长度,按照所述value长度为所述value分配第二存储空间,所述第二存储空间在所述NVMe存储器中;
所述NVMe存储器发送第一传输请求给所述主机,从所述主机获得所述value,把所述value保存在所述第二存储空间中。
2.如权利要求1所述的数据处理方法,其中,所述NVMe存储器发送第一传输请求给主机以及从所述主机获得所述value,具体包括:
所述NVMe存储器发送DMA传输请求给所述主机,从所述主机获得所述value,所述DMA传输请求携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址,其中,所述NVMe存储器和所述主机用PCIe总线连接。
3.如权利要求1所述的数据处理方法,其中,所述NVMe存储器发送第一传输请求给主机以及从所述主机获得所述value,具体包括:
所述存储器发送RDMA传输请求给所述主机,从所述主机获得所述value,所述RDMA传输请求携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址,其中,所述NVMe存储器和所述主机用Fabric总线连接。
4.如权利要求1所述的数据处理方法,其中:
所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述NVMe存储器从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。
5.如权利要求1所述的数据处理方法,其中,所述NVMe写命令还携带所述value元数据指针,所述方法还包括:
所述NVMe存储器根据所述元数据指针获得元数据长度,按照所述元数据长度为所述元数据分配第四存储空间,所述第四存储空间在所述NVMe存储器中;
所述NVMe存储器通过所述第一传输请求从所述主机中获得所述元数据,把所述元数据保存在第四存储空间中。
6.如权利要求5所述的数据处理方法,其中:
所述元数据传输失败后,所述NVMe存储器释放为所述value分配的存储空间,以及释放为所述元数据分配的第四存储空间。
7.如权利要求1所述的数据处理方法,其中,所述NVMe存储器发送第一传输请求给所述主机以及从所述主机获得所述value,具体包括下述其中一种:
所述存储器发送至少两个DMA传输请求给所述主机以获得所述value,每个DMA传输请求用于请求获得所述value的一部分,当任意一个DMA传输请求执行失败,则NVMe存储器释放为所述value分配的存储空间,其中,所述NVMe存储器和所述主机用PCIe总线连接;或者
所述存储器发送至少两个RDMA传输请求给所述主机以获得所述value,每个RDMA传输请求用于请求获得所述value的一部分,当任意一个RDMA传输请求执行失败,则NVMe存储器释放为所述value分配的存储空间,其中,所述NVMe存储器和所述主机用Fabric连接。
8.如权利要求1所述的数据处理方法,其中,所述方法还包括:
生成所述key与所述第二存储空间的映射关系。
9.如权利要求8所述的数据处理方法,该方法之后,进一步包括:
所述NVMe存储器从所述主机接收NVMe读命令,所述NVMe读命令中携带所述key;
所述NVMe存储器根据所述key在所述映射关系中查询,获得存储所述value的所述第二存储空间的位置信息,把所述第二存储空间的位置信息发送给所述主机;
所述NVMe存储器接收所述主机发送的第二传输请求,所述第二传输请求用于请求获得存储在所述第二存储空间的数据。
10.如权利要求9所述的数据处理方法,其中:
所述NVMe存储器接收所述主机发送的第二传输请求之前,进一步包括:所述主机根据所述第二存储空间的大小预留所述主机中的第三存储空间;
所述NVMe存储器发送所述value给所述主机之后,进一步包括:所述主机把收到的来自所述第二存储空间的数据写入所述第三存储空间。
11.如权利要求9所述的数据处理方法,所述NVMe存储器接收的所述主机发送的NVMe读命令中还携带所述主机的空闲空间信息,所述NVMe存储器从所述主机接收所述NVMe读命令之后,进一步包括:
所述NVMe存储器判断所述主机的空闲存储空间是否大于等于所述第二存储空间,如果是,执行将所述第二存储空间的位置信息发送给所述主机的步骤,如果否,结束步骤。
12.如权利要求1所述的数据处理方法,其中:
所述第一存储空间用第一存储空间的首地址和所述value长度描述;
所述第二存储空间用第二存储空间的首地址描述。
13.一种NVMe存储器,包括控制器以及存储介质,其中,所述控制器中包括处理器,所述控制器和所述存储介质连接,所述存储介质用于提供存储空间,其特征在于,所述处理器被配置为执行:
接收主机发送的快速非易失性存储NVMe写命令,所述NVMe写命令中携带key,所述NVMe写命令携带value指针,所述value指针指向所述主机中的第一存储空间,所述第一存储空间用于存储value,所述key与所述value属于同一个KV对;
所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构;
按照所述KV格式的字段所定义的字段内容,从所述NVMe写命令中获得所述key,根据所述value指针获得value长度,按照所述value长度为所述value分配第二存储空间,所述第二存储空间在所述存储介质中;
发送第一传输请求给所述主机,从所述主机获得所述value,把所述value保存在所述第二存储空间中。
14.如权利要求13所述的NVMe存储器,其中,发送第一传输请求给主机以及从所述主机获得所述value,具体包括:
所述NVMe存储器和所述主机用PCIe总线连接,发送DMA传输请求给所述主机,从所述主机获得所述value,所述DMA传输请求携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址。
15.如权利要求13所述的NVMe存储器,其中,发送第一传输请求给主机以及从所述主机获得所述value,具体包括:
所述NVMe存储器和所述主机用Fabric总线连接,发送RDMA传输请求给所述主机,从所述主机获得所述value,所述RDMA传输请求携带所述第一存储空间作为访问地址,携带所述第二存储空间作为写入地址。
16.如权利要求13所述的NVMe存储器,其中:
所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述NVMe存储器从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。
17.如权利要求13所述的NVMe存储器,其中,所述NVMe写命令还携带所述value元数据指针,所述处理器还被配置为:
根据所述元数据指针获得元数据长度,按照所述元数据长度为所述元数据分配第四存储空间,所述第四存储空间在所述NVMe存储器中;
通过所述第一传输请求从所述主机中获得所述元数据,把所述元数据保存在第四存储空间中。
18.如权利要求17所述的NVMe存储器,其中,所述处理器还被配置为:
所述元数据传输失败后,则释放为所述value分配的存储空间,以及释放为所述元数据分配的第四存储空间。
19.如权利要求13所述的NVMe存储器,其中,发送第一传输请求给所述主机以及从所述主机获得所述value,具体包括下述其中一种:
发送至少两个DMA传输请求给所述主机以获得所述value,每个DMA传输请求用于请求获得所述value的一部分,当任意一个DMA传输请求执行失败,则NVMe存储器释放为所述value分配的存储空间,其中所述NVMe存储器和所述主机用PCIe总线连接;或者
发送至少两个RDMA传输请求给所述主机以获得所述value,每个RDMA传输请求用于请求获得所述value的一部分,当任意一个RDMA传输请求执行失败,则NVMe存储器释放为所述value分配的存储空间,其中,所述NVMe存储器和所述主机用Fabric连接。
20.如权利要求13所述的NVMe存储器,其中,所述处理器还被配置为:
生成所述key与所述第二存储空间的映射关系;
从所述主机接收NVMe读命令,所述NVMe读命令中携带所述key;
根据所述key在所述映射关系中查询,获得存储所述value的所述第二存储空间的位置信息,把所述第二存储空间的位置信息发送给所述主机;
接收所述主机发送的第二传输请求,所述第二传输请求用于请求获得存储在所述第二存储空间的数据。
21.一种数据处理方法,其特征在于,该方法包括:
非易失性存储快速NVMe存储器接收NVMe写命令,所述NVMe写命令的头部携带键key,所述NVMe命令还携带值value,所述key和所述value对应,所述key和所述value属于同一个KV对;
所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构;
所述NVMe存储器按照所述KV格式的字段所定义的字段内容,从所述NVMe写命令中获得所述key以及所述value;
所述NVMe存储器把所述value保存在所述NVMe存储器的存储介质中。
22.如权利要求21所述的数据处理方法,其中:
所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述NVMe存储器从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。
23.如权利要求21所述的数据处理方法,其中,所述NVMe写命令中进一步携带所述key的长度,所述NVMe存储器从所述写命令中获得所述key具体包括:
从所述key的预设起始位置,按照所述key的长度从所述写命令中获得所述key。
24.如权利要求21所述的方法,其中,所述NVMe写命令中进一步携带value偏移量以及所述value的长度,所述NVMe存储器从所述NVMe写命令中获得所述value具体包括:
所述NVMe存储器从所述偏移量指示的位置,按照所述value的长度获得所述value。
25.如权利要求21所述的数据处理方法,其中:
该方法进一步包括:生成所述key与所述value存储空间的映射关系;
该方法之后,进一步包括:
主机发送NVMe读命令给所述NVMe存储器,所述NVMe读命令中携带所述key;
所述NVMe存储器从所述主机接收所述读命令,从所述NVMe读命令中获得所述key;
所述NVMe存储器使用所述key从所述映射关系中查找所述value存储空间;
所述NVMe存储器从所述value存储空间获得所述value;
所述NVMe存储器生成所述NVMe读命令的响应消息发送给所述主机,所述响应消息携带所述value。
26.一种NVMe存储器,包括控制器以及存储介质,其中,所述控制器包括处理器,所述控制器和所述存储介质连接,所述存储介质用于提供存储空间,其特征在于,所述处理器被配置为执行:
接收主机发送的快速非易失性存储NVMe写命令,所述NVMe写命令的头部携带键key,所述NVMe命令还携带值value,所述key和所述value对应,所述key和所述value属于同一个KV对;
所述NVMe写命令中进一步携带KV格式的字段,其中,所述KV格式的字段描述所述NVMe写命令中字段的结构;
按照所述KV格式的字段所定义的字段内容,从所述NVMe写命令中获得所述key以及所述value;
把所述value保存在所述存储介质中。
27.如权利要求26所述的NVMe存储器,其中:
所述NVMe写命令中进一步携带KV数量的字段,所述KV数量的字段用于描述所述NVMe写命令中KV的数量,所述处理器从所述NVMe写命令中获得与KV数量相同数量的key,以及获得与KV数量相同数量的value。
28.如权利要求26所述的NVMe存储器,其中,所述NVMe写命令中进一步携带所述key的长度,从所述写命令中获得所述key具体包括:
从所述key的预设起始位置,按照所述key的长度从所述写命令中获得所述key。
29.如权利要求26所述的NVMe存储器,其中,所述NVMe写命令中进一步携带value偏移量以及所述value的长度,从所述NVMe写命令中获得所述value具体包括:
从所述偏移量指示的位置,按照所述value的长度获得所述value。
30.如权利要求26所述的NVMe存储器,其中,所述处理器还被配置为:
生成所述key与所述value存储空间的映射关系;
所述NVMe存储器从所述主机接收NVMe读命令,从所述NVMe读命令中获得所述key;
使用所述key从所述映射关系中查找所述value存储空间;
从所述value存储空间获得所述value;
生成所述NVMe读命令的响应消息发送给所述主机,所述响应消息携带所述value。
31.一种存储系统,包括权利要求13-20任意一项所述的NVMe存储器,还包括所述主机,其中:
所述主机用于构造所述NVMe写命令,发送所述NVMe写命令给所述NVMe存储器。
32.一种存储系统,包括主机和权利要求26-30任意一项所述的NVMe存储器,其中:
所述主机用于构造所述NVMe写命令,发送所述NVMe写命令给所述NVMe存储器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010311843.9A CN111427517A (zh) | 2015-12-28 | 2016-10-25 | 一种数据处理方法以及NVMe存储器 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2015109989288 | 2015-12-28 | ||
CN201510998928 | 2015-12-28 | ||
PCT/CN2016/103268 WO2017113960A1 (zh) | 2015-12-28 | 2016-10-25 | 一种数据处理方法以及NVMe存储器 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010311843.9A Division CN111427517A (zh) | 2015-12-28 | 2016-10-25 | 一种数据处理方法以及NVMe存储器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107209644A CN107209644A (zh) | 2017-09-26 |
CN107209644B true CN107209644B (zh) | 2020-04-28 |
Family
ID=59224463
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010311843.9A Pending CN111427517A (zh) | 2015-12-28 | 2016-10-25 | 一种数据处理方法以及NVMe存储器 |
CN201680003110.0A Active CN107209644B (zh) | 2015-12-28 | 2016-10-25 | 一种数据处理方法以及NVMe存储器 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010311843.9A Pending CN111427517A (zh) | 2015-12-28 | 2016-10-25 | 一种数据处理方法以及NVMe存储器 |
Country Status (4)
Country | Link |
---|---|
US (3) | US10705974B2 (zh) |
EP (2) | EP3916536A1 (zh) |
CN (2) | CN111427517A (zh) |
WO (1) | WO2017113960A1 (zh) |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107145459B (zh) * | 2016-03-01 | 2021-05-18 | 华为技术有限公司 | 一种级联板、ssd远程共享访问的系统和方法 |
CN107003816B (zh) * | 2016-06-14 | 2020-06-26 | 华为技术有限公司 | 数据访问方法和相关装置及系统 |
US10257122B1 (en) * | 2016-10-12 | 2019-04-09 | Barefoot Networks, Inc. | Distributing key-value pairs to forwarding elements for caching |
JP6772826B2 (ja) * | 2016-12-26 | 2020-10-21 | ブラザー工業株式会社 | 画像読取装置および画像送信方法 |
US10706106B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree modifications for maintenance operations |
US10719495B2 (en) | 2017-02-09 | 2020-07-21 | Micron Technology, Inc. | Stream selection for multi-stream storage devices |
US10725988B2 (en) | 2017-02-09 | 2020-07-28 | Micron Technology, Inc. | KVS tree |
US10706105B2 (en) | 2017-02-09 | 2020-07-07 | Micron Technology, Inc. | Merge tree garbage metrics |
KR20200037376A (ko) * | 2017-08-10 | 2020-04-08 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 데이터 액세스 방법, 디바이스 및 시스템 |
US10572161B2 (en) * | 2017-11-15 | 2020-02-25 | Samsung Electronics Co., Ltd. | Methods to configure and access scalable object stores using KV-SSDs and hybrid backend storage tiers of KV-SSDs, NVMe-SSDs and other flash devices |
CN108052290A (zh) * | 2017-12-13 | 2018-05-18 | 北京百度网讯科技有限公司 | 用于存储数据的方法和装置 |
EP3525080A4 (en) | 2017-12-26 | 2019-08-14 | Huawei Technologies Co., Ltd. | METHOD AND DEVICE FOR ACCESSING A STORAGE SYSTEM |
CN110324381B (zh) * | 2018-03-30 | 2021-08-03 | 北京忆芯科技有限公司 | 云计算与雾计算系统中的kv存储设备 |
EP3792743A4 (en) * | 2018-06-30 | 2021-06-30 | Huawei Technologies Co., Ltd. | NVME-BASED DATA WRITING PROCESS, DEVICE AND SYSTEM |
CN111095231B (zh) | 2018-06-30 | 2021-08-03 | 华为技术有限公司 | 一种基于NVMe的数据读取方法、装置及系统 |
US11115490B2 (en) * | 2018-07-31 | 2021-09-07 | EMC IP Holding Company LLC | Host based read cache for san supporting NVMEF with E2E validation |
CN108920725B (zh) * | 2018-08-02 | 2020-08-04 | 网宿科技股份有限公司 | 一种对象存储的方法及对象存储网关 |
US11099779B2 (en) * | 2018-09-24 | 2021-08-24 | Micron Technology, Inc. | Addressing in memory with a read identification (RID) number |
US11100071B2 (en) * | 2018-10-10 | 2021-08-24 | Micron Technology, Inc. | Key-value store tree data block spill with compaction |
US10915546B2 (en) | 2018-10-10 | 2021-02-09 | Micron Technology, Inc. | Counter-based compaction of key-value store tree data block |
US10852978B2 (en) | 2018-12-14 | 2020-12-01 | Micron Technology, Inc. | Key-value store using journaling with selective data storage format |
US11048755B2 (en) | 2018-12-14 | 2021-06-29 | Micron Technology, Inc. | Key-value store tree with selective use of key portion |
CN109710187B (zh) * | 2018-12-24 | 2022-12-02 | 深圳忆联信息系统有限公司 | NVMe SSD主控芯片的读命令加速方法、装置、计算机设备及存储介质 |
US10936661B2 (en) | 2018-12-26 | 2021-03-02 | Micron Technology, Inc. | Data tree with order-based node traversal |
KR102714982B1 (ko) * | 2019-07-05 | 2024-10-10 | 삼성전자주식회사 | 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법 |
US20210064745A1 (en) * | 2019-08-29 | 2021-03-04 | Flexxon Pte Ltd | Methods and systems using an ai co-processor to detect anomolies caused by malware in storage devices |
CN110968530B (zh) * | 2019-11-19 | 2021-12-03 | 华中科技大学 | 一种基于非易失性内存的键值存储系统和内存访问方法 |
US11287994B2 (en) * | 2019-12-13 | 2022-03-29 | Samsung Electronics Co., Ltd. | Native key-value storage enabled distributed storage system |
KR20210092361A (ko) | 2020-01-15 | 2021-07-26 | 삼성전자주식회사 | 스토리지 장치 및 그것의 동작 방법 |
EP3851950B1 (en) | 2020-01-15 | 2024-09-04 | Samsung Electronics Co., Ltd. | Storage device and operation method thereof |
US11200180B2 (en) | 2020-01-31 | 2021-12-14 | Western Digital Technologies, Inc. | NVMe SGL bit bucket transfers |
CN113939811A (zh) * | 2020-05-08 | 2022-01-14 | 华为技术有限公司 | 带偏移值的远程直接内存访问 |
CN113472623A (zh) * | 2021-05-31 | 2021-10-01 | 山东英信计算机技术有限公司 | 一种存储系统管理方法、装置、存储介质及设备 |
US11966343B2 (en) | 2021-07-19 | 2024-04-23 | Samsung Electronics Co., Ltd. | Universal mechanism to access and control a computational device |
CN115904488A (zh) * | 2021-08-11 | 2023-04-04 | 华为技术有限公司 | 数据传输方法、系统、装置及设备 |
US11922034B2 (en) | 2021-09-02 | 2024-03-05 | Samsung Electronics Co., Ltd. | Dual mode storage device |
US11853607B2 (en) * | 2021-12-22 | 2023-12-26 | Western Digital Technologies, Inc. | Optimizing flash memory utilization for NVMe KV pair storage |
US11817883B2 (en) | 2021-12-27 | 2023-11-14 | Western Digital Technologies, Inc. | Variable length ECC code according to value length in NVMe key value pair devices |
US11733876B2 (en) | 2022-01-05 | 2023-08-22 | Western Digital Technologies, Inc. | Content aware decoding in KV devices |
CN114363428B (zh) * | 2022-01-06 | 2023-10-17 | 齐鲁空天信息研究院 | 基于socket的数据传递方法 |
JP2023107418A (ja) | 2022-01-24 | 2023-08-03 | キオクシア株式会社 | ストレージデバイスおよびストレージシステム |
JP2023140128A (ja) * | 2022-03-22 | 2023-10-04 | キオクシア株式会社 | 永続記憶装置、ホスト及び永続記憶装置の制御方法 |
US11853564B1 (en) * | 2022-06-17 | 2023-12-26 | Western Digital Technologies, Inc. | Key value data storage device with improved utilization for short key value pairs |
CN118409696A (zh) * | 2023-01-30 | 2024-07-30 | 华为技术有限公司 | 数据处理方法及装置 |
US20240256124A1 (en) * | 2023-02-01 | 2024-08-01 | Western Digital Technologies, Inc. | Key-per-io multiple tenant isolation |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929793A (zh) * | 2011-08-08 | 2013-02-13 | 株式会社东芝 | 包括键-值存储的存储器系统 |
WO2014089828A1 (zh) * | 2012-12-14 | 2014-06-19 | 华为技术有限公司 | 访问存储设备的方法和存储设备 |
CN104238963A (zh) * | 2014-09-30 | 2014-12-24 | 华为技术有限公司 | 一种数据存储方法、存储装置及存储系统 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6415338B1 (en) * | 1998-02-11 | 2002-07-02 | Globespan, Inc. | System for writing a data value at a starting address to a number of consecutive locations equal to a segment length identifier |
JP2003280979A (ja) * | 2002-03-20 | 2003-10-03 | Toshiba Corp | 情報記憶装置 |
US7493433B2 (en) * | 2004-10-29 | 2009-02-17 | International Business Machines Corporation | System, method and storage medium for providing an inter-integrated circuit (I2C) slave with read/write access to random access memory |
US20130086311A1 (en) * | 2007-12-10 | 2013-04-04 | Ming Huang | METHOD OF DIRECT CONNECTING AHCI OR NVMe BASED SSD SYSTEM TO COMPUTER SYSTEM MEMORY BUS |
US9355109B2 (en) | 2010-06-11 | 2016-05-31 | The Research Foundation For The State University Of New York | Multi-tier caching |
CN102594849B (zh) * | 2011-01-06 | 2015-05-20 | 阿里巴巴集团控股有限公司 | 数据备份、恢复方法、虚拟机快照删除、回滚方法及装置 |
JP5762878B2 (ja) * | 2011-08-08 | 2015-08-12 | 株式会社東芝 | key−valueストアを有するメモリシステム |
US8966172B2 (en) * | 2011-11-15 | 2015-02-24 | Pavilion Data Systems, Inc. | Processor agnostic data storage in a PCIE based shared storage enviroment |
US9430412B2 (en) * | 2013-06-26 | 2016-08-30 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over Ethernet-type networks |
JP5646775B2 (ja) * | 2014-01-15 | 2014-12-24 | 株式会社東芝 | key−valueストア方式を有するメモリシステム |
US9727503B2 (en) * | 2014-03-17 | 2017-08-08 | Mellanox Technologies, Ltd. | Storage system and server |
CN103973810B (zh) * | 2014-05-22 | 2018-01-16 | 华为技术有限公司 | 基于互联网协议ip盘的数据处理方法和装置 |
US9959203B2 (en) * | 2014-06-23 | 2018-05-01 | Google Llc | Managing storage devices |
US9438426B2 (en) | 2014-10-03 | 2016-09-06 | Seagate Technology Llc | Key-value data storage device with hybrid architecture |
CN104461380B (zh) * | 2014-11-17 | 2017-11-21 | 华为技术有限公司 | 数据存储方法及装置 |
-
2016
- 2016-10-25 EP EP21155651.9A patent/EP3916536A1/en active Pending
- 2016-10-25 EP EP16880751.9A patent/EP3260971B1/en active Active
- 2016-10-25 CN CN202010311843.9A patent/CN111427517A/zh active Pending
- 2016-10-25 WO PCT/CN2016/103268 patent/WO2017113960A1/zh active Application Filing
- 2016-10-25 CN CN201680003110.0A patent/CN107209644B/zh active Active
-
2018
- 2018-05-04 US US15/971,990 patent/US10705974B2/en active Active
-
2020
- 2020-06-11 US US16/899,294 patent/US11467975B2/en active Active
-
2022
- 2022-09-19 US US17/947,812 patent/US20230011387A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929793A (zh) * | 2011-08-08 | 2013-02-13 | 株式会社东芝 | 包括键-值存储的存储器系统 |
WO2014089828A1 (zh) * | 2012-12-14 | 2014-06-19 | 华为技术有限公司 | 访问存储设备的方法和存储设备 |
CN104238963A (zh) * | 2014-09-30 | 2014-12-24 | 华为技术有限公司 | 一种数据存储方法、存储装置及存储系统 |
Also Published As
Publication number | Publication date |
---|---|
EP3260971A4 (en) | 2018-05-02 |
EP3916536A1 (en) | 2021-12-01 |
CN111427517A (zh) | 2020-07-17 |
US20230011387A1 (en) | 2023-01-12 |
EP3260971B1 (en) | 2021-03-10 |
US20180253386A1 (en) | 2018-09-06 |
WO2017113960A1 (zh) | 2017-07-06 |
EP3260971A1 (en) | 2017-12-27 |
US10705974B2 (en) | 2020-07-07 |
US11467975B2 (en) | 2022-10-11 |
CN107209644A (zh) | 2017-09-26 |
US20200301850A1 (en) | 2020-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107209644B (zh) | 一种数据处理方法以及NVMe存储器 | |
CN109983449B (zh) | 数据处理的方法和存储系统 | |
CN107229415B (zh) | 一种数据写方法、数据读方法及相关设备、系统 | |
JP6475256B2 (ja) | コンピュータ、制御デバイス及びデータ処理方法 | |
CN103607428B (zh) | 一种访问共享内存的方法和装置 | |
CN105556930A (zh) | 针对远程存储器访问的nvm express控制器 | |
WO2016093895A1 (en) | Generating and/or employing a descriptor associated with a memory translation table | |
JP6526235B2 (ja) | データチェック方法および記憶システム | |
CN103389945B (zh) | 一种内存管理的方法及装置 | |
US9946721B1 (en) | Systems and methods for managing a network by generating files in a virtual file system | |
KR20200065489A (ko) | 데이터 처리 시스템 내 자원 사용에 대응하여 데이터 패스를 동적 할당하는 방법 및 장치 | |
US10284672B2 (en) | Network interface | |
CN110119304A (zh) | 一种中断处理方法、装置及服务器 | |
CN104317716B (zh) | 分布式节点间的数据传输方法及分布式节点设备 | |
CN117312201B (zh) | 一种数据传输方法、装置及加速器设备、主机和存储介质 | |
US10599365B2 (en) | Storage system | |
CN104731635A (zh) | 一种虚拟机访问控制方法,及虚拟机访问控制系统 | |
CN115357540B (zh) | 存储系统及其计算存储处理器、固体硬盘和数据读写方法 | |
US20230137668A1 (en) | storage device and storage system | |
US20160085683A1 (en) | Data receiving device and data receiving method | |
US9762671B2 (en) | Wireless access device and wireless access system | |
CN110737396B (zh) | 数据复制的方法、设备和计算机存储介质 | |
CN114296639B (zh) | 命令处理方法及闪存设备 | |
US20240168876A1 (en) | Solving submission queue entry overflow using metadata or data pointers | |
CN118227322A (zh) | 基于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 | ||
GR01 | Patent grant |