CN114047888A - 一种NVMe磁盘的挂载方法、设备及存储介质 - Google Patents
一种NVMe磁盘的挂载方法、设备及存储介质 Download PDFInfo
- Publication number
- CN114047888A CN114047888A CN202210046264.5A CN202210046264A CN114047888A CN 114047888 A CN114047888 A CN 114047888A CN 202210046264 A CN202210046264 A CN 202210046264A CN 114047888 A CN114047888 A CN 114047888A
- Authority
- CN
- China
- Prior art keywords
- spdk
- vhost
- nvme
- disk
- storage node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; 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/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- 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
- 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/0662—Virtualisation aspects
- G06F3/0664—Virtualisation aspects at device level, e.g. emulation of a storage device or system
-
- 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/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
Abstract
本申请涉及云计算技术领域,公开了一种NVMe磁盘的挂载方法、设备及存储介质,包括:调用SPDK脚本,将NVMe驱动从内核中解绑,使用用户态驱动;当本地挂载磁盘时,通过第一存储节点启动SPDK vhost服务,将第一存储节点的本地磁盘映射至OpenStack虚拟机;当远程挂载磁盘时,通过第二存储节点启动SPDK nvmf服务,并通过第二计算节点启动SPDK vhost服务,经SPDK vhost接口连接SPDK nvmf服务;将第二存储节点的远端磁盘通过RDMA通信方式映射至本地。这样可以减少内核干预,节省CPU处理开销,提高虚拟机中NVMe磁盘的性能,有效降低网络时延,提升数据传输效率。
Description
技术领域
本发明涉及云计算技术领域,特别是涉及一种NVMe磁盘的挂载方法、设备及存储介质。
背景技术
NVMe(Non-Volatile Memory express,非易失性内存主机控制器接口规范)磁盘在物理介质上提高了磁盘的性能,但是在原有的AHCI(Advanced Host ControllerInterface,高级主机控制器接口)规范中,只定义了一个交互队列,那么主机与磁盘之间的数据交互只能通过一个队列通信,也就是多核处理器也只能通过一个队列与磁盘进行数据交互,无法更好地发挥NVMe磁盘的物理特性。而NVMe协议可以最多有64K个队列,每个CPU(Central Processing Unit,中央处理器)或者核心都可以有一个队列,这样并发程度大大提升,性能也自然更高了。
但是,应用层程序尤其是OpenStack虚拟机使用NVMe磁盘时,整个I/O链路要经过内核中转,依然较长且复杂,而且由于I/O在传输过程中会产生频繁的用户态上下文切换和中断,占用了较多的CPU资源,增加了CPU的负载。在OpenStack虚拟机中按照通用的挂载方式使用NVMe磁盘并没有发挥出NVMe物理磁盘的性能。
发明内容
有鉴于此,本发明的目的在于提供一种NVMe磁盘的挂载方法、设备及存储介质,可以减少内核干预,节省CPU处理开销,提高OpenStack虚拟机中NVMe磁盘的性能,且有效降低网络时延,提升数据传输效率。其具体方案如下:
一种NVMe磁盘的挂载方法,包括:
调用SPDK脚本,将NVMe驱动从内核中解绑,使用用户态驱动;
当本地挂载NVMe磁盘时,通过第一存储节点启动用户态中的SPDK vhost服务,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,以将本地NVMe磁盘挂载在OpenStack虚拟机中;
当远程挂载NVMe磁盘时,通过第二存储节点启动SPDK nvmf服务,并通过第二计算节点启动所述SPDK vhost服务,经SPDK vhost接口连接所述SPDK nvmf服务;
将所述第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,以将远端NVMe磁盘挂载到OpenStack虚拟机中。
优选地,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在所述通过第一存储节点启动用户态中的SPDK vhost服务之后,包括:
调用SPDK相关接口,为使用用户态驱动的NVMe磁盘创建一个SPDK bdev设备,并基于SPDK bdev设备创建lvstore;
启动SPDK的http服务,向上供OpenStack虚拟机调用;
通过所述第一存储节点检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量;
若否,则轮询检测,直到找到容量满足的lvstore,在该lvstore上创建一个NVMe磁盘的逻辑卷。
优选地,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在所述将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机之前,还包括:
在所述第一存储节点中组装一个vhost-user类型的结构体,并将组装的所述结构体传送给第一计算节点;所述结构体包括挂载NVMe磁盘所需的unix domain socket描述符、驱动类型SPDK vhost、传输类型vhost-user、命名空间id和SPDK nqn;
在所述第一计算节点获取所述结构体后,创建vhost-blk设备;
利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机。
优选地,在本发明实施例提供的上述NVMe磁盘的挂载方法中,所述利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,包括:
在创建vhost-blk设备时,绑定所述unix domain socket描述符;
利用vhost-blk设备通过所述unix domain socket描述符与SPDK vhost进程、OpenStack虚拟机进行通信;
根据所述结构体,调用libvirt挂载接口,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机。
优选地,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在所述通过第二存储节点启动SPDK nvmf服务之后,还包括:
调用SPDK相关接口,对使用用户态驱动的NVMe磁盘创建一个远程映射的SPDKbdev设备,并基于SPDK bdev设备创建lvstore;
启动SPDK的http服务,向上供OpenStack虚拟机调用;
通过所述第二存储节点检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量;
若否,则轮询检测,直到找到容量满足的lvstore,在其上创建一个NVMe磁盘的逻辑卷。
优选地,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在所述通过第二计算节点启动所述SPDK vhost服务之前,还包括:
在所述第二存储节点中组装一个vhost-user类型的结构体,并将组装的所述结构体传送给第二计算节点;所述结构体包括挂载NVMe磁盘所需的unix domain socket描述符、驱动类型SPDK vhost、传输类型vhost-user、命名空间id和SPDK nqn。
优选地,在本发明实施例提供的上述NVMe磁盘的挂载方法中,将所述第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,具体包括:
将所述第二存储节点的SPDK bdev设备通过RDMA通信方式映射至本地的SPDKbdev设备;
在所述第二计算节点获取所述结构体后,调用SPDK接口创建vhost-blk设备;
利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上。
优选地,在本发明实施例提供的上述NVMe磁盘的挂载方法中,所述利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上,包括:
在创建vhost-blk设备时,绑定所述unix domain socket描述符;
利用vhost-blk设备通过所述unix domain socket描述符与SPDK vhost进程、OpenStack虚拟机进行通信;
根据所述结构体,调用libvirt挂载接口,将所述第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上。
本发明实施例还提供了一种NVMe磁盘的挂载设备,包括处理器和存储器,其中,所述处理器执行所述存储器中存储的计算机程序时实现如本发明实施例提供的上述NVMe磁盘的挂载方法。
本发明实施例还提供了一种计算机可读存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现如本发明实施例提供的上述NVMe磁盘的挂载方法。
从上述技术方案可以看出,本发明所提供的一种NVMe磁盘的挂载方法,包括:调用SPDK脚本,将NVMe驱动从内核中解绑,使用用户态驱动;当本地挂载NVMe磁盘时,通过第一存储节点启动用户态中的SPDK vhost服务,将第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,以将本地NVMe磁盘挂载在OpenStack虚拟机中;当远程挂载NVMe磁盘时,通过第二存储节点启动SPDK nvmf服务,并通过第二计算节点启动SPDK vhost服务,经SPDKvhost接口连接SPDK nvmf服务;将第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,以将远端NVMe磁盘挂载到OpenStack虚拟机中。
本发明通过SPDK提供内核旁路技术,可以将NVMe设备驱动代码应用在用户态,尽可能减少内核干预,节省CPU处理开销,提高OpenStack虚拟机中NVMe磁盘的性能,并且通过与RDMA技术的结合,远程连接存储节点的NVMe磁盘,通过编写计算节点和存储节点的相关驱动程序,使OpenStack虚机直接基于用户态驱动与存储节点NVMe磁盘通信,有效降低了网络时延,提升了数据传输效率,大幅提升了I/O性能,同时为虚拟机提供远程挂载NVMe磁盘的能力。
此外,本发明还针对NVMe磁盘的挂载方法提供了相应的设备及计算机可读存储介质,进一步使得上述方法更具有实用性,该设备及计算机可读存储介质具有相应的优点。
附图说明
为了更清楚地说明本发明实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的NVMe磁盘的挂载方法的流程图;
图2为本发明实施例提供的本地NVMe磁盘时的架构示意图;
图3为本发明实施例提供的远程挂载NVMe磁盘时的架构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供一种NVMe磁盘的挂载方法,如图1所示,包括以下步骤:
S101、调用SPDK脚本,将NVMe驱动从内核中解绑,使用用户态驱动;
需要说明的是,SPDK(Storage Performance Development Kit)可以将NVMe设备的驱动和内核解绑,并将设备驱动代码应用在用户态,虚拟机磁盘I/O减少了用户态与内核态的切换。PCI_ALLOWED配置NVMe的设备编号,HUGEMEN根据实际物理内存大小和需求配置。具体地,NVMe驱动名称可变为uio或者fio。
S102、当本地挂载NVMe磁盘时,通过第一存储节点启动用户态中的SPDK vhost服务,将第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,以将本地NVMe磁盘挂载在OpenStack虚拟机中;
S103、当远程挂载NVMe磁盘时,通过第二存储节点启动SPDK nvmf服务,并通过第二计算节点启动SPDK vhost服务,经SPDK vhost接口连接SPDK nvmf服务;
S104、将第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,以将远端NVMe磁盘挂载到OpenStack虚拟机中。
在本发明中,将SPDK和RDMA进行结合,使OpenStack虚拟机直接基于用户态驱动与存储节点NVMe磁盘通信,提升了虚拟机I/O性能。
需要说明的是,步骤S102结合步骤S101是用于实现本地挂载NVMe磁盘;步骤S103和步骤S104结合步骤S101是用于实现远程挂载NVMe磁盘,具体通过RDMA通信方式提供基于NVMe-OF的远程块存储设备服务。
在实际应用中,计算节点使用NVMe cli客户端命令,通过RDMA网络将远端块存储设备映射至本地,OpenStack虚拟机便可通过常规挂载方式使用该块设备。RDMA(RemoteDirect Memory Access,远程直接数据存取)的概念是将数据从一台服务器的内存传输到另一台服务器的内存,不需要双方CPU和操作系统的接入。而OpenStack现在这种实现方式下的计算节点中,OpenStack虚拟机磁盘的I/O过程依然要经过内核中转,CPU寄存器要频繁切换上下文,增加了CPU的负载,无法发挥RDMA在用户态通信的高效性。
因此,考虑到SPDK的用户态驱动和RDMA在服务器内存之间传输数据的特性,本发明使用SPDK和RDMA技术相结合的方式在OpenStack中实现了基于用户态的NVMe磁盘驱动,其中I/O路径简化为数据从存储节点的NVMe磁盘直达用户态驱动,再经由计算节点和存储节点的RDMA网卡,最终直接送达计算节点的用户态空间,提升了数据传输效率,实现了远程挂载NVMe磁盘。
在本发明实施例提供的上述NVMe磁盘的挂载方法中,通过SPDK提供内核旁路技术,可以将NVMe设备驱动代码应用在用户态,尽可能减少内核干预,节省CPU处理开销,提高OpenStack虚拟机中NVMe磁盘的性能,并且通过与RDMA技术的结合,远程连接存储节点的NVMe磁盘,通过编写计算节点和存储节点的相关驱动程序,使OpenStack虚机直接基于用户态驱动与存储节点NVMe磁盘通信,有效降低了网络时延,提升了数据传输效率,大幅提升了I/O性能,同时为虚拟机提供远程挂载NVMe磁盘的能力。
在具体实施时,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在执行步骤S102通过第一存储节点启动用户态中的SPDK vhost服务之后,具体可以包括:首先,调用SPDK相关接口,为使用用户态驱动的NVMe磁盘创建一个SPDK bdev设备,并基于SPDK bdev设备创建lvstore,这样创建基于NVMe的bdev的块设备,可实现一个基础的底层块设备;然后,启动SPDK的http服务,向上供OpenStack虚拟机调用;之后,通过第一存储节点检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量;若否,则轮询检测,直到找到容量满足的lvstore,在该lvstore上创建一个NVMe磁盘的逻辑卷。
需要说明的是,上述步骤可以均由第一存储节点(即块存储服务模块)来执行。其中bdev设备可连接本地PCIe驱动器,它是在用户态的,因此计算节点和存储节点的通信都是在用户态完成,提高了数据传输效率。启动SPDK的http服务是SPDK的准备工作,能够给OpenStack提供接口服务功能。
在具体实施时,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在执行步骤S102将第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机之前,还可以包括:首先,在第一存储节点中组装一个vhost-user类型的结构体,并将组装的结构体传送给第一计算节点;结构体包括挂载NVMe磁盘所需的unix domain socket描述符、驱动类型SPDK vhost、传输类型vhost-user、命名空间id和SPDK nqn;在第一计算节点获取结构体后,创建vhost-blk设备;然后,利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机。
在具体实施时,在本发明实施例提供的上述NVMe磁盘的挂载方法中,上述步骤中利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,具体可以包括:首先,在创建vhost-blk设备时,绑定unix domain socket描述符;然后,利用vhost-blk设备通过unix domain socket描述符与SPDK vhost进程、OpenStack虚拟机进行通信;最后,根据结构体,调用libvirt挂载接口,将第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机。
这样在OpenStack 块存储服务模块组装结构体并传送给OpenStack 计算服务模块组件后,计算服务模块可以获取unix domain socket描述符,拼装成SPDK vhost-blk相关的xml挂载到OPENSTACK虚拟机中,以实现本地挂载。需要指出的是,SPDK vhost进程和磁盘通过Unix domain socket描述符通信,OpenStack创建块设备需要绑定unix domainsocket描述符;OpenStack虚拟机的磁盘I/O将不会再通过OpenStack调度到内核中的KVM,而是使用用户态中的SPDK vhost和磁盘直接通信,减少了内核中转和CPU上下文频繁切换。
下面以一个具体实例将本发明实施例提供的本地挂载NVMe磁盘的具体方法进行说明,令上述第一存储节点为块存储服务模块,上述第一计算节点为计算服务模块,如图2所示,具体步骤如下:
步骤一、调用SPDK驱动初始化脚本,将NVMe盘从内核驱动中解绑,使用用户态驱动;利用PCI_ALLOWED配置NVMe的设备编号,HUGEMEN根据实际物理内存大小和需求配置。
步骤二、启动SPDK vhost服务。
步骤三、调用SPDK相关接口,将提到用户态的NVMe设备创建一个SPDK bdev。
步骤四、调用SPDK相关接口,基于bdev设备创建lvstore。
步骤五、启动SPDK的http服务,向上供OpenStack调用。
步骤六、创建虚拟机磁盘,块存储服务模块检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量,如果不满足,轮询检测,直到找到容量满足的lvstore,在其上创建一个NVMe磁盘的逻辑卷。
步骤七、在块存储服务模块中实现vhost驱动,并提供连接函数供计算服务模块挂载NVMe磁盘使用。实现初始化连接方法需要定义一个包含unix domain socket描述符、驱动类型(名称为SPDK vhost)、传输类型(名称为vhost-user)、命名空间id和SPDK nqn等属性的结构体。当计算服务连接存储服务时,该结构体会作为挂载磁盘所需要的参数传递给计算服务。
步骤八、调用存储服务模块连接接口,获取挂载相关参数,组装vhost-user类型的结构体。
步骤九、创建一个vhost-blk设备,用于和SPDK vhost进程通信;在创建vhost-blk设备时需要绑定unix domain socket,用于SPDK vhost和虚拟机通信。
步骤十、基于vhost-user结构体,调用libvirt挂载接口,将本地存储块设备映射至虚拟机。
上述步骤一至步骤七可由块存储服务模块来执行,上述步骤八至步骤九可由计算服务模块来执行。
进一步地,在具体实施时,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在执行步骤S103通过第二存储节点启动SPDK nvmf服务之后,还可以包括:首先,调用SPDK相关接口,对使用用户态驱动的NVMe磁盘创建一个远程映射的SPDK bdev设备,并基于SPDKbdev设备创建lvstore,这样创建基于NVMe的bdev的块设备,实现了一个基础的底层块设备;然后,启动SPDK的http服务,向上供OpenStack虚拟机调用,这是SPDK的准备工作,能够给OpenStack提供接口服务功能;之后,通过第二存储节点检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量;若否,则轮询检测,直到找到容量满足的lvstore,在其上创建一个NVMe磁盘的逻辑卷。
在具体实施时,在本发明实施例提供的上述NVMe磁盘的挂载方法中,在执行步骤S103通过第二计算节点启动SPDK vhost服务之前,还可以包括:在第二存储节点中组装一个vhost-user类型的结构体,并将组装的结构体传送给第二计算节点;结构体包括挂载NVMe磁盘所需的unix domain socket描述符、驱动类型SPDK vhost、传输类型vhost-user、命名空间id和SPDK nqn。
在具体实施时,在本发明实施例提供的上述NVMe磁盘的挂载方法中,步骤S104将第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,具体可以包括:首先,将第二存储节点的SPDK bdev设备通过RDMA通信方式映射至本地的SPDK bdev设备;然后,在第二计算节点获取结构体后,调用SPDK接口创建vhost-blk设备;之后,利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上。
需要指出的是,在上述步骤中,计算节点上不再使用NVMe cli客户端发现和挂载远端的NVMe磁盘,因为这种方式挂载到OpenStack虚拟机后,I/O仍会链路通过内核和虚拟机进行通信,不能发挥RDMA在用户态之间直接通信的能力。本发明启动一个SPDK vhost服务,通过RDMA连接创建一个NVMe bdev。这个bdev是在用户态的,因此计算节点和存储节点的通信都是在用户态完成,提高了数据传输效率。
在具体实施时,在本发明实施例提供的上述NVMe磁盘的挂载方法中,上述步骤中利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上,具体可以包括:首先,在创建vhost-blk设备时,绑定unix domain socket描述符;然后,利用vhost-blk设备通过unix domain socket描述符与SPDK vhost进程、OpenStack虚拟机进行通信;最后,根据结构体,调用libvirt挂载接口,将第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上。
下面以一个具体实例将本发明实施例提供的远程挂载NVMe磁盘的具体方法进行说明,令上述第二存储节点为块存储服务模块,上述第二计算节点为计算服务模块,如图3所示,具体步骤如下:
第一步、调用SPDK驱动初始化脚本,将NVMe盘从内核驱动中解绑,提到用户态。利用PCI_ALLOWED配置NVMe的设备编号,HUGEMEN根据实际物理内存大小和需求配置。
第二步、启动SPDK nvmf服务,供计算节点远端挂载磁盘使用。
第三步、调用SPDK相关接口,将提到用户态的NVMe设备创建一个SPDK bdev。
第四步、调用SPDK相关接口,基于bdev设备创建lvstore。
第五步、启动SPDK的http服务,向上供openstack调用。
第六步、创建虚拟机磁盘,块存储服务检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量,如果不满足,轮询检测,直到找到容量满足的lvstore,在其上创建一个NVMe磁盘的逻辑卷。
第七步、在块存储服务模块中实现vhost驱动,并提供连接函数供计算服务模块挂载NVMe磁盘使用。实现初始化连接方法需要定义一个包含unix domain socket描述符、驱动类型(名称为SPDK vhost)、传输类型(名称为vhost-user)、命名空间id和SPDK nqn等属性的结构体。当计算服务连接存储服务时,该结构体会作为挂载磁盘所需要的参数传递给计算服务。
第八步、启动SPDK vhost服务,供OpenStack虚拟机和块设备连接及I/O通信使用。
第九步、通过SPDK vhost接口连接存储服务模块的SPDK nvmf服务,将块存储服务模块的bdev设备通过 RDMA方式映射至本地SPDK bdev。
第十步、调用块存储服务模块连接接口,获取挂载相关参数,组装vhost-user类型的结构体。
第十一步、调用SPDK接口创建vhost-blk设备,该设备绑定唯一的一个unixdomain socket描述符。
第十二步、基于vhost-user结构体,调用libvirt挂载接口,将本地存储块设备映射至虚拟机。
上述第一步至第七步可由块存储服务模块来执行,上述第八步至第十二步可由计算服务模块来执行。
需要说明的是,在本发明的OpenStack中,实现了一版基于SPDK用户态驱动和RDMA网络通信的技术。计算节点使用NVMe cli客户端命令,通过RDMA网络将远端块存储设备映射至本地,OpenStack虚拟机便可通过常规挂载方式使用该块设备。本发明基于SPDK bdev支持的rdma模式远程连接存储节点的NVMe磁盘,通过编写计算服务模块和块存储服务模块的相关驱动程序,使OpenStack虚拟机直接基于用户态驱动与存储节点NVMe磁盘通信,降低了网络时延,减少了用户态与内核态的切换,大幅提升了I/O性能。
下面对现有技术与本发明实施例提供的上述NVMe磁盘的挂载方法分别进行性能测试,主要是在OpenStack虚拟机内通过三种方式分别挂载一块NVMe磁盘:①部署OpenStack。调用OpenStack接口挂载一块NVMe磁盘;②使用SDPK vhost服务在OpenStack虚拟机中挂载一块本地盘;③OpenStack虚拟机通过rdma通信方式映射远端NVMe磁盘到本地的SPDK bdev上,然后挂载到OpenStack虚拟机中。其中第①种方式是现有技术,第②种方式和第③种方式是本发明实施例提供的上述NVMe磁盘的挂载方法。
在测试中,采用fio 3.1版本测试工具测试4k数据块随机读、随机写的IOPS,吞吐量。
IOPS的测试结果如下:
1线程下,第①种方式随机写IOPS:100K,随机读110K;第②种方式随机写IOPS:110K,随机读115K;第③种方式随机写IOPS:100K,随机读110K。
4线程下,第①种方式随机写IOPS:145K,随机读155K;第②种方式随机写IOPS:400K,随机读330K;第③种方式随机写IOPS:350K,随机读300K。
40线程下,第①种方式随机写IOPS:140K,随机读145K;第②种方式随机写IOPS:660K,随机读600K;第③种方式随机写IOPS:530K,随机读500K。
吞吐量的测试结果如下:
1线程下,第①种方式随机写吞吐量:1850MIB/s,随机读2800MIB/s;第②种方式随机写吞吐量:1850MIB/s,随机读2880MIB/s;第③种方式随机写吞吐量:1850MIB/s,随机读2880MIB/s
4线程下,第①种方式随机写吞吐量:2400MIB/s,随机读2800MIB/s;第②种方式随机写吞吐量:2700MIB/s,随机读2800MIB/s;第③种方式随机写吞吐量:2700MIB/s,随机读2800MIB/s。
40线程下,第①种方式随机写吞吐量:1800MIB/s,随机读2800MIB/s;第②种方式随机写吞吐量:2700MIB/s,随机读2800MIB/s;第③种方式随机写吞吐量:2700MIB/s,随机读2800MIB/s。
根据上述测试结果可知,fio使用多线程测试时,本发明的实现方式在IOPS和吞吐量方面比OpenStack自身实现均有提高,随机读吞吐量由于磁盘带宽限制,看不出明显提升效果,但cpu负载有明显下降。
相应地,本发明实施例还公开了一种NVMe磁盘的挂载设备,包括处理器和存储器;其中,处理器执行存储器中存储的计算机程序时实现前述实施例公开的NVMe磁盘的挂载方法。
进一步地,本发明还公开了一种计算机可读存储介质,用于存储计算机程序;计算机程序被处理器执行时实现前述公开的NVMe磁盘的挂载方法。
关于上述方法更加具体的过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的设备、存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
综上,本发明实施例提供的一种NVMe磁盘的挂载方法,包括:调用SPDK脚本,将NVMe驱动从内核中解绑,使用用户态驱动;当本地挂载NVMe磁盘时,通过第一存储节点启动用户态中的SPDK vhost服务,将第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,以将本地NVMe磁盘挂载在OpenStack虚拟机中;当远程挂载NVMe磁盘时,通过第二存储节点启动SPDK nvmf服务,并通过第二计算节点启动SPDK vhost服务,经SPDK vhost接口连接SPDKnvmf服务;将第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,以将远端NVMe磁盘挂载到OpenStack虚拟机中。这样通过SPDK提供内核旁路技术,可以将NVMe设备驱动代码应用在用户态,尽可能减少内核干预,节省CPU处理开销,提高OpenStack虚拟机中NVMe磁盘的性能,并且通过与RDMA技术的结合,远程连接存储节点的NVMe磁盘,通过编写计算节点和存储节点的相关驱动程序,使OpenStack虚机直接基于用户态驱动与存储节点NVMe磁盘通信,有效降低了网络时延,提升了数据传输效率,大幅提升了I/O性能,同时为虚拟机提供远程挂载NVMe磁盘的能力。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的NVMe磁盘的挂载方法、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种NVMe磁盘的挂载方法,其特征在于,包括:
调用SPDK脚本,将NVMe驱动从内核中解绑,使用用户态驱动;
当本地挂载NVMe磁盘时,通过第一存储节点启动用户态中的SPDK vhost服务,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,以将本地NVMe磁盘挂载在OpenStack虚拟机中;
当远程挂载NVMe磁盘时,通过第二存储节点启动SPDK nvmf服务,并通过第二计算节点启动所述SPDK vhost服务,经SPDK vhost接口连接所述SPDK nvmf服务;
将所述第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,以将远端NVMe磁盘挂载到OpenStack虚拟机中。
2.根据权利要求1所述的NVMe磁盘的挂载方法,其特征在于,在所述通过第一存储节点启动用户态中的SPDK vhost服务之后,包括:
调用SPDK相关接口,为使用用户态驱动的NVMe磁盘创建一个SPDK bdev设备,并基于SPDK bdev设备创建lvstore;
启动SPDK的http服务,向上供OpenStack虚拟机调用;
通过所述第一存储节点检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量;
若否,则轮询检测,直到找到容量满足的lvstore,在该lvstore上创建一个NVMe磁盘的逻辑卷。
3.根据权利要求2所述的NVMe磁盘的挂载方法,其特征在于,在所述将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机之前,还包括:
在所述第一存储节点中组装一个vhost-user类型的结构体,并将组装的所述结构体传送给第一计算节点;所述结构体包括挂载NVMe磁盘所需的unix domain socket描述符、驱动类型SPDK vhost、传输类型vhost-user、命名空间id和SPDK nqn;
在所述第一计算节点获取所述结构体后,创建vhost-blk设备;
利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机。
4.根据权利要求3所述的NVMe磁盘的挂载方法,其特征在于,所述利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机,包括:
在创建vhost-blk设备时,绑定所述unix domain socket描述符;
利用vhost-blk设备通过所述unix domain socket描述符与SPDK vhost进程、OpenStack虚拟机进行通信;
根据所述结构体,调用libvirt挂载接口,将所述第一存储节点的本地NVMe磁盘映射至OpenStack虚拟机。
5.根据权利要求1所述的NVMe磁盘的挂载方法,其特征在于,在所述通过第二存储节点启动SPDK nvmf服务之后,还包括:
调用SPDK相关接口,对使用用户态驱动的NVMe磁盘创建一个远程映射的SPDK bdev设备,并基于SPDK bdev设备创建lvstore;
启动SPDK的http服务,向上供OpenStack虚拟机调用;
通过所述第二存储节点检测lvstore剩余空间容量是否大于新建的NVMe磁盘容量;
若否,则轮询检测,直到找到容量满足的lvstore,在其上创建一个NVMe磁盘的逻辑卷。
6.根据权利要求5所述的NVMe磁盘的挂载方法,其特征在于,在所述通过第二计算节点启动所述SPDK vhost服务之前,还包括:
在所述第二存储节点中组装一个vhost-user类型的结构体,并将组装的所述结构体传送给第二计算节点;所述结构体包括挂载NVMe磁盘所需的unix domain socket描述符、驱动类型SPDK vhost、传输类型vhost-user、命名空间id和SPDK nqn。
7.根据权利要求6所述的NVMe磁盘的挂载方法,其特征在于,将所述第二存储节点的远端NVMe磁盘通过RDMA通信方式映射至本地,具体包括:
将所述第二存储节点的SPDK bdev设备通过RDMA通信方式映射至本地的SPDK bdev设备;
在所述第二计算节点获取所述结构体后,调用SPDK接口创建vhost-blk设备;
利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上。
8.根据权利要求7所述的NVMe磁盘的挂载方法,其特征在于,所述利用vhost-blk设备与SPDK vhost进程、OpenStack虚拟机进行通信,将所述第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上,包括:
在创建vhost-blk设备时,绑定所述unix domain socket描述符;
利用vhost-blk设备通过所述unix domain socket描述符与SPDK vhost进程、OpenStack虚拟机进行通信;
根据所述结构体,调用libvirt挂载接口,将所述第二存储节点的远端NVMe磁盘映射至本地的SPDK bdev设备上。
9.一种NVMe磁盘的挂载设备,其特征在于,包括处理器和存储器,其中,所述处理器执行所述存储器中存储的计算机程序时实现如权利要求1至8任一项所述的NVMe磁盘的挂载方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的NVMe磁盘的挂载方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210046264.5A CN114047888B (zh) | 2022-01-17 | 2022-01-17 | 一种NVMe磁盘的挂载方法、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210046264.5A CN114047888B (zh) | 2022-01-17 | 2022-01-17 | 一种NVMe磁盘的挂载方法、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114047888A true CN114047888A (zh) | 2022-02-15 |
CN114047888B CN114047888B (zh) | 2022-04-22 |
Family
ID=80196569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210046264.5A Active CN114047888B (zh) | 2022-01-17 | 2022-01-17 | 一种NVMe磁盘的挂载方法、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114047888B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116775353A (zh) * | 2023-05-19 | 2023-09-19 | 北京百度网讯科技有限公司 | 故障磁盘的维修方法、装置、电子设备与可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708430A (zh) * | 2016-11-30 | 2017-05-24 | 浪潮软件集团有限公司 | 一种云计算架构下的云硬盘实现方法 |
CN110262754A (zh) * | 2019-06-14 | 2019-09-20 | 华东师范大学 | 一种面向NVMe和RDMA的分布式存储系统及轻量级同步通信方法 |
CN110691062A (zh) * | 2018-07-06 | 2020-01-14 | 浙江大学 | 一种数据写入方法、装置及其设备 |
US20200136996A1 (en) * | 2018-06-29 | 2020-04-30 | Intel Corporation | Offload of storage node scale-out management to a smart network interface controller |
CN111722786A (zh) * | 2019-03-21 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 基于NVMe设备的存储系统 |
CN113242175A (zh) * | 2021-04-29 | 2021-08-10 | 烽火通信科技股份有限公司 | 一种基于spdk的存储网关及其实现方法 |
-
2022
- 2022-01-17 CN CN202210046264.5A patent/CN114047888B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708430A (zh) * | 2016-11-30 | 2017-05-24 | 浪潮软件集团有限公司 | 一种云计算架构下的云硬盘实现方法 |
US20200136996A1 (en) * | 2018-06-29 | 2020-04-30 | Intel Corporation | Offload of storage node scale-out management to a smart network interface controller |
CN110691062A (zh) * | 2018-07-06 | 2020-01-14 | 浙江大学 | 一种数据写入方法、装置及其设备 |
CN111722786A (zh) * | 2019-03-21 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 基于NVMe设备的存储系统 |
CN110262754A (zh) * | 2019-06-14 | 2019-09-20 | 华东师范大学 | 一种面向NVMe和RDMA的分布式存储系统及轻量级同步通信方法 |
CN113242175A (zh) * | 2021-04-29 | 2021-08-10 | 烽火通信科技股份有限公司 | 一种基于spdk的存储网关及其实现方法 |
Non-Patent Citations (4)
Title |
---|
YANG Z等: "SPDK vhost-NVMe:accelerating I/Os in virtual machines on NVMe SSDs via user space vhost target", 《2018 IEEE 8TH INTERNATIONAL SYMPOSIUM ON CLOUD AND SERVICE COMPUTING (SC2)》 * |
安仲奇等: "基于用户级融合I/O的Key-Value存储系统优化技术研究", 《计算机研究与发展》 * |
杨皓森等: "面向OpenStack/Ceph的虚拟机备份系统研究", 《计算机系统应用》 * |
董豪宇等: "纯用户态的网络文件系统――RUFS", 《计算机应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116775353A (zh) * | 2023-05-19 | 2023-09-19 | 北京百度网讯科技有限公司 | 故障磁盘的维修方法、装置、电子设备与可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114047888B (zh) | 2022-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9781211B2 (en) | Storage device having master and slave storage device modes | |
CN106874128B (zh) | 数据传输方法及装置 | |
US9529601B1 (en) | Multi-processor startup system | |
CN105122210B (zh) | Gpu虚拟化的实现方法及相关装置和系统 | |
Atchley et al. | The common communication interface (CCI) | |
KR20080106908A (ko) | 하드웨어 장치와 같은 자원을 소유하는 가상 컴퓨터를 이동시키기 위해 이용될 수 있는 컴퓨팅 시스템 및 방법 | |
US20050144402A1 (en) | Method, system, and program for managing virtual memory | |
CN101764843A (zh) | 远程过程调用的处理方法、系统及客户端、服务器 | |
CN102340489B (zh) | 一种服务器之间的数据传输方法和服务器 | |
US20150178018A1 (en) | Mass storage virtualization for cloud computing | |
CN114047888B (zh) | 一种NVMe磁盘的挂载方法、设备及存储介质 | |
WO2019174074A1 (zh) | 一种处理业务数据的方法和网络设备 | |
KR20100008363A (ko) | 물리적 네트워크 인터페이스 선택 | |
CN112202855A (zh) | 裸金属服务器与弹性块存储的通信装置、智能网卡和系统 | |
US7930445B2 (en) | Computer system using remote I/O and I/O data transfer method | |
CN112367362A (zh) | 一种数据处理方法、装置、设备及计算机存储介质 | |
US20070174034A1 (en) | Transparent intellectual network storage device | |
US20050141434A1 (en) | Method, system, and program for managing buffers | |
WO2010117369A1 (en) | Partitioning of compound or composite usb devices in a remote usb environment | |
CN106911598B (zh) | 一种Xen虚拟化环境监控扩展方法和系统 | |
CN111475350A (zh) | 一种mcs下远程复制功能的配置测试方法、系统及设备 | |
US9658970B1 (en) | Interconnection of peripheral devices on different electronic devices | |
Kang et al. | Design and implementation of kernel S/W for TCP/IP offload engine (TOE) | |
US11689621B2 (en) | Computing device and storage card | |
US20240160347A1 (en) | Polymorphic computing architecture for computational storage |
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 |