CN106469198B - 键值存储方法、装置及*** - Google Patents
键值存储方法、装置及*** Download PDFInfo
- Publication number
- CN106469198B CN106469198B CN201610794448.4A CN201610794448A CN106469198B CN 106469198 B CN106469198 B CN 106469198B CN 201610794448 A CN201610794448 A CN 201610794448A CN 106469198 B CN106469198 B CN 106469198B
- Authority
- CN
- China
- Prior art keywords
- storage
- request
- key assignments
- address information
- host
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage 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/0604—Improving or facilitating administration, e.g. storage management
-
- 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
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- 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
-
- 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/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
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)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Communication Control (AREA)
- Storage Device Security (AREA)
Abstract
本发明实施例提供键值存储方法、装置及***,以至少解决目前没有相关解决方案能够实现键值存储和NVMe协议这类高效存储协议的结合的问题。方法包括:在主机检测到键值存储请求之后,所述主机将所述键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列,其中,所述第一指令码为根据所述协议的预留扩展字段定义的指令码;所述主机与所述存储控制器进行交互,以使得所述存储控制器获取所述第一存储请求指令序列。本发明适用于存储技术领域。
Description
技术领域
本发明涉及存储技术领域,尤其涉及键值存储方法、装置及***。
背景技术
键值(英文:key-value,缩写:KV)存储,是非关系型数据库(英文:no structuredquery language,缩写:NoSQL)存储的一种方式,其数据按照键值对的形式进行组织,索引和存储,具有存储语义简单、存储***扩展性好、数据查询速度快、数据存储量大的特点。
而非易失性存储标准(英文:non-volatile memory express,缩写:NVMe)协议,是目前存储***的多种存储协议中的一种高效存储协议,使用NVMe协议的存储***和使用传统的小型计算机***接口(英文:small computer system interface,缩写:SCSI)协议的存储***相比,由于减少了通用输入输出(英文:input-output,缩写:IO)调度层、SCSI上层和SCSI中间层,因此具有IO路径短、时延低、并发处理能力强的特点。
若将键值存储和NVMe协议为代表的这类高效存储协议结合起来,将使得存储***同时具备二者的优势。然而,目前并没有相关解决方案能够实现键值存储和NVMe协议这类高效存储协议的结合。
发明内容
本发明实施例提供键值存储方法、装置及***,用于解决现有技术中无法实现键值存储和一些高效存储协议(如NVMe协议)结合的问题。
为解决上述问题,本发明实施例提供如下技术方案:
一方面,本发明实施例提供一种键值存储方法,该方法包括:在主机检测到键值存储请求之后,该主机将该键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列,其中,该第一指令码为根据该协议的预留扩展字段定义的指令码;进而,该主机与该存储控制器进行交互,以使得该存储控制器获取该第一存储请求指令序列。
由于本发明实施例提供的键值存储方法将键值存储操作扩展到存储协议之上,使得主机可以借助存储协议和存储控制器交互以实现键值存储,无需在块层或者文件***之上进行转换以实现键值存储,因此,还降低了存储***的IO路径时延。
在一种可能的设计中,该主机将该键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列,包括:该主机按照协议定义的字段为第一存储请求指令序列分配内存;该主机将该键值存储请求携带的第一指令码、以及地址信息写入该内存;进而,该主机与该存储控制器进行交互(如发送通知消息等),以使得该存储控制器获取该第一存储请求指令序列,包括:该主机通知该存储控制器从该内存中读取该第一存储请求指令序列。除了上述让存储控制器获取第一存储请求指令序列该主机也可以向该存储控制器直接发送该第一存储请求指令序列。
其中,主机通知存储控制器从内存中读取第一存储请求指令序列的方式可以节省存储控制器的内存空间。
在一种可能的设计中,该键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;其中,该写数据请求携带的地址信息包括键和值存放的地址信息;该获取数据请求携带的地址信息包括键存放的地址信息;该删除数据请求携带的地址信息包括键存放的地址信息;该废弃数据请求携带的地址信息包括键存放的地址信息。
当然,上述仅是示例性的列举了一些键值存储请求操作,还可能存在其它的键值存储请求操作,本发明实施例对此不作具体限定。
在一些可能的设计中,若该键值存储请求为获取数据请求,则在主机检测到键值存储请求之后,在该主机将该键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列之前,还包括:该主机获取该获取数据请求所请求的值的长度;该主机根据该值的长度为该值分配内存,以使得在该主机与该存储控制器进行交互,以使得该存储控制器获取该第一存储请求指令序列之后,该存储控制器读数据到该主机为该值分配的内存。
也就是说,若该键值存储请求为获取数据请求,则主机首先需要为值分配内存。这样,存储控制器从存储设备中读取的数据才有相应的存储空间。
在一种可能的设计中,该主机获取该获取数据请求所请求的值的长度,包括:该主机将获取键对应的值的长度的指令码、以及该键存放的地址信息写入该协议定义的字段组成第二存储请求指令序列,其中,该获取键对应的值的长度的指令码为根据该协议的预留扩展字段定义的指令码;该主机与该存储控制器进行交互,以使得该存储控制器获取该第二存储请求指令序列;该主机接收该存储控制器发送的该值的长度。
通过上述方式,主机可以获取到该获取数据请求所请求的值的长度。
在一种可能的设计中,该键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,该键值存储请求携带的地址信息通过聚散表的地址信息进行索引,该聚散表中包含该多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
通过将多个单次键值存储请求合并成聚合键值存储请求,并将多个单次键值存储请求中每个单次键值存储请求携带的地址信息通过聚散表进行索引,可以使得在一次键值存储操作流程中同时完成多个单次键值存储操作,提高了键值存储的效率。
在一种可能的设计中,该方法还包括:在该主机检测到非键值存储请求之后,该主机将该非键值存储请求携带的第二指令码、以及数据内存指针写入该协议定义的字段组成第三存储请求指令序列,其中,该第二指令码为该协议的标准指令码;该主机与该存储控制器进行交互,以使得该存储控制器获取该第三存储请求指令序列。
本发明实施例提供的键值存储方法中,由于主机可以借助存储协议和存储控制器交互以实现非键值存储,因此可以在支持键值存储的同时支持传统块设备存储。
另一方面,本发明实施例提供一种键值存储方法,该方法包括:存储控制器获取第一存储请求指令序列,该第一存储请求指令序列由该主机将键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成,其中,该第一指令码为根据该协议的预留扩展字段定义的指令码;该存储控制器从该第一存储请求指令序列中分离出该第一指令码和该地址信息;该存储控制器根据该第一指令码和该地址信息,对存储设备进行该第一指令码对应的操作。
由于本发明实施例提供的键值存储方法将键值存储操作扩展到存储协议之上,使得主机可以借助存储协议和存储控制器交互以实现键值存储,无需在块层或者文件***之上进行转换以实现键值存储,因此降低了存储***的IO路径时延。
在一种可能的设计中,该存储控制器获取第一存储请求指令序列,包括:该存储控制器从主机按照协议定义的字段为该第一存储请求指令序列分配的内存中读取第一存储请求指令序列。或者,除了上述方法外,存储控制器也可以直接接收主机发送的第一存储请求指令序列。
其中,存储控制器从主机按照协议定义的字段为该第一存储请求指令序列分配的内存中读取第一存储请求指令序列的方式可以节省存储控制器的内存空间。
在一种可能的设计中,该键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;其中,该写数据请求携带的地址信息包括键和值存放的地址;该获取数据请求携带的地址信息包括键存放的地址信息;该删除数据请求携带的地址信息包括键存放的地址信息;该废弃数据请求携带的地址信息包括键存放的地址信息。
当然,上述仅是示例性的列举了一些键值存储请求操作,还可能存在其它的键值存储请求操作,本发明实施例对此不作具体限定。
在一种可能的设计中,若该键值存储请求为获取数据请求,则在该存储控制器获取第一存储请求指令序列之前,还包括:该存储控制器获取该获取数据请求所请求的值的长度;该存储控制器向该主机发送该值的长度,以使得该主机根据该值的长度为该值分配内存;进而,该存储控制器根据该第一指令码和该地址信息,对存储设备进行该第一指令码对应的操作,包括:该存储控制器根据该第一指令码和该地址信息,读数据到该主机为该值分配的内存。
也就是说,若该键值存储请求为获取数据请求,则主机首先需要为值分配内存。这样,存储控制器从存储设备中读取的数据才有相应的存储空间。
在一种可能的设计中,该存储控制器获取该获取数据请求所请求的值的长度,包括:该存储控制器获取第二存储请求指令序列,该第二存储请求指令序列由该主机将获取键对应的值的长度的指令码、以及该键存放的地址信息写入该协议定义的字段组成,其中,该获取键对应的值的长度的指令码为根据该协议的预留扩展字段定义的指令码;该存储控制器从该第二存储请求指令序列中分离出该获取键对应的值的长度的指令码、以及该键存放的地址信息;该存储控制器根据该获取键对应的值的长度的指令码、以及该键存放的地址信息,从该存储设备中获取该值的长度。
其中,存储控制器获取第二存储请求指令序列的方式可参考上述存储控制器获取第一存储请求指令序列的方式,此处不再赘述。
通过上述方式,主机可以获取到该获取数据请求所请求的值的长度。
在一种可能的设计中,该键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,该键值存储请求携带的地址信息通过聚散表的地址信息进行索引,该聚散表中包含该多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
通过将多个单次键值存储请求合并成聚合键值存储请求,并将多个单次键值存储请求中每个单次键值存储请求携带的地址信息通过聚散表进行索引,可以使得在一次键值存储操作流程中同时完成多个单次键值存储操作,提高了键值存储的效率。
在一种可能的设计中,该方法还包括:该存储控制器获取第三存储请求指令序列,该第三存储请求指令序列由该主机将非键值存储请求携带的第二指令码、以及数据内存指针写入该协议定义的字段组成,其中,该第二指令码为该协议的标准指令码;该存储控制器从该第三存储请求指令序列中分离出该第二指令码和该数据内存指针;该存储控制器根据该第二指令码和该数据内存指针,对该存储设备进行该第二指令码对应的操作。
其中,存储控制器获取第三存储请求指令序列的方式可参考上述存储控制器获取第一存储请求指令序列的方式,此处不再赘述。
本发明实施例提供的键值存储方法中,由于主机可以借助存储协议和存储控制器交互以实现非键值存储,因此可以在支持键值存储的同时支持传统块设备存储。
又一方面,本发明实施例提供一种主机,该主机包括:处理模块和通信模块;该处理模块,用于在检测到键值存储请求之后,将该键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列,其中,该第一指令码为根据该协议的预留扩展字段定义的指令码;该通信模块,用于与该存储控制器进行交互,以使得该存储控制器获取该第一存储请求指令序列。
在一种可能的设计中,该处理模块具体用于:按照协议定义的字段为第一存储请求指令序列分配内存;将该键值存储请求携带的第一指令码、以及地址信息写入该内存;该通信模块具体用于:通知该存储控制器从该内存中读取该第一存储请求指令序列;或者,向该存储控制器发送该第一存储请求指令序列。
在一种可能的设计中,该键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;其中,该写数据请求携带的地址信息包括键和值存放的地址信息;该获取数据请求携带的地址信息包括键存放的地址信息;该删除数据请求携带的地址信息包括键存放的地址信息;该废弃数据请求携带的地址信息包括键存放的地址信息。
在一种可能的设计中,若该键值存储请求为获取数据请求,则该处理模块,还用于在检测到键值存储请求之后,将该键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列之前,获取该获取数据请求所请求的值的长度;根据该值的长度为该值分配内存,以使得在该通信模块与该存储控制器进行交互,以使得该存储控制器获取该第一存储请求指令序列之后,该存储控制器读数据到该处理模块为该值分配的内存。
在一种可能的设计中,该处理模块具体用于:将获取键对应的值的长度的指令码、以及该键存放的地址信息写入该协议定义的字段组成第二存储请求指令序列,其中,该获取键对应的值的长度的指令码为根据该协议的预留扩展字段定义的指令码;通过该通信模块与该存储控制器进行交互,以使得该存储控制器获取该第二存储请求指令序列;通过该通信模块接收该存储控制器发送的该值的长度。
在一种可能的设计中,该键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,该键值存储请求携带的地址信息通过聚散表的地址信息进行索引,该聚散表中包含该多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
在一种可能的设计中,该处理模块,还用于在检测到非键值存储请求之后,将该非键值存储请求携带的第二指令码、以及数据内存指针写入该协议定义的字段组成第三存储请求指令序列,其中,该第二指令码为该协议的标准指令码;该通信模块,还用于与该存储控制器进行交互,以使得该存储控制器获取该第三存储请求指令序列。
由于本发明实施例提供的主机可用于执行上述方法实施例中主机所执行的功能,因此其所能获得的技术效果可参考上述方法实施例中的相关描述,此处不再赘述。
又一方面,本发明实施例提供一种存储控制器,该存储控制器包括:前端通信模块、后端通信模块、处理模块和控制模块;该前端通信模块,用于从主机获取第一存储请求指令序列,该第一存储请求指令序列由该主机将键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成,其中,该第一指令码为根据该协议的预留扩展字段定义的指令码;该处理模块,用于从该第一存储请求指令序列中分离出该第一指令码和该地址信息;该控制模块,用于根据该第一指令码和该地址信息,通过该后端通信模块对存储设备进行该第一指令码对应的操作。
在一种可能的设计中,该前端通信模块具体用于:从该主机按照协议定义的字段为该第一存储请求指令序列分配的内存中读取该第一存储请求指令序列;或者,接收该主机发送的第一存储请求指令序列。
在一种可能的设计中,该键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;其中,该写数据请求携带的地址信息包括键和值存放的地址;该获取数据请求携带的地址信息包括键存放的地址信息;该删除数据请求携带的地址信息包括键存放的地址信息;该废弃数据请求携带的地址信息包括键存放的地址信息。
在一种可能的设计中,若该键值存储请求为获取数据请求,则该处理模块,还用于在该前端通信模块获取第一存储请求指令序列之前,获取该获取数据请求所请求的值的长度;该通信模块,还用于向该主机发送该值的长度,以使得该主机根据该值的长度为该值分配内存;该控制模块具体用于:根据该第一指令码和该地址信息,读数据到该主机为该值分配的内存。
在一种可能的设计中,该处理模块具体用于:
通过该前端通信模块获取第二存储请求指令序列,该第二存储请求指令序列由该主机将获取键对应的值的长度的指令码、以及该键存放的地址信息写入该协议定义的字段组成,其中,该获取键对应的值的长度的指令码为根据该协议的预留扩展字段定义的指令码;从该第二存储请求指令序列中分离出该获取键对应的值的长度的指令码、以及该键存放的地址信息;根据该获取键对应的值的长度的指令码、以及该键存放的地址信息,通过该控制模块和该后端通信模块从该存储设备中获取该值的长度。
在一种可能的设计中,该键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,该键值存储请求携带的地址信息通过聚散表的地址信息进行索引,其中,该聚散表中包含该多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
在一种可能的设计中,该前端通信模块,还用于从该主机获取第三存储请求指令序列,该第三存储请求指令序列由该主机将非键值存储请求携带的第二指令码、以及数据内存指针写入该协议定义的字段组成,其中,该第二指令码为该协议的标准指令码;该处理模块,还用于从该第三存储请求指令序列中分离出该第二指令码和该数据内存指针;该控制模块,还用于根据该第二指令码和该数据内存指针,通过该后端通信模块对该存储设备进行该第二指令码对应的操作。
由于本发明实施例提供的存储控制器可用于执行上述方法实施例中存储控制器所执行的功能,因此其所能获得的技术效果可参考上述方法实施例中的相关描述,此处不再赘述。
基于上述各方面,一种可能的设计中,上述各方面任一方面中所述的协议包括非易失性存储标准NVMe协议;其中,该NVMe协议定义0-63字节为存储请求指令序列的字段。
由于本发明实施例可以将键值存储和NVMe协议这类高效存储协议结合起来,因此可以使得存储***同时具备键值存储存储语义简单、存储***扩展性好、数据查询速度快、数据存储量大的优势,以及NVMe协议IO路径短、时延低、并发处理能力强的优势。
基于上述各方面,一种可能的设计中,上述各方面任一方面中所述的协议包括小型计算机***接口SCSI协议。
由于SCSI协议为通用的存储协议,因此将键值存储与SCSI协议结合起来,更具有通用性。
当然,上述的协议还可以为其它存储协议,本发明实施例对此不作具体限定。
基于上述各方面,一种可能的设计中,上述各方面任一方面中所述的指令序列的形式可以是队列,也可以是数据包等其它形式,本发明实施例对此不作具体限定。
又一方面,本发明实施例提供了一种主机,该主机可以实现上述方法实施例中主机所执行的功能,该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个上述功能相应的模块。
在一种可能的设计中,该主机的结构中包括处理器和通信接口,该处理器被配置为支持该主机执行上述方法中相应的功能。该通信接口用于支持该主机与其他网元之间的通信。该主机还可以包括存储器,该存储器用于与处理器耦合,其保存该主机必要的程序指令和数据。
又一方面,本发明实施例提供了一种存储控制器,该存储控制器可以实现上述方法实施例中存储控制器所执行的功能,该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个上述功能相应的模块。
在一种可能的设计中,该存储控制器的结构中包括处理器和通信接口,该处理器被配置为支持该存储控制器执行上述方法中相应的功能。该通信接口用于支持该存储控制器与其他网元之间的通信。该存储控制器还可以包括存储器,该存储器用于与处理器耦合,其保存该存储控制器必要的程序指令和数据。
又一方面,本发明实施例提供了一种键值存储***,该键值存储***包括存储设备,以及上述方面所述的主机和存储控制器。
再一方面,本发明实施例提供了一种计算机存储介质,用于储存上述主机所用的计算机软件指令,其包含用于执行上述方面所设计的程序。
再一方面,本发明实施例提供了一种计算机存储介质,用于储存为上述存储控制器所用的计算机软件指令,其包含用于执行上述方面所设计的程序。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有键值存储的两种主要实现方式;
图2为本发明实施例提供的键值存储***的架构示意图;
图3为本发明实施例提供的本发明实施例提供的键值存储方法的操作模块示意图;
图4为本发明实施例提供的键值存储方法的流程示意图;
图5为本发明实施例提供的键值存储与NVMe协议相结合以实现键值存储的操作流程示意图;
图6为本发明实施例提供的写数据请求时的键值存储流程示意图;
图7为本发明实施例提供的获取数据请求时的键值存储流程示意图;
图8为本发明实施例提供的删除数据请求时的键值存储流程示意图;
图9为本发明实施例提供的废弃数据请求时的键值存储流程示意图;
图10为本发明实施例提供的聚合删除数据请求时的键值存储流程示意图;
图11为本发明实施例提供的非键值存储相关的标准NVMe设备操作流程示意图;
图12为本发明实施例提供的键值存储与SCSI协议相结合以实现键值存储的操作流程示意图;
图13为本发明实施例提供的主机的结构示意图;
图14为本发明实施例提供的存储控制器的结构示意图。
具体实施方式
如图1所示,为现有键值存储的两种主要实现方式。
其中,在方式一中,硬件使用SCSI设备,SCSI设备通过SCSI底层驱动、SCSI中层、SCSI上层、IO调度层和块设备层对外提供块设备服务。软件在块设备层或者文件***之上建立中间件,在中间件中完成键值操作和块设备或文件***操作的转换,从而对用户空间的应用提供键值存储的服务。然而,在该方式中,存在多层存储协议栈转换,因此IO路径时延较大。
在方式二中,硬件使用支持键值存储的设备,键值存储设备通过键值存储驱动层与中间件进行通信,中间件将用户存储转换为键值存储操作,从而对用户空间的应用提供键值存储服务。然而,在该方式中,专用的键值存储设备无法支持传统块设备存储,应用范围具有局限性。
本发明实施例提供一种键值存储方法,能够将键值存储操作扩展到存储协议之上,进而,不仅可以降低存储***的IO路径时延,还可以同时支持传统块设备存储和键值存储。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
需要说明的是,为了便于清楚描述本发明实施例的技术方案,在本发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。
需要说明的是,本文中的“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。“多个”是指两个或多于两个。
如本申请所使用的术语“组件”、“模块”、“***”等等旨在指代计算机相关实体,该计算机相关实体可以是硬件、固件、硬件和软件的结合、软件或者运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行中的线程、程序和/或计算机。作为示例,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于执行中的过程和/或线程中,并且组件可以位于一个计算机中以及/或者分布在两个或更多个计算机之间。此外,这些组件能够从在其上具有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组(例如,来自一个组件的数据,该组件与本地***、分布式***中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它***进行交互)的信号,以本地和/或远程过程的方式进行通信。
需要说明的是,本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
需要说明的是,本发明实施例中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个数据包是指两个或两个以上的数据包。
需要说明的是,本发明实施例中,“的(英文:of)”,“相应的(英文:corresponding,relevant)”和“对应的(英文:corresponding)”有时可以混用,应当指出的是,在不强调其区别时,其所要表达的含义是一致的。
需要说明的是,本发明实施例描述的网络架构以及业务场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
如图2所示,为本发明实施例提供的键值存储***的架构示意图。该键值存储***由主机20、存储控制器21以及存储设备22组成。其中,主机20通过存储控制器21对存储设备22中的存储介质进行键值存储操作;存储控制器21用于处理键值存储请求并对存储设备22进行数据存取操作。
具体的,如图2所示,主机20可以包括:主机底板201、以及部署在主机底板201上的中央处理单元(英文:central processing unit,缩写:CPU)202、内存203、桥片204和主机通信接口205。
其中,内存203中存储了该主机20运行时必要的程序指令和数据;CPU202用于处理该主机20的程序指令;桥片204用于连接主机底板201上的各类外接设备(未画出);主机通信接口205是主机20用于和存储控制器21之间连接的总线接口,用于完成主机20与存储控制器21之间的通信。
存储控制器21可以包括:前端通信接口211、CPU212、内存213、以及后端通信接口214。
其中,内存213用于存储存储控制器21运行时必要的程序指令和数据;CPU212用于处理存储控制器21运行的指令和运算;前端通信接口211是存储控制器21用于和主机20之间连接的总线接口,用于完成存储控制器21与主机20之间的通信;后端通信接口214是存储控制器21用于和存储设备22之间连接的总线接口,用于完成存储控制器21与存储设备22之间的通信。
需要说明的是,本发明实施例中的存储控制器21以及存储设备22可能独立部署,也可能集成在同一设备上,本发明对此不作具体限定。
下面将基于该键值存储***,对本发明实施例提供的键值存储方法进行详细介绍。首先,图3和图4分别为本发明实施例提供的键值存储方法的操作模块示意图和相应的流程示意图,该键值存储方法具体可以包括:
S401、在主机检测到键值存储请求之后,主机将键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列(如表一)。
其中,该第一指令码为根据协议的预留扩展字段定义的指令码。协议的预留扩展字段具体是指协议预留的用于协议扩展或用于用户自定义的字段。
S402、主机与存储控制器进行交互,以使得存储控制器获取该第一存储请求指令序列。
S403、存储控制器的命令处理单元获取该第一存储请求指令序列,并通过分离第一存储请求指令序列中的第一指令码来判断当前为键值操作后,将第一存储请求指令序列中的内容转发给键值存储处理单元。
S404、键值存储处理单元处理全部的键值存储请求,并将处理后的键值存储请求提交给存储控制单元。
S405、存储控制单元将前述提交的请求转换为对存储设备的操作。
S406、存储控制单元将操作结果通过前述单元反馈给主机。
表一
指令其它字段 | 第一指令码 | 地址信息 | 指令其它字段 |
S407、在主机检测到非键值存储请求之后,主机将非键值存储请求携带的第二指令码、以及数据内存指针写入协议定义的字段组成第三存储请求指令序列(如表二)。
其中,该第二指令码为协议的标准指令码。
S408、主机与存储控制器进行交互,以使得存储控制器获取该第三存储请求指令序列。
S409、存储控制器的命令处理单元获取该第三存储请求指令序列,并通过分离第三存储请求指令序列中的第二指令码来判断当前为非键值操作后,将第三存储请求指令序列中的内容转发给标准协议处理单元。
S410、标准协议处理单元处理全部的非键值存储请求,并将处理后的非键值存储请求提交给存储控制单元。
S411、存储控制单元将前述提交的请求转换为对存储设备的操作。
S412、存储控制单元将操作结果通过前述单元反馈给主机。
表二
指令其它字段 | 第二指令码 | 数据内存指针 | 指令其它字段 |
具体的,上述的协议可以是NVMe协议,也可以是SCSI协议等其它存储协议,本发明实施例对此不作具体限定。
具体的,上述的指令序列的形式可以是队列,也可以是数据包等其它形式,本发明实施例对此不作具体限定。
具体的,上述的键值存储操作可以是写数据、获取数据、删除数据或者废弃数据等操作,本发明实施例对此不作具体限定。
本发明实施例提供的键值存储方法将键值存储操作扩展到存储协议之上,进而,一方面,由于主机可以借助存储协议和存储控制器交互以实现键值存储,无需在块层或者文件***之上进行转换以实现键值存储,因此降低了存储***的IO路径时延;另一方面,由于主机可以借助存储协议和存储控制器交互以实现非键值存储,因此可以同时支持传统块设备存储。
可选的,步骤S401具体可以包括:
在主机检测到键值存储请求之后,主机按照协议定义的字段为第一存储请求指令序列分配内存;
主机将该键值存储请求携带的第一指令码、以及地址信息写入该内存。
进而,步骤S402具体可以包括:
主机通知存储控制器从该内存中读取该第一存储请求指令序列;
或者,主机向存储控制器发送该第一存储请求指令序列。
其中,主机通知存储控制器从内存中读取第一存储请求指令序列的方式可以节省存储控制器的内存空间。
需要说明的是,本发明实施例仅是示例性的提供两种主机与存储控制器进行交互,以使得存储控制器获取该第一存储请求指令序列的方式,当然,主机与存储控制器还可能通过其它交互方式以使得存储控制器获取该第一存储请求指令序列,本发明实施例对此不作具体限定。
下面将结合具体的协议以及具体的键值存储操作或者非键值存储操作对本发明实施例提供的键值存储方法进一步说明。
如图5所示,为键值存储与NVMe协议相结合以实现键值存储的操作流程示意图。
首先,对图5中的相关单元进行简要介绍:
一、主机接口:
主机与存储控制器通过主机接口进行连接,主机通过主机接口与存储控制器进行指令、地址和数据的交互,本发明实施例中主机接口为总线和接口标准(英文:peripheralcomponent interface express,缩写:PCIe)接口;
二、主机软件模块:
1)应用层:主机应用程序或者是存储客户端软件。
2)传统应用层:基于传统文件***或者块设备接口的主机应用程序。
3)中间件:键值存储中间件,对主机应用提供键值存储接口,并将存储请求传递给NVMe驱动层。
4)文件***:例如EXT3、EXT4、FAT32等。
5)块层:操作***对块存储设备的抽象层,一般文件***都构建于这层之上。
6)NVMe驱动层:主机操作***通过驱动软件和NVMe存储控制器进行数据传输和命令交互。
7)NVMe命令转换单元:位于NVMe驱动层,用于将键值(Key-Value)存储的扩展指令、Key和/或Value存放的地址等信息填入NVMe发送队列,并将NVMe发送队列提交给NVMe驱动层,由NVMe驱动层下发给NVMe存储控制器。
三、NVMe存储控制器:
1)NVMe命令处理单元:分析NVMe控制器接收到的NVMe发送队列中的指令码,并根据不同的指令将NVMe发送队列分发给键值存储处理单元或者NVMe操作处理单元。
2)键值存储处理单元:处理全部的键值操作请求,并将处理后的请求提交给存储控制单元。
3)NVMe操作处理单元:处理标准NVMe协议操作请求。
4)存储控制单元:将前述提交的请求转换为对存储设备的操作,并将操作结果反馈给对存储设备执行数据的存储操作。
四、存储设备:
存储设备中的存储介质包括动态随机存取存储器(英文:dynamic random accessmemory,缩写:DRAM)、非易失性随机访问存储器(英文:non-volatile random accessmemory,缩写:NVRAM)、NAND或者其它存储器件。
其次,给出NVMe协议中NVMe IO队列操作定义的指令码,如表三所示:
表三
本发明实施例中,根据NVMe协议的预留扩展字段定义键值存储请求携带的第一指令码,如表四所示:
表四
需要说明的是,上述表四仅是示例性的提供一种根据NVMe协议的预留扩展字段定义键值存储请求携带的第一指令码的方式,当然,根据NVMe协议的预留扩展字段定义键值存储请求携带的第一指令码不限于上述方式,比如,可以在90h-99h字段上定义上述键值存储操作,本发明实施例对此不作具体限定。
如上所述,本实施例中键值(Key-Value)存储操作包括但不限于:写数据Put(String Key,String Value)、获取数据:Get(String Key)、删除数据:Delete(StringKey)、废弃数据:TRIM(String Key),本发明实施例对此不作具体限定。
下面将结合图5对上述键值存储操作进行详细的描述。
示例一:
当键值存储请求为单次写数据请求时,如图6所示,本发明实施例提供的键值存储方法包括步骤S601-S611:
S601、应用层调用中间件写接口:Put(String Key,String Value)。
S602、中间件提交写数据请求、Key和Value存放的地址信息到NVMe驱动层。
S603、NVMe驱动层的NVMe命令转换单元写写数据指令80h、Key和Value存放的地址信息到NVMe发送队列。
具体的,在NVMe协议中,定义0-63字节为NVMe发送队列对应的字段。该步骤中NVMe发送队列的命令格式如图6中的发送队列命令格式。其中,字节03:00(即第0个字节到第3个字节)为指令码对应的字节;字节23:04(即第4个字节到第23个字节)为Command Dword 1-6(即命令字的第1-6个4字节);字节39:24(即第24个字节到第39个字节)为Key和Value存放的地址信息对应的字节;字节63:40(即第40个字节到第63个字节)为Command Dword 10-15(即命令字的第10-15个4字节)。
需要说明的是,本发明实施例中的NVMe发送队列是上述指令序列的一种具体形式,当然,如上所述,本发明实施例中的指令序列的形式也可以是数据包等其它形式,本发明实施例对此不作具体限定。
S604、NVMe驱动层通知NVMe存储控制器读NVMe发送队列。
S605、NVMe存储控制器的NVMe命令处理单元通过直接数据存取(英文:directmemory access,缩写:DMA)读NVMe发送队列。
S606、NVMe命令处理单元分离NVMe队列中的写数据指令、key和Value存放的地址信息,提交写数据请求到键值存储处理单元。
S607、键值存储处理单元处理Key和Value存放的地址信息,转换写数据请求为对应存储设备的写数据请求,并提交写数据请求到存储控制单元。
S608、存储控制单元根据Key和Value存放的地址信息,写数据到存储设备。
S609、存储控制单元返回状态信息到键值存储处理单元。
具体的,这里的状态信息是指是否写数据成功的信息。
S610、键值存储处理单元及前述单元依次传递状态信息到中间件。
具体的,结合图5可知,此处的前述单元具体包括:NVMe存储控制器的NVMe命令处理单元、主机的NVMe驱动层的NVMe命令转换单元。
S611、中间件返回状态信息到应用层。
至此,当键值存储请求为单次写数据请求时,键值存储过程结束。
示例二:
当键值存储请求为单次获取数据请求时,如图7所示,本发明实施例提供的键值存储方法包括步骤S701-S721:
S701、应用层调用中间件读操作接口:Get(String Key)。
S702、中间件提交获取Key对应Value长度的请求到NVMe驱动层。
S703、NVMe驱动层的NVMe命令转换单元写获取Value长度的指令81h、Key存放的地址信息到NVMe发送队列。
具体的,在NVMe协议中,定义0-64字节为NVMe发送队列对应的字段。该步骤中NVMe发送队列的命令格式如图7中的发送队列命令格式1。其中,字节03:00(即第0个字节到第3个字节)为指令码对应的字节;字节23:04(即第4个字节到第23个字节)为Command Dword1-6(即命令字的第1-6个4字节);字节39:24(即第24个字节到第39个字节)为Key存放的地址信息对应的字节;字节63:40(即第40个字节到第63个字节)为Command Dword 10-15(即命令字的第10-15个4字节)。
需要说明的是,本发明实施例中的NVMe发送队列是上述指令序列的一种具体形式,当然,如上所述,本发明实施例中的指令序列的形式也可以是数据包等其它形式,本发明实施例对此不作具体限定。
S704、NVMe驱动层通知NVMe存储控制器读NVMe发送队列。
S705、NVMe存储控制器的NVMe命令处理单元通过DMA读NVMe发送队列。
S706、NVMe命令处理单元分离NVMe队列中的获取Value长度的指令、key存放的地址信息,提交读操作请求到键值存储处理单元。
S707、键值存储处理单元处理Key存放的地址信息,转换读操作请求为对应存储设备的读操作请求,并提交读操作请求到存储控制单元。
S708、存储控制单元根据Key存放的地址信息,从存储设备获取对应Value的长度。
S709、存储控制单元提交Value的长度信息到键值存储处理单元。
S710、键值存储处理单元及前述单元依次Value的长度信息到中间件。
具体的,结合图5可知,此处的前述单元具体包括:NVMe存储控制器的NVMe命令处理单元、主机的NVMe驱动层的NVMe命令转换单元。
S711、中间件根据Value的长度分配Value在主机端存放的内存空间。
S712、中间件提交获取Value的请求、Value存放的地址信息到NVMe驱动层。
S713、NVMe驱动层的NVMe命令转换单元写获取Value的指令82h、key存放的地址信息到NVMe发送队列。
具体的,在NVMe协议中,定义0-63字节为NVMe发送队列对应的字段。该步骤中NVMe发送队列的命令格式如图7中的发送队列命令格式2。其中,字节03:00(即第0个字节到第3个字节)为指令码对应的字节;字节23:04(即第4个字节到第23个字节)为Command Dword1-6(即命令字的第1-6个4字节);字节39:24(即第24个字节到第39个字节)为key存放的地址信息对应的字节;字节63:40(即第40个字节到第63个字节)为Command Dword 10-15(即命令字的第10-15个4字节)。
需要说明的是,本发明实施例中的NVMe发送队列是上述指令序列的一种具体形式,当然,如上所述,本发明实施例中的指令序列的形式也可以是数据包等其它形式,本发明实施例对此不作具体限定。
S714、NVMe驱动层通知NVMe存储控制器读NVMe发送队列。
S715、NVMe存储控制器的NVMe命令处理单元通过DMA读NVMe发送队列。
S716、NVMe命令处理单元分离NVMe队列中的获取Value的指令、key存放的地址信息,提交获取Value的请求到键值存储处理单元。
S717、键值存储处理单元处理Value存放的地址信息,转换获取Value的请求为对应存储设备的获取Value的请求,并提交获取Value的请求到存储控制单元。
S718、存储控制单元通过DMA方式读数据到主机分配给Value存放的内存地址。
可选的,主机和存储控制器之间指令和数据的传输方式还可以是远程直接数据存取(英文:remote direct memory access,缩写:RDMA)等其它传输方式,本发明实施例对此不作具体限定。
S719、存储控制单元返回状态信息到键值存储处理单元。
具体的,这里的状态信息是指是否获取数据成功的信息。
S720、键值存储处理单元及前述单元依次传递状态信息到中间件。
具体的,结合图5可知,此处的前述单元具体包括:NVMe存储控制器的NVMe命令处理单元、主机的NVMe驱动层的NVMe命令转换单元。
S721、中间件返回状态信息到应用层。
至此,当键值存储请求为单次获取数据请求时,键值存储过程结束。
示例三、
当键值存储请求为单次删除数据请求时,如图8所示,本发明实施例提供的键值存储方法包括步骤S801-S811:
S801、应用层调用中间件删除接口:Delete(String Key)。
S802、中间件提交删除数据请求、Key存放的地址信息到NVMe驱动层。
S803、NVMe驱动层的NVMe命令转换单元写删除数据指令83h、Key存放的地址信息到NVMe发送队列。
具体的,在NVMe协议中,定义0-63字节为NVMe发送队列对应的字段。该步骤中NVMe发送队列的命令格式如图8中的发送队列命令格式。其中,字节03:00(即第0个字节到第3个字节)为指令码对应的字节;字节23:04(即第4个字节到第23个字节)为Command Dword 1-6(即命令字的第1-6个4字节);字节39:24(即第24个字节到第39个字节)为key存放的地址信息对应的字节;字节63:40(即第40个字节到第63个字节)为Command Dword 10-15(即命令字的第10-15个4字节)。
需要说明的是,本发明实施例中的NVMe发送队列是上述指令序列的一种具体形式,当然,如上所述,本发明实施例中的指令序列的形式也可以是数据包等其它形式,本发明实施例对此不作具体限定。
S804、NVMe驱动层通知NVMe存储控制器读NVMe发送队列。
S805、NVMe存储控制器的NVMe命令处理单元通过DMA读NVMe发送队列。
S806、NVMe命令处理单元分离NVMe队列中的删除数据指令、key存放的地址信息,提交删除数据请求到键值存储处理单元。
S807、键值存储处理单元处理Key存放的地址信息,转换删除数据请求为对应存储设备的删除数据请求,并提交删除数据请求到存储控制单元。
S808、存储控制单元根据Key存放的地址信息,执行对存储设备中数据的删除操作。
S809、存储控制单元返回状态信息到键值存储处理单元。
具体的,这里的状态信息是指是否删除数据成功的信息。
S810、键值存储处理单元及前述单元依次传递状态信息到中间件。
具体的,结合图5可知,此处的前述单元具体包括:NVMe存储控制器的NVMe命令处理单元、主机的NVMe驱动层的NVMe命令转换单元。
S811、中间件返回状态信息到应用层。
至此,当键值存储请求为单次删除数据请求时,键值存储过程结束。
示例四、
当键值存储请求为单次废弃数据请求时,如图9所示,本发明实施例提供的键值存储方法包括步骤S901-S911:
S901、应用层调用中间件废弃接口:TRIM(String Key)。
S902、中间件提交废弃数据请求、Key存放的地址信息到NVMe驱动层。
S903、NVMe驱动层的NVMe命令转换单元写废弃数据指令84h、Key存放的地址信息到NVMe发送队列。
具体的,在NVMe协议中,定义0-63字节为NVMe发送队列对应的字段。该步骤中NVMe发送队列的命令格式如图9中的发送队列命令格式。其中,字节03:00(即第0个字节到第3个字节)为指令码对应的字节;字节23:04(即第4个字节到第23个字节)为Command Dword 1-6(即命令字的第1-6个4字节);字节39:24(即第24个字节到第39个字节)为key存放的地址信息对应的字节;字节63:40(即第40个字节到第63个字节)为Command Dword 10-15(即命令字的第10-15个4字节)。
需要说明的是,本发明实施例中的NVMe发送队列是上述指令序列的一种具体形式,当然,如上所述,本发明实施例中的指令序列的形式也可以是数据包等其它形式,本发明实施例对此不作具体限定。
S904、NVMe驱动层通知NVMe存储控制器读NVMe发送队列。
S905、NVMe存储控制器的NVMe命令处理单元通过DMA读NVMe发送队列。
S906、NVMe命令处理单元分离NVMe队列中的废弃数据指令、key存放的地址信息,提交废弃数据请求到键值存储处理单元。
S907、键值存储处理单元处理Key存放的地址信息,转换废弃数据请求为对应存储设备的废弃数据请求,并提交废弃数据请求到存储控制单元。
S908、存储控制单元根据Key存放的地址信息,执行对存储设备中数据的废弃操作。
S909、存储控制单元返回状态信息到键值存储处理单元。
具体的,这里的状态信息是指是否废弃数据成功的信息。
S910、键值存储处理单元及前述单元依次传递状态信息到中间件。
具体的,结合图5可知,此处的前述单元具体包括:NVMe存储控制器的NVMe命令处理单元、主机的NVMe驱动层的NVMe命令转换单元。
S911、中间件返回状态信息到应用层。
至此,当键值存储请求为单次废弃数据请求时,键值存储过程结束。
其中,上述图6-9所示的实施例均是针对单次键值存储请求时的键值存储。由表二可知,在指令定义的过程中,还可以定义聚合操作。所谓聚合操作,是指一次聚合存储操作的请求可以同时完成多个单次存储操作的请求,流程和单次请求操作的流程基本一致;不同的是,多个键(Key)和/或值(Value)的地址信息需要借助SGL(聚散表)通过NVMe发送队列传递给存储控制器,也就是说,多个键(Key)和/或值(Value)的地址信息可以通过聚散表地址信息进行索引,该聚散表中包含多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
示例五、
下面以当键值存储请求为聚合删除数据请求为例,对本发明实施例提供的键值存储方法进行说明。如图10所示,本发明实施例提供的键值存储方法包括步骤S1001-S1011:
S1001、应用层调用中间件聚合删除接口Delete_Group(String Key group)。
S1002、中间件提交聚合删除数据请求、指示Key数据组存放的地址的聚散表(SGL)的地址信息到NVMe驱动层。
S1003、NVMe驱动层的NVMe命令转换单元写聚合删除数据指令88h、SGL的地址信息到NVMe发送队列。
具体的,在NVMe协议中,定义0-63字节为NVMe发送队列对应的字段。该步骤中NVMe发送队列的命令格式如图10中的发送队列命令格式。其中,字节03:00(即第0个字节到第3个字节)为指令码对应的字节;字节23:04(即第4个字节到第23个字节)为Command Dword1-6(即命令字的第1-6个4字节);字节39:24(即第24个字节到第39个字节)为SGL的地址信息对应的字节;字节63:40(即第40个字节到第63个字节)为Command Dword 10-15(即命令字的第10-15个4字节)。
需要说明的是,聚合操作可以包含任意数量个单次操作,图10仅是以聚合删除数据请求包括5个单次删除数据请求为例,给出了SGL中包含key1-key5的地址信息的示意,不构成对本发明技术方案的限定。
需要说明的是,本发明实施例中的NVMe发送队列是上述指令序列的一种具体形式,当然,如上所述,本发明实施例中的指令序列的形式也可以是数据包等其它形式,本发明实施例对此不作具体限定。
S1004、NVMe驱动层通知NVMe存储控制器读NVMe发送队列。
S1005、NVMe存储控制器的NVMe命令处理单元通过DMA读NVMe发送队列。
S1006、NVMe命令处理单元分离NVMe队列中的聚合删除数据指令、SGL的地址信息,提交聚合删除数据请求到键值存储处理单元。
S1007、键值存储处理单元对SGL中Key数据组存放的地址信息逐一进行处理,转换聚合删除数据请求为每个Key对应存储设备中数据的删除数据请求,并提交请求到存储控制单元。
S1008、存储控制单元逐一执行数据的删除操作。
S1009、全部操作完成后,存储控制单元返回状态信息到键值存储处理单元。
具体的,这里的状态信息是指是否全部删除数据成功的信息。
S1010、键值存储处理单元及前述单元依次传递状态信息到中间件。
具体的,结合图5可知,此处的前述单元具体包括:NVMe存储控制器的NVMe命令处理单元、主机的NVMe驱动层的NVMe命令转换单元。
S1011、中间件返回状态信息到应用层。
至此,当键值存储请求为聚合删除数据请求时,键值存储过程结束。
其中,上述图6-10所示的实施例均是针对主机检测到键值存储请求时的操作。当然,如上所述,本发明实施例中,主机还可以借助存储协议和存储控制器交互以实现非键值存储,比如同时支持传统块设备存储,具体参见示例六。
示例六、
当主机检测到非键值存储请求时,如图11所示,非键值存储相关的标准NVMe设备操作包括步骤S1101-S1111:
S1101、传统应用层调用文件***接口。
S1102、文件***层转换非键值存储请求为块层的操作请求。
S1103、块层提交操作请求到NVMe驱动层。
S1104、NVMe驱动层的NVMe命令转换单元转换操作请求为标准的NVMe指令,写指令码、数据内存指针等信息到NVMe发送队列。
具体的,本实施例中NVMe发送队列的命令格式和上述实施例中的NVMe发送队列命令格式类似,此处不再赘述。
S1105、NVMe驱动层通知NVMe存储控制器读NVMe发送队列。
S1106、NVMe存储控制器的NVMe命令处理单元通过DMA读NVMe发送队列;
S1107、NVMe命令处理单元分离NVMe发送队列中的指令码、数据内存指针等信息,提交操作请求到NVMe操作处理单元。
S1108、NVMe操作处理单元处理数据内存指针等信息,转换操作请求为对应存储设备的操作请求,并提交操作请求到存储控制单元。
S1109、存储控制单元根据数据内存指针,执行对存储设备的操作请求。
S1110、存储控制单元返回状态信息到NVMe操作处理单元。
具体的,这里的状态信息是指是否执行操作请求成功的信息。
S1111、NVMe操作处理单元及前述单元依次传递状态信息到传统应用层。
具体的,结合图5可知,此处的前述单元具体包括:NVMe存储控制器的NVMe命令处理单元、主机的NVMe驱动层的NVMe命令转换单元、块层、以及文件***。
至此,非键值存储相关的标准NVMe设备操作结束。
其中,上述图6-11所示的实施例均是结合图5所示的键值存储与NVMe协议相结合以实现键值存储的操作流程示意图进行说明。将键值存储和NVMe协议这类高效存储协议结合起来,可以使得存储***同时具备二者的优势。然而,如上所述,本发明实施例中的协议可以是NVMe协议,也可以是SCSI协议等其它存储协议,本发明实施例对此不作具体限定。
比如,本发明实施例还可以将键值存储与SCSI协议相结合,如图12所示,为键值存储与SCSI协议相结合以实现键值存储的操作流程示意图。
首先,对图12中的相关单元进行简要介绍:
一、主机接口:
图12所示的主机接口与图5所示的主机接口的功能相同,具体可参考图5所示的主机接口的描述,此处不再赘述。
二、主机软件模块:
1)图12所示的应用、传统应用、中间件、文件***与块层的功能和图5所示的应用、传统应用、中间件、文件***与块层的功能分别相同,具体可参考图5所示的应用、传统应用、中间件、文件***与块层的描述,此处不再赘述。
2)SCSI层:处理SCSI事务的软件层,包括SCSI上层、SCSI中层和SCSI下层。
3)SCSI驱动层:位于SCSI下层,负责将SCSI请求提交给串行SCSI接口(英文:Serial Attached SCSI,缩写:SAS)存储控制器,完成与SAS存储控制器间的控制和数据交互操作。
4)SCSI命令转换单元:位于SCSI驱动层,用于将键值(Key-Value)存储的扩展指令、Key和/或Value的地址等信息填入NVMe发送队列,并将NVMe发送队列提交给SCSI驱动层下发给SAS存储控制器。
三、SAS存储控制器:
1)图12所示的键值存储处理单元与存储控制单元的功能和图5所示的键值存储处理单元与存储控制单元的功能分别相同,具体可参考图5所示的键值存储处理单元与存储控制单元的描述,此处不再赘述。
2)SCSI命令处理单元:分析SCSI控制器接收到的SCSI发送队列中的指令码,并根据不同的指令将SCSI发送队列分发给键值存储处理单元或者SCSI操作处理单元。
3)SCSI操作处理单元:处理标准SCSI协议操作请求。
四、存储设备:
图12所示的存储设备与图5所示的存储设备的功能相同,具体可参考图5所示的存储设备的描述,此处不再赘述。
其次,给出SCSI协议中对块设备操作定义的指令码,如表五所示:
表五
本发明实施例中,根据SCSI协议的预留扩展字段定义键值存储请求携带的第一指令码,如表六所示:
表六
需要说明的是,上述表六仅是示例性的提供一种根据SCSI协议的预留扩展字段定义键值存储请求携带的第一指令码的方式,当然,根据SCSI协议的预留扩展字段定义键值存储请求携带的第一指令码不限于上述方式,比如,可以在上面表五中注释部分第3条提到的其它预留扩展字段上定义上述键值存储操作,本发明实施例对此不作具体限定。
具体的,结合图12进行键值存储操作的流程与结合图5进行键值存储操作的流程一致,具体可参考图6-11所示的实施例,此处不再赘述。
由上述各实施例所示的键值存储的方法可知,本发明实施例提供的键值存储方法将键值存储操作扩展到存储协议之上,进而,一方面,由于主机可以借助存储协议和存储控制器交互以实现键值存储,无需在块层或者文件***之上进行转换以实现键值存储,因此降低了存储***的IO路径时延;另一方面,由于主机可以借助存储协议和存储控制器交互以实现非键值存储,因此可以同时支持传统块设备存储。
上述主要从各个设备之间交互的角度对本发明实施例提供的方案进行了介绍。可以理解的是,各个设备,例如主机、存储控制器等为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
本发明实施例可以根据上述方法示例对主机、存储控制器等进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用集成的单元的情况,图13示出了上述实施例中所涉及的主机1300的一种可能的结构示意图,主机1300包括:处理模块1301和通信模块1302。通信模块1302用于和存储控制器之间进行通信。处理模块1301用于支持主机执行图4中的过程S401和S407,或者处理模块1301可以包括应用层1301a、中间件1301b和驱动层1301c,用于支持主机执行图6-10中应用层、中间件和NVMe驱动层所执行的操作,或者处理模块1301还可以包括传统应用层1301d、文件***1301e、块层1301f和驱动层1301c,用于支持主机执行图11中传统应用层、文件***、块层和NVMe驱动层所执行的操作。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。此外,主机1300还可以包括存储模块,用于存储主机1300的程序代码和数据。
其中,处理模块1301可以是处理器或控制器,例如可以是图2中的CPU202,也可以是通用处理器,数字信号处理器(英文:digital signal processor,缩写:DSP),专用集成电路(英文:application-specific integrated circuit,缩写:ASIC),现场可编程门阵列(英文:field programmable gate array,缩写:FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。通信模块1302可以是通信接口,例如可以是图2中的主机通信接口205,也可以是接收器和发送器,或者收发电路等。存储模块1201可以是内存或存储器。
当处理模块1301为CPU,通信模块1302为通信接口时,本发明实施例所涉及的主机可以为图2所示的主机,具体可参见图2部分的相关描述,此处不再赘述。
在采用集成的单元的情况,图14示出了上述实施例中所涉及的存储控制器1400的一种可能的结构示意图,存储控制器1400包括:前端通信模块1401、处理模块1402、控制模块1403和后端通信模块1404。前端通信模块1401用于支持存储控制器1400与前端设备之间的通信,例如和图4、图6-11中主机的通信。后端通信模块1404用于支持存储控制器1400与后端设备之间的通信,例如和图4、图6-11中存储设备的通信。处理模块1402可以包括命令处理单元1402a、键值存储处理单元1402b和标准协议处理单元1402c,用于支持存储控制器1400执行图4中命令处理单元、键值存储处理单元和标准协议处理单元所执行的操作,或者用于支持存储控制器1400执行图6-11中NVMe命令处理单元、键值存储处理单元和NVMe操作处理单元所执行的操作。控制模块1403用于支持存储控制器执行图4和图6-11中存储控制单元所执行的操作。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。此外,存储控制器1400还可以包括存储模块,用于存储存储控制器1400的程序代码和数据。
其中,处理模块1402和控制模块1403可以是处理器或控制器,例如可以是图2中的CPU212,也可以是通用处理器,数字信号处理器(英文:digital signal processor,缩写:DSP),专用集成电路(英文:application-specific integrated circuit,缩写:ASIC),现场可编程门阵列(英文:field programmable gate array,缩写:FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等等。前端通信模块1401和后端通信模块1404可以是通信接口,例如分别可以是图2中的前端通信接口211后端通信接口214,也可以是接收器和发送器,或者收发电路或等。存储模块可以是内存或存储器。
当处理模块1402和控制模块1403为CPU,前端通信模块1401和后端通信模块1404为通信接口时,本发明实施例所涉及的存储控制器可以为图2所示的存储控制器,具体可参见图2部分的相关描述,此处不再赘述。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(英文:random access memory,缩写:RAM)、闪存、只读存储器(英文:read only memory,缩写:ROM)、可擦除可编程只读存储器(英文:erasableprogrammable ROM,缩写:EPROM)、电可擦可编程只读存储器(英文:electrically EPROM,缩写:EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于核心网接口设备中。当然,处理器和存储介质也可以作为分立组件存在于核心网接口设备中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (33)
1.一种键值存储方法,其特征在于,所述方法包括:
在主机检测到键值存储请求之后,所述主机将所述键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列,其中,所述第一指令码为根据所述协议的预留扩展字段定义的指令码;
所述主机与所述存储控制器进行交互,以使得所述存储控制器获取所述第一存储请求指令序列。
2.根据权利要求1所述的方法,其特征在于,所述主机将所述键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列,包括:
所述主机按照协议定义的字段为第一存储请求指令序列分配内存;
所述主机将所述键值存储请求携带的第一指令码、以及地址信息写入所述内存;
所述主机与所述存储控制器进行交互,以使得所述存储控制器获取所述第一存储请求指令序列,包括:
所述主机通知所述存储控制器从所述内存中读取所述第一存储请求指令序列。
3.根据权利要求1或2所述的方法,其特征在于,所述键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;
其中,所述写数据请求携带的地址信息包括键和值存放的地址信息;
所述获取数据请求携带的地址信息包括键存放的地址信息;
所述删除数据请求携带的地址信息包括键存放的地址信息;
所述废弃数据请求携带的地址信息包括键存放的地址信息。
4.根据权利要求3所述的方法,其特征在于,若所述键值存储请求为获取数据请求,则在主机检测到键值存储请求之后,在所述主机将所述键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列之前,还包括:
所述主机获取所述获取数据请求所请求的值的长度;
所述主机根据所述值的长度为所述值分配内存,以使得在所述主机与所述存储控制器进行交互,以使得所述存储控制器获取所述第一存储请求指令序列之后,所述存储控制器读数据到所述主机为所述值分配的内存。
5.根据权利要求4所述的方法,其特征在于,所述主机获取所述获取数据请求所请求的值的长度,包括:
所述主机将获取键对应的值的长度的指令码、以及所述键存放的地址信息写入所述协议定义的字段组成第二存储请求指令序列,其中,所述获取键对应的值的长度的指令码为根据所述协议的预留扩展字段定义的指令码;
所述主机与所述存储控制器进行交互,以使得所述存储控制器获取所述第二存储请求指令序列;
所述主机接收所述存储控制器发送的所述值的长度。
6.根据权利要求1、2、4、5任一项所述的方法,其特征在于,所述键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,
所述键值存储请求携带的地址信息通过聚散表的地址信息进行索引,所述聚散表中包含所述多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在所述主机检测到非键值存储请求之后,所述主机将所述非键值存储请求携带的第二指令码、以及数据内存指针写入所述协议定义的字段组成第三存储请求指令序列,其中,所述第二指令码为所述协议的标准指令码;
所述主机与所述存储控制器进行交互,以使得所述存储控制器获取所述第三存储请求指令序列。
8.根据权利要求7所述的方法,其特征在于,所述协议为非易失性存储标准NVMe协议;
其中,所述NVMe协议定义0-63字节为存储请求指令序列的字段。
9.一种键值存储方法,其特征在于,所述方法包括:
存储控制器获取第一存储请求指令序列,所述第一存储请求指令序列由主机将键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成,其中,所述第一指令码为根据所述协议的预留扩展字段定义的指令码;
所述存储控制器从所述第一存储请求指令序列中分离出所述第一指令码和所述地址信息;
所述存储控制器根据所述第一指令码和所述地址信息,对存储设备进行所述第一指令码对应的操作。
10.根据权利要求9所述的方法,其特征在于,所述存储控制器获取第一存储请求指令序列,包括:
所述存储控制器从所述主机按照协议定义的字段为所述第一存储请求指令序列分配的内存中读取第一存储请求指令序列。
11.根据权利要求9或10所述的方法,其特征在于,所述键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;
其中,所述写数据请求携带的地址信息包括键和值存放的地址;
所述获取数据请求携带的地址信息包括键存放的地址信息;
所述删除数据请求携带的地址信息包括键存放的地址信息;
所述废弃数据请求携带的地址信息包括键存放的地址信息。
12.根据权利要求11所述的方法,其特征在于,若所述键值存储请求为获取数据请求,则在所述存储控制器获取第一存储请求指令序列之前,还包括:
所述存储控制器获取所述获取数据请求所请求的值的长度;
所述存储控制器向所述主机发送所述值的长度,以使得所述主机根据所述值的长度为所述值分配内存;
所述存储控制器根据所述第一指令码和所述地址信息,对存储设备进行所述第一指令码对应的操作,包括:
所述存储控制器根据所述第一指令码和所述地址信息,读数据到所述主机为所述值分配的内存。
13.根据权利要求12所述的方法,其特征在于,所述存储控制器获取所述获取数据请求所请求的值的长度,包括:
所述存储控制器获取第二存储请求指令序列,所述第二存储请求指令序列由所述主机将获取键对应的值的长度的指令码、以及所述键存放的地址信息写入所述协议定义的字段组成,其中,所述获取键对应的值的长度的指令码为根据所述协议的预留扩展字段定义的指令码;
所述存储控制器从所述第二存储请求指令序列中分离出所述获取键对应的值的长度的指令码、以及所述键存放的地址信息;
所述存储控制器根据所述获取键对应的值的长度的指令码、以及所述键存放的地址信息,从所述存储设备中获取所述值的长度。
14.根据权利要求9、10、12、13任一项所述的方法,其特征在于,所述键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,
所述键值存储请求携带的地址信息通过聚散表的地址信息进行索引,所述聚散表中包含所述多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
15.根据权利要求14所述的方法,其特征在于,所述方法还包括:
所述存储控制器获取第三存储请求指令序列,所述第三存储请求指令序列由所述主机将非键值存储请求携带的第二指令码、以及数据内存指针写入所述协议定义的字段组成,其中,所述第二指令码为所述协议的标准指令码;
所述存储控制器从所述第三存储请求指令序列中分离出所述第二指令码和所述数据内存指针;
所述存储控制器根据所述第二指令码和所述数据内存指针,对所述存储设备进行所述第二指令码对应的操作。
16.根据权利要求15所述的方法,其特征在于,所述协议包括非易失性存储标准NVMe协议;
其中,所述NVMe协议定义0-63字节为存储请求指令序列的字段。
17.一种主机,其特征在于,所述主机包括:处理模块和通信模块;
所述处理模块,用于在检测到键值存储请求之后,将所述键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列,其中,所述第一指令码为根据所述协议的预留扩展字段定义的指令码;
所述通信模块,用于与所述存储控制器进行交互,以使得所述存储控制器获取所述第一存储请求指令序列。
18.根据权利要求17所述的主机,其特征在于,所述处理模块具体用于:
按照协议定义的字段为第一存储请求指令序列分配内存;
将所述键值存储请求携带的第一指令码、以及地址信息写入所述内存;
所述通信模块具体用于:
通知所述存储控制器从所述内存中读取所述第一存储请求指令序列。
19.根据权利要求17或18所述的主机,其特征在于,所述键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;
其中,所述写数据请求携带的地址信息包括键和值存放的地址信息;
所述获取数据请求携带的地址信息包括键存放的地址信息;
所述删除数据请求携带的地址信息包括键存放的地址信息;
所述废弃数据请求携带的地址信息包括键存放的地址信息。
20.根据权利要求19所述的主机,其特征在于,若所述键值存储请求为获取数据请求,则
所述处理模块,还用于在检测到键值存储请求之后,将所述键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成第一存储请求指令序列之前,获取所述获取数据请求所请求的值的长度;
根据所述值的长度为所述值分配内存,以使得在所述通信模块与所述存储控制器进行交互,以使得所述存储控制器获取所述第一存储请求指令序列之后,所述存储控制器读数据到所述处理模块为所述值分配的内存。
21.根据权利要求20所述的主机,其特征在于,所述处理模块具体用于:
将获取键对应的值的长度的指令码、以及所述键存放的地址信息写入所述协议定义的字段组成第二存储请求指令序列,其中,所述获取键对应的值的长度的指令码为根据所述协议的预留扩展字段定义的指令码;
通过所述通信模块与所述存储控制器进行交互,以使得所述存储控制器获取所述第二存储请求指令序列;
通过所述通信模块接收所述存储控制器发送的所述值的长度。
22.根据权利要求17、18、20、21任一项所述的主机,其特征在于,所述键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,
所述键值存储请求携带的地址信息通过聚散表的地址信息进行索引,所述聚散表中包含所述多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
23.根据权利要求22所述的主机,其特征在于,
所述处理模块,还用于在检测到非键值存储请求之后,将所述非键值存储请求携带的第二指令码、以及数据内存指针写入所述协议定义的字段组成第三存储请求指令序列,其中,所述第二指令码为所述协议的标准指令码;
所述通信模块,还用于与所述存储控制器进行交互,以使得所述存储控制器获取所述第三存储请求指令序列。
24.根据权利要求23所述的主机,其特征在于,所述协议包括非易失性存储标准NVMe协议;
其中,所述NVMe协议定义0-63字节为存储请求指令序列的字段。
25.一种存储控制器,其特征在于,所述存储控制器包括:前端通信模块、后端通信模块、处理模块和控制模块;
所述前端通信模块,用于从主机获取第一存储请求指令序列,所述第一存储请求指令序列由所述主机将键值存储请求携带的第一指令码、以及地址信息写入协议定义的字段组成,其中,所述第一指令码为根据所述协议的预留扩展字段定义的指令码;
所述处理模块,用于从所述第一存储请求指令序列中分离出所述第一指令码和所述地址信息;
所述控制模块,用于根据所述第一指令码和所述地址信息,通过所述后端通信模块对存储设备进行所述第一指令码对应的操作。
26.根据权利要求25所述的存储控制器,其特征在于,所述前端通信模块具体用于:
从所述主机按照协议定义的字段为所述第一存储请求指令序列分配的内存中读取所述第一存储请求指令序列。
27.根据权利要求25或26所述的存储控制器,其特征在于,所述键值存储请求包括:写数据请求、或者获取数据请求、或者删除数据请求、或者废弃数据请求;
其中,所述写数据请求携带的地址信息包括键和值存放的地址;
所述获取数据请求携带的地址信息包括键存放的地址信息;
所述删除数据请求携带的地址信息包括键存放的地址信息;
所述废弃数据请求携带的地址信息包括键存放的地址信息。
28.根据权利要求27所述的存储控制器,其特征在于,若所述键值存储请求为获取数据请求,则
所述处理模块,还用于在所述前端通信模块获取第一存储请求指令序列之前,获取所述获取数据请求所请求的值的长度;
所述通信模块,还用于向所述主机发送所述值的长度,以使得所述主机根据所述值的长度为所述值分配内存;
所述控制模块具体用于:
根据所述第一指令码和所述地址信息,读数据到所述主机为所述值分配的内存。
29.根据权利要求28所述的存储控制器,其特征在于,所述处理模块具体用于:
通过所述前端通信模块获取第二存储请求指令序列,所述第二存储请求指令序列由所述主机将获取键对应的值的长度的指令码、以及所述键存放的地址信息写入所述协议定义的字段组成,其中,所述获取键对应的值的长度的指令码为根据所述协议的预留扩展字段定义的指令码;
从所述第二存储请求指令序列中分离出所述获取键对应的值的长度的指令码、以及所述键存放的地址信息;
根据所述获取键对应的值的长度的指令码、以及所述键存放的地址信息,通过所述控制模块和所述后端通信模块从所述存储设备中获取所述值的长度。
30.根据权利要求25、26、28、29任一项所述的存储控制器,其特征在于,所述键值存储请求为包含多个单次键值存储请求的聚合键值存储请求;其中,
所述键值存储请求携带的地址信息通过聚散表的地址信息进行索引,所述聚散表中包含所述多个单次键值存储请求中每个单次键值存储请求携带的地址信息。
31.根据权利要求30所述的存储控制器,其特征在于,
所述前端通信模块,还用于从所述主机获取第三存储请求指令序列,所述第三存储请求指令序列由所述主机将非键值存储请求携带的第二指令码、以及数据内存指针写入所述协议定义的字段组成,其中,所述第二指令码为所述协议的标准指令码;
所述处理模块,还用于从所述第三存储请求指令序列中分离出所述第二指令码和所述数据内存指针;
所述控制模块,还用于根据所述第二指令码和所述数据内存指针,通过所述后端通信模块对所述存储设备进行所述第二指令码对应的操作。
32.根据权利要求31所述的存储控制器,其特征在于,
所述协议包括非易失性存储标准NVMe协议;
其中,所述NVMe协议定义0-63字节为存储请求指令序列的字段。
33.一种键值存储***,其特征在于,所述键值存储***包括存储设备、如权利要求17-24任一项所述的主机、以及如权利要求25-32任一项所述的存储控制器。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610794448.4A CN106469198B (zh) | 2016-08-31 | 2016-08-31 | 键值存储方法、装置及*** |
PCT/CN2017/085983 WO2018040629A1 (zh) | 2016-08-31 | 2017-05-25 | 键值存储方法、装置及*** |
EP17844936.9A EP3495970B1 (en) | 2016-08-31 | 2017-05-25 | Key-value storage method, apparatus and system |
US16/287,826 US11048642B2 (en) | 2016-08-31 | 2019-02-27 | Key-value storage method, apparatus, and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610794448.4A CN106469198B (zh) | 2016-08-31 | 2016-08-31 | 键值存储方法、装置及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106469198A CN106469198A (zh) | 2017-03-01 |
CN106469198B true CN106469198B (zh) | 2019-10-15 |
Family
ID=58230478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610794448.4A Active CN106469198B (zh) | 2016-08-31 | 2016-08-31 | 键值存储方法、装置及*** |
Country Status (4)
Country | Link |
---|---|
US (1) | US11048642B2 (zh) |
EP (1) | EP3495970B1 (zh) |
CN (1) | CN106469198B (zh) |
WO (1) | WO2018040629A1 (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106469198B (zh) | 2016-08-31 | 2019-10-15 | 华为技术有限公司 | 键值存储方法、装置及*** |
CN107357523B (zh) * | 2017-06-27 | 2021-06-15 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
CN107479833B (zh) * | 2017-08-21 | 2020-04-17 | 中国人民解放军国防科技大学 | 一种面向键值存储的远程非易失内存访问与管理方法 |
CN107678685B (zh) * | 2017-09-11 | 2020-01-17 | 清华大学 | 基于闪存的存储路径优化的键值存储管理方法 |
EP3985949A1 (en) * | 2017-12-26 | 2022-04-20 | Huawei Technologies Co., Ltd. | Method and apparatus for managing storage device in storage system |
US10715499B2 (en) * | 2017-12-27 | 2020-07-14 | Toshiba Memory Corporation | System and method for accessing and managing key-value data over networks |
CN110275990B (zh) * | 2018-03-14 | 2021-04-23 | 北京忆芯科技有限公司 | Kv存储的键与值的生成方法及装置 |
CN113542382B (zh) * | 2018-03-30 | 2024-04-26 | 北京忆芯科技有限公司 | 云计算与雾计算***中的kv存储设备 |
CN109388596B (zh) * | 2018-09-29 | 2019-12-31 | 上海依图网络科技有限公司 | 一种数据操作方法和装置 |
CN109711178B (zh) * | 2018-12-18 | 2021-02-19 | 北京城市网邻信息技术有限公司 | 一种键值对的存储方法、装置、设备及存储介质 |
CN111190844A (zh) * | 2019-12-31 | 2020-05-22 | 杭州华澜微电子股份有限公司 | 一种协议转化方法及电子设备 |
CN111371848A (zh) * | 2020-02-21 | 2020-07-03 | 苏州浪潮智能科技有限公司 | 一种请求处理方法、装置、设备及存储介质 |
CN111399771B (zh) * | 2020-02-28 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种mcs存储***的协议配置方法、装置及设备 |
CN112579003B (zh) * | 2020-12-15 | 2022-06-14 | 浙江大华技术股份有限公司 | 键值对的调整方法、装置、存储介质以及电子装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929793A (zh) * | 2011-08-08 | 2013-02-13 | 株式会社东芝 | 包括键-值存储的存储器*** |
CN103955440A (zh) * | 2013-12-18 | 2014-07-30 | 记忆科技(深圳)有限公司 | 一种非易失存储设备及其进行数据操作的方法 |
CN104111907A (zh) * | 2014-06-27 | 2014-10-22 | 华为技术有限公司 | 一种访问NVMe存储设备的方法和NVMe存储设备 |
CN105051675A (zh) * | 2013-03-20 | 2015-11-11 | 亚马逊技术股份有限公司 | 复制目标服务 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7457897B1 (en) * | 2004-03-17 | 2008-11-25 | Suoer Talent Electronics, Inc. | PCI express-compatible controller and interface for flash memory |
US9887008B2 (en) * | 2014-03-10 | 2018-02-06 | Futurewei Technologies, Inc. | DDR4-SSD dual-port DIMM device |
CN106469198B (zh) * | 2016-08-31 | 2019-10-15 | 华为技术有限公司 | 键值存储方法、装置及*** |
-
2016
- 2016-08-31 CN CN201610794448.4A patent/CN106469198B/zh active Active
-
2017
- 2017-05-25 EP EP17844936.9A patent/EP3495970B1/en active Active
- 2017-05-25 WO PCT/CN2017/085983 patent/WO2018040629A1/zh unknown
-
2019
- 2019-02-27 US US16/287,826 patent/US11048642B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929793A (zh) * | 2011-08-08 | 2013-02-13 | 株式会社东芝 | 包括键-值存储的存储器*** |
CN105051675A (zh) * | 2013-03-20 | 2015-11-11 | 亚马逊技术股份有限公司 | 复制目标服务 |
CN103955440A (zh) * | 2013-12-18 | 2014-07-30 | 记忆科技(深圳)有限公司 | 一种非易失存储设备及其进行数据操作的方法 |
CN104111907A (zh) * | 2014-06-27 | 2014-10-22 | 华为技术有限公司 | 一种访问NVMe存储设备的方法和NVMe存储设备 |
Also Published As
Publication number | Publication date |
---|---|
US11048642B2 (en) | 2021-06-29 |
WO2018040629A1 (zh) | 2018-03-08 |
EP3495970A1 (en) | 2019-06-12 |
CN106469198A (zh) | 2017-03-01 |
US20190196976A1 (en) | 2019-06-27 |
EP3495970A4 (en) | 2019-07-31 |
EP3495970B1 (en) | 2023-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106469198B (zh) | 键值存储方法、装置及*** | |
US11467975B2 (en) | Data processing method and NVMe storage device | |
CN109983449B (zh) | 数据处理的方法和存储*** | |
CN105518611B (zh) | 一种远程直接数据存取方法、设备和*** | |
WO2018137217A1 (zh) | 一种数据处理的***、方法及对应装置 | |
CN106331153B (zh) | 一种业务请求的过滤方法、装置及*** | |
CN105556930A (zh) | 针对远程存储器访问的nvm express控制器 | |
CN109729588A (zh) | 业务数据传输方法及装置 | |
WO1999005809A1 (en) | System for reducing bus overhead for communications with a network interface | |
US5634007A (en) | Independent computer storage addressing in input/output transfers | |
CN107728936A (zh) | 用于传输数据处理请求的方法和装置 | |
CN107707628A (zh) | 用于传输数据处理请求的方法和装置 | |
CN102065568B (zh) | 基于数据描述符的mac软硬件交互方法及其硬件实现装置 | |
CN105765545B (zh) | PCIe I/O设备共享方法及设备与互联*** | |
KR20170117310A (ko) | 고성능의 락 없는 스케일러블 타깃을 위한 시스템 및 방법 | |
CN109344098A (zh) | 主从设备间的数据操作方法和装置 | |
CN104050111B (zh) | 通过具有不同时序要求的相应命令访问不同类型的存储器 | |
US11599377B2 (en) | Open-channel storage device management with FTL on virtual machine | |
CN112380151A (zh) | 一种NVMe-oF异构存储***及访问方法 | |
US9021224B2 (en) | Method and apparatus for enhanced computer security | |
WO2021168758A1 (zh) | 一种基于PCIe的通信方法及装置 | |
US7920489B1 (en) | Simultaneous receiving and transmitting of data over a network | |
WO2023216503A1 (zh) | 一种用于车辆智驾的多核异构通信方法与***、存储介质 | |
CN108196786A (zh) | 用于存储***分区的方法和管理设备 | |
CN117312201B (zh) | 一种数据传输方法、装置及加速器设备、主机和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |