本申请涉及芯片设计领域,尤其涉及一种主机和物理机系统。
背景技术:
非易失性内存主机控制器接口规范(non-volatilememoryexpress,nvme)是一种专门为闪存类存储设备而设计的协议,在nvme协议中,主要分为两部分:主机(host)和控制器(controller)。其中,controller通常存在于nvme存储设备(例如支持nvme协议的固态硬盘)内部,作为设备的主控,主要完成nvme命令的卸载以及与设备中的存储单元的交互;host是nvme协议实现的关键部分,它接收用户操作系统下发的请求指令,内部生成标准nvme命令,再将nvme命令发送给controller。
目前host的实现都是通过软件驱动的方式,将host放在操作系统中。但是这种实现方式虽然比较简单,但是通常难以获得很高的性能,尤其是在现在的大型网络化存储系统中。
技术实现要素:
本申请实施例提供了一种主机和物理机系统,用于解决现有通过软件驱动的host的性能较低的问题。
为解决上述技术问题,本申请实施例提供以下技术方案:
本申请一方面提供一种主机,所述host采用硬件逻辑实现,包括:
数据缓存模块10、命令生成处理模块20、命令发送队列30以及命令完成队列40;
其中,所述命令生产处理模块20,用于生成非易失性内存主机控制器接口规范nvme命令,将所述nvme命令输入到所述命令发送队列30,并且从所述命令完成队列40中取回与所述nvme命令相对应的响应消息;
所述数据缓存模块10,用于对待传输的数据进行缓存,并将待传输的数据发送给控制器controller或者发送给用户层;
所述命令发送队列30,用于将所述nvme命令发送给所述controller;
所述命令完成队列40,用于接收所述controller返回的、与所述nvme命令相对应的响应消息。
可选的,所述host还包括:
用户请求处理模块50和地址转换模块60;
所述用户请求处理模块50,用于从用户层接收读/写i/o请求,并从中提取i/o命令相关信息,所述i/o命令相关信息为生成i/o命令所需的信息;
所述地址转换模块60,用于接收所述用户请求处理模块50输入的i/o命令相关信息,并进行地址转换。
可选的,所述命令生成处理模块20包括i/o命令生成处理模块21,所述命令发送队列包括i/o命令发送队列31,所述命令完成队列40包括命令完成队列41;
其中,所述i/o命令生成处理模块21,用于接收所述地址转换模块60输入的经过地址转换的i/o命令相关信息,根据接收到的i/o命令相关信息生成nvmei/o命令,将所述nvmei/o命令输入到i/o命令发送队列31,并且从i/o命令完成队列41中取回与所述nvmei/o命令相对应的响应消息;
所述i/o命令发送队列31,用于将所述nvmei/o命令发送给所述controller;
所述i/o命令完成队列41,用于接收所述controller返回的、与所述nvmei/o命令相对应的响应消息。
可选的,所述i/o命令相关信息包括数据大小和数据地址。
可选的,所述host部署在用户操作系统和nvme存储设备之间。
可选的,所述host应用于网络化存储系统中。
可选的,所述设备还包括:
控制命令生成处理模块22、控制命令发送队列32以及控制命令完成队列42;
其中,控制命令生成处理模块22用于生成nvme控制命令,将nvme控制命令输入到控制命令发送队列32,并从控制命令完成队列42中取回响应消息;
控制命令发送队列32,用于将nvme控制命令发送到所述controller;
控制命令完成队列42,用于接收所述controller返回的、与nvme控制命令相对应的响应消息。
可选的,所述控制命令包括管理admin命令和组织fabric命令中的至少一种。
可选的,所述数据缓存模块10还用于:
在所述控制命令生成处理模块22的控制下将待传输的数据发送给所述controller。
本申请第二方面提供一种物理机系统,包括主机和nvme存储设备,所述nvme存储设备包括controller,其中,所述主机为上述第一方面中任意一种可能的实现方式所述的设备。
本申请采用硬件逻辑设计用户操作系统侧的主机,有利于获得较高的性能,在大型网络化的加速系统中利于集成。
附图说明
图1为本发明host的一种可能的结构示意图;
图2为本发明host的另一种可能的结构示意图;
图3为本发明host的另一种可能的结构示意图;
图4为本发明物理机系统的一种可能的结构示意图。
具体实施方式
本申请实施例提供了一种主机和物理机系统,用于提高host和物理机系统的性能。
下面结合附图,对本申请的实施例进行描述。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
目前host的实现都是通过软件驱动的方式,将host放在操作系统中。但是这种实现方式虽然比较简单,但是通常难以获得很高的性能,尤其是在现在的大型网络化存储系统中。本发明为解决上述技术问题,提出一种host的硬件实现方案。host采用硬件逻辑实现,可以部署在用户操作系统与存储设备之间。
在nvme的网络化存储协议中,nvme命令主要包括控制命令和读/写(input/output,i/o)命令,其中,i/o命令主要用于磁盘的访问,完成数据在controller的读写。控制命令主要包括管理(admin)命令,admin命令主要用于设备的控制和管理,比如i/o队列的创建、删除等。可选的,控制命令还可以包括组织(fabric)命令,fabric命令主要完成host与controller的连接。
host可以使用模块化的硬件逻辑设计方法实现对nvme命令的处理,请参阅图1,本发明host100可以包括:
数据缓存(databuffer)模块10、命令生成处理模块20、命令发送队列30以及命令完成队列40;
其中,命令生产处理模块20,用于生成非易失性内存主机控制器接口规范nvme命令,将nvme命令输入到命令发送队列,并且从命令完成队列中取回与nvme命令相对应的响应消息;
数据缓存模块10,用于对待传输的数据进行缓存,并将待传输的数据发送给控制器controller或者发送给用户层;
命令发送队列30,用于将nvme命令发送给controller;
命令完成队列40,用于接收controller返回的、与nvme命令相对应的响应消息。
本申请采用硬件逻辑设计用户操作系统侧的host,有利于获得较高的性能,在大型网络化的加速系统中利于集成。
host使用模块化的硬件逻辑设计方法实现对i/o命令的处理,基于图1对应的实施例,在本发明的一些实施例中,请参阅图2,本发明host200可以包括:
数据缓存模块10、用户请求处理(userreq)模块50、地址转换模块60、i/o命令生成处理(i/ocmd)模块21、i/o命令发送队列(sq)31以及i/o命令完成队列(cq)41。
其中,用户请求处理模块50用于在数据读写时,从用户层接收i/o请求,并从中提取i/o命令相关信息,i/o命令相关信息为生成i/o命令所需的信息,比如数据大小和数据地址等信息。
地址转换模块60,用于接收用户请求处理模块50输入的i/o命令相关信息,并进行地址转换。地址转换模块60建立用户读写存储设备地址与逻辑区块地址(logicalblockaddress,lba)的转换,在nvme存储设备中,存储单元是以lba为单位的,因此从用户层接收到的i/o请求中的数据地址要经过地址转换模块60转换为lba地址,才能用于nvmei/o命令。
i/o命令生成处理模块21,主要完成i/o命令的生成、处理,用于接收地址转换模块60输入的经过地址转换的i/o命令相关信息,生成nvmei/o命令,该模块生成标准的nvmei/o命令,将nvmei/o命令输入到i/o命令发送队列31;并且从i/o命令完成队列41中取回与nvmei/o命令相对应的响应消息,处理返回的响应消息。
数据缓存模块10,用于对待传输的数据进行缓存,并将待传输的数据发送给controller或者发送给用户层。
i/o命令发送队列31,用于将i/o命令发送给controller。
i/o命令完成队列41,用于接收controller返回的、与nvmei/o命令相对应的响应消息。
需要说明的是,i/o命令发送队列31和i/o命令完成队列41,本质上是两块具有一定深度的存储空间,用于缓存nvmei/o命令以及响应消息。本发明提供的host可以部署在用户操作系统和nvme存储设备之间。
为了便于理解,下面提供图2对应的host对i/o命令的一种可能的处理流程:
201、用户请求处理模块50从用户层接收i/o请求,并从中提取i/o命令相关信息;
用户请求处理模块50可以从用户层接收i/o请求,并按照预设规则从接收到的i/o请求中提取i/o命令相关信息,i/o命令相关信息为生成i/o命令所需的信息,比如数据大小和数据地址等信,之后可以将i/o命令相关信息输入地址转换模块60。
202、地址转换模块60接收用户请求处理模块50输入的i/o命令相关信息,并进行地址转换;
地址转换模块60可以接收到用户请求处理模块50输入的i/o命令相关信息,其中包括数据地址。由于nvme存储是以lba为单位,因此从用户层接收到的i/o请求中的数据地址要经过地址转换模块60转换为lba地址,才能用于nvmei/o命令。
203、i/o命令生成处理模块21接收地址转换模块60输入的经过地址转换的i/o命令相关信息,生成nvmei/o命令;
i/o命令生成处理模块21可以接收地址转换模块60输入的经过地址转换的i/o命令相关信息,其中包括数据地址和数据大小,之后可以根据接收到的i/o命令相关信息生成nvmei/o命令。
204、数据缓存模块10从用户层接收待传输的数据;
假设本实施例中接收到的i/o请求为写请求,那么数据缓存模块10可以从用户层接收待传输的数据,并对待传输的数据进行缓存。
205、i/o命令生成处理模块21将nvmei/o命令输入到i/o命令发送队列31,并控制数据缓存模块10将待传输的数据发送给controller;
i/o命令生成处理模块21可以将nvmei/o命令输入到i/o命令发送队列31,并控制数据缓存模块10将待传输的数据发送给controller。示例性的,i/o命令发送队列31可以将nvmei/o命令发送给controller,数据缓存模块10将待传输的数据发送给controller;或者,i/o命令生成处理模块21可以向数据缓存模块10获取待传输的数据,并将待传输的数据和nvmei/o命令输入到i/o命令发送队列31,之后由i/o命令发送队列31将待传输的数据和nvmei/o命令发送给controller。
206、i/o命令完成队列41接收controller返回的响应消息;
controller接收并处理nvmei/o命令后,可以返回响应消息到i/o命令完成队列41。
207、i/o命令生成处理模块21从i/o命令完成队列41中取回响应消息。
i/o命令生成处理模块21可以从i/o命令完成队列41中取回响应消息,根据响应信息判断i/o传输是否成功。
需要说明的是,若用户请求处理模块50从用户层接收到读请求,那么可以不执行步骤304,在并且在步骤305中i/o命令生成处理模块21无需控制数据缓存模块10将带传输的数据发送给controller,而是,i/o命令发送队列31将nvmei/o命令发送给controller之后,数据缓存模块10可以接收到controller返回的与读请求对应的数据,并对数据进行缓存,之后发送给用户层,完成数据读取。
基于图1对应的实施例,host使用模块化的硬件逻辑设计方法实现对控制命令的处理,在本发明的一些实施例中,请参阅图3,本发明host300可以包括:
数据缓存模块10、用户请求处理模块50、地址转换模块60、i/o命令生成处理模块21、i/o命令发送队列31、i/o命令完成队列41、控制命令生成处理(f/acmd)模块22、控制命令发送队列(asq)32以及控制命令完成队列(acq)42。
其中,控制命令生成处理模块22用于生成nvme控制命令,将nvme控制命令输入到控制命令发送队列32,并从控制命令完成队列42中取回与nvme控制命令相对应的响应消息。主要完成fabric命令和admin命令的生成、处理,该模块生成标准的nvmefabric/admin命令并处理返回的命令响应。
控制命令发送队列32,用于将nvme控制命令发送到controller。
控制命令完成队列42,用于接收controller返回的、与nvme控制命令相对应的响应消息。
需要说明的是,控制命令发送队列32和控制命令完成队列42,本质上是两块具有一定深度的存储空间,用于缓存nvme控制命令以及响应消息。
数据缓存模块10、用户请求处理模块50、地址转换模块60、i/o命令生成处理模块21、i/o命令发送队列31以及i/o命令完成队列41的具体内容请参考图2对应的实施例,此处不再赘述。
可选的,数据缓存模块10还用于,在控制命令生成处理模块22的控制下将待传输的数据发送给所述controller。
其中,控制命令可以包括fabric命令和admin命令,二者可以放入同一队列执行,因此二者可以一起设计。
为了便于理解,以控制命令携带待传输的数据为例,下面提供图3对应的host对控制命令的一种可能的处理流程:
301、控制命令生成处理模块22按照协议生成nvme控制命令;
假设控制命令需要发送连接(connect)命令和1kb的connect数据,控制命令生成处理模块22可以按照协议产生标准connect命令。
302、数据缓存模块10从用户层接收待传输的数据;
假设控制命令需要发送连接(connect)命令和1kb的connect数据,数据缓存模块10可以对1kb的connect数据进行缓存。
303、控制命令生成处理模块22将nvme控制命令输入到控制命令发送队列32,并控制数据缓存模块10将待传输的数据发送给controller;
示例性的,控制命令发送队列32可以将nvme控制命令发送给controller,数据缓存模块10将待传输的数据发送给controller;或者,控制命令生成处理模块22可以向数据缓存模块10获取待传输的数据,并将待传输的数据和nvme控制命令输入到控制命令发送队列32,之后由控制命令发送队列32将待传输的数据和nvme控制命令一并发送给controller。
304、控制命令完成队列42接收controller返回的响应消息;
controller接收并处理nvme控制命令后,可以返回响应消息到控制命令完成队列42。
305、控制命令生成处理模块22从控制命令完成队列42中取回响应消息。
控制命令生成处理模块22可以从控制命令完成队列42中取回与nvme控制命令相对应的响应消息,比如,可以取回与connect命令相对应的响应消息,根据响应信息判断connect命令传输是否成功。
控制命令发送队列32将nvme控制命令发送给controller之后,若controller返回数据到数据缓存模块10,那么控制命令生成处理模块22可以从数据缓存模块10中获取controller返回的数据。
fabric命令、admin命令以及数据都可以看作是一系列的数据结构,这些数据结构都是固定的,根据nvme协议定义而来。
可选的,上述各个实施例中的host可以应用于网络化存储系统中,有利于提高网络化存储系统的性能,或者,上述各个实施例中的host也可以扩展到使用nvme协议的其他类似的互连系统中。
请参阅图4,本发明还提供一种物理机系统,包括host和nvme存储设备,nvme存储设备包括controller,其中,host为上述任意一个实施例所述的host。
以上对本申请所提供的技术方案进行了详细介绍,本申请中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。