CN113242175B - 一种基于spdk的存储网关及其实现方法 - Google Patents
一种基于spdk的存储网关及其实现方法 Download PDFInfo
- Publication number
- CN113242175B CN113242175B CN202110476073.8A CN202110476073A CN113242175B CN 113242175 B CN113242175 B CN 113242175B CN 202110476073 A CN202110476073 A CN 202110476073A CN 113242175 B CN113242175 B CN 113242175B
- Authority
- CN
- China
- Prior art keywords
- virtual
- storage
- volume
- spdk
- driver
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/66—Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
Abstract
本发明涉及存储管理技术领域,提供了一种基于SPDK的存储网关及其实现方法。其中统一管理系统接收创建卷的命令,通过所述存储网关在提供卷的主机上进行卷的创建;当进行创建的卷挂载时,统一管理系统下发attach命令到各个存储网关;当存储网关接收到挂载卷的attach命令时,调用SPDK库函数将物理存储的卷映射成虚拟通用存储设备,以及创建虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联;所述虚拟通用存储设备用于将不同物理存储的卷进行抽象成统一的设备。本发明通过SPDK库对协议管理,可以对接不同的异构存储,对上抽象出一个相同的虚拟通用存储设备。
Description
【技术领域】
本发明涉及存储管理技术领域,特别是涉及一种基于SPDK的存储网关及其实现方法。
【背景技术】
不同用户对于云平台和存储会进行分开采购,所以云平台会面临不同的存储产品,以及存储厂商。但这些存储设备由于管理系统独立,对接协议不同,使得云平台在使用存储时产生了大量的对接工作。同时,云平台存在虚拟机,容器和物理机三种不同的计算资源。这些计算资源也需要使用存储。所以需要提供统一的访问方式,方便存储的使用。
因此,如何实现使用统一的接口方式提供存储服务,是本领域技术人员需要解决的问题。目前主流的方式主要是通过将后端异构存储进行抽象,将不同的存储设备提前创建出卷。然后通过存储网关服务重新将卷进行格式化。抽象出对外统一的卷,提供给系统使用。
鉴于此,克服该现有技术所存在的缺陷是本技术领域亟待解决的问题。
【发明内容】
本发明要解决的技术问题是不同异构存储在使用时,存储协议不统一导致云平台等系统使用复杂的问题。
本发明采用如下技术方案:
第一方面,本发明提供了一种基于SPDK的存储网关的实现方法,在每一个提供卷的主机安装存储网关,通过统一管理系统对存储网关的连接访问来获取相应卷的读写操作,方法包括:
统一管理系统接收创建卷的命令,通过所述存储网关在提供卷的主机上进行卷的创建;
当进行创建的卷挂载时,统一管理系统下发attach命令到各个存储网关;
当存储网关接收到挂载卷的attach命令时,调用SPDK库函数将物理存储的卷映射成虚拟通用存储设备,以及创建虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联;所述虚拟通用存储设备用于将不同物理存储的卷进行抽象成统一的设备;
存储网关下发attach命令给虚拟存储专用驱动之后,在所述虚拟存储专用驱动调用系统注册接口后,通过所述统一管理系统实现所述卷的呈现;
建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道。
优选的,所述卷的创建包括生成卷ID、记录卷的大小、卷的存储地址信息和卷的协议类型信息中的一项或者多项,则所述attach命令中包括存储的卷ID、卷的存储地址信息和卷的协议类型。
优选的,当存储网关接收到挂载卷的命令时,所述方法还包括:
如果需要使用卷的主机为虚拟机,则执行所述的将物理存储的卷映射成虚拟通用存储设备,创建虚拟scsi后端进程;在虚拟机启动时,通过虚拟机监视器进程对所述虚拟通用存储设备进行IO映射;
如果需要使用卷的是非虚拟机,则执行所述的将物理存储的卷映射成虚拟通用存储设备,创建虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联;存储网关下发attach命令给虚拟存储专用驱动之后,在所述虚拟存储专用驱动调用系统注册接口后,通过所述统一管理系统实现所述卷的呈现;建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道的操作。
优选的,建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道,具体包括:
attach命令下发给虚拟存储专用驱动时,通过所述attach命令传入socket地址;以便通过所述socket地址完成虚拟存储专用驱动和虚拟scsi后端进程之间的信令交互通道的建立;其中,所述信令交互通道具体为socket通道;
虚拟存储专用驱动通过所述socket地址向虚拟scsi后端询问共享内存地址;
虚拟存储专用驱动获取所述共享内存地址后,将所述共享内存地址进行记录;其中,记录所述共享内存地址用于进行内存共享时访问使用。
优选的,用户通过所述第一设备进行数据写入时,所述方法还包括:
用户进程,写入磁盘设备,然后通过虚拟存储专用驱动,将数据写入请求挂在ring环上,然后唤醒虚拟scsi后端进程;其中,所述ring环在所述共享内存地址上生成;其中,所述磁盘设备为所述统一管理系统实现所述卷的呈现内容;
虚拟scsi后端进程循环的从ring环读取数据写入内容,提交到虚拟通用存储设备,然后调用SPDK中的存储驱动,通过存储协议发送给物理存储设备中对应的卷。
优选的,方法还包括:
物理存储设备响应后,SPDK中的存储驱动,会返回写入成功的信息,通过虚拟scsi后端进程将写入成功的信息放入ring环中;
虚拟存储专用驱动返回成功信息,通过磁盘返回给用户进程,写入完成。
优选的,所述虚拟存储专用驱动包括virito接口、ioctl管理模块和ring通信;其中,virito接口:主要实现对接了vrito协议;ioctl管理模块:负责跟存储网关中的其他程序进行接口交互;ring通信:负责和虚拟scsi后端进程进行内存交换。
优选的,在进行卷卸载时,方法还包括:
统一管理系统下发detach命令到存储网关,所述detach命令中包括待进行卷卸载的卷ID;
存储网关通过卷ID找到相关设备,下发detach命令给虚拟存储专用驱动;
虚拟存储专用驱动停止接收用户的IO操作;
虚拟存储专用驱动调用系统注销接口注销卷的呈现内容;
虚拟存储专用驱动等待ring环上数据写入完成;
虚拟存储专用驱动解除共享内存映射;
虚拟存储专用驱动发送stop指令;
虚拟scsi后端进程将共享内存进行回收;
调用SPDK接口删除虚拟通用存储设备。
优选的,在进行卷删除时,方法还包括:
统一管理系统接收到删除卷的命令,则调用物理存储API对卷进行删除;
其中,若卷还未卸载,则先执行卷的卸载操作后,再执行卷的删除操作。
本发明实现了统一管理系统和存储网关。对于统一管理系统主要是通过异构存储提供的RESTAPI进行调用,进行创卷/删卷等操作。
在本发明通过SPDK库对协议管理,可以对接不同的异构存储,对上抽象出一个相同的虚拟通用存储设备,为了满足容器/物理机对存储的统一使用方式,本发明中还提出了一种虚拟存储专用驱动(内核驱动),进行块存储的映射(直观表现就是sdb)。
另外还提出了一种共享内存作为虚拟scsi后端进程和虚拟存储专用驱动的通信媒介,进行数据的拷贝传输,Socket通道是管理的信令通道,从而实现通过虚拟存储专用驱动,使得各卷可以在物理机和容器上进行挂载。
【附图说明】
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的现有技术一中的存储网关结构示意图;
图2是本发明实施例提供的现有技术二中的存储网关结构示意图;
图3是本发明实施例提供的一种基于SPDK的存储网关结构示意图;
图4是本发明实施例提供的一种基于SPDK的存储网关结构示意图;
图5是本发明实施例提供的一种基于SPDK的存储网关结构层次示意图;
图6是本发明实施例提供的一种基于SPDK的存储网关结构示意图;
图7是本发明实施例提供的现有技术四中的数据传输方式示意图;
图8是本发明实施例提供的一种基于SPDK的存储网关数据传输方式示意图;
图9是本发明实施例提供的一种基于SPDK的存储网关实现方法流程示意图;
图10是本发明实施例提供的一种虚拟存储专用驱动的功能结构示意图;
图11是本发明实施例提供的一种基于SPDK的存储网关实现方法的流程示意图;
图12是本发明实施例提供的一种基于SPDK的存储网关实现方法的流程示意图;
图13是本发明实施例提供的一种基于SPDK的存储网关实现方法的流程示意图;
图14是本发明实施例提供的一种基于SPDK的存储网关结构示意图;
图15是本发明实施例提供的一种基于SPDK的存储网关装置结构示意图。
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在如何映射到主机方面,如图1所示的现有技术一通过agent接收挂载指令,直接通过调用scsi/ceph/nvme协议,将相应的硬件存储资源经由内核态的内核SCSI驱动、内核RBD驱动、内核NVME驱动转换为各自的卷,分别表现为不同类型的设备sda、rbd和nvme,然后供虚拟机、容器或者裸机调用。如图2所示的现有技术二通过agent接收挂载指令生成新设备,再调用scsi/ceph/nvme协议,相比较图1所示的现有技术一不同的在于,现有技术二里进一步在用户态里设置了TGT(Linux target framework)进程来统一各协议的访问方式,其中,所述TGT进程通过sdb进一步抵达“虚拟机/容器/裸机”之间的箭头代表,将各不同类型的卷(sda、rbd、nvme)统一映射为sdb作为“虚拟机/容器/裸机”数据交互对象(图2中由CEPH到内核RBD到rbd之间的单向箭头代表了他们之间的映射关系,而其中的双向箭头代表了他们之间数据交互过程)。而在图3所示的本发明中通过agent接收挂载指令,直接通过存储性能开发工具包(Storage Performance Development Kit,简写为:SPDK)库调用scsi/ceph/nvme协议,实现了与相应硬件存储资源IPSAN,FCSAN,CEPH,NVME SSD的数据交互;其中,SPDK与sdb的箭头再到容器/裸机代表了将硬件存储资源IPSAN/FCSAN,CEPH,NVME SSD统一映射为卷sdb供容器/裸机进行数据访问,避免了内核态的交互,提高了数据交互的性能和效率。相比较图2而言,图2中的TGT不支持直接向虚拟机提供访问接口,需要转由相应的卷sdb(图2中的)来完成数据访问;在图3中,相应的SPDK支持虚拟机直接通过自身完成与相应硬件存储资源(IPSAN/FCSAN,CEPH,NVME SSD)的数据交互。本地用户态或者内核态程序由agent管理,本质上现有技术中的agent和本发明中的agent都是用于接收外部指令,相对而言就是指令的接收和传递,现有技术中接收现有的指令,本发明则用于传递本发明相关的指令。
在协议使用方面,如图1所示的现有技术一使用内核协议栈。如图2所示的现有技术二仍然使用的是内核协议栈。而在图3所示的本发明中使用SPDK用户态协议栈。本发明的优点在于:SPDK基于用户态的协议栈可以对整个IO进行了加速。
在如何提供给用户方面,如图1所示的现有技术一对于用户使用,也使用不同类型的设备,如sda,rbd,nvme;缺点在于:由于设备类型不同,提供的功能也各有差异。如图2所示的现有技术二进行二次映射,再转化成一般通过用户态软件进行再次映射,所述二次映射具体的是先把设备映射成类似sda,rdb,nvme然后通过TGT进程映射成新的sdb完成二次映射。其优点是屏蔽了多样的设备类型。而在图3所示的本发明中进行二次映射,再转化成sdb提供的scsi接口,此处的二次映射具体的是先把设备映射到SPDK(即bdev),然后通过SPDK映射成新的sdb完成二次映射;优点:屏蔽了多样的设备类型。如图3所示,裸机、容器和虚拟机均可以使用虚拟设备方式,优选的,虚拟机使用虚拟机监视器直挂方式性能相比较虚拟机使用虚拟设备方式性能会更优。
在IO路径方面,如图1所示的现有技术一直接走内核协议栈。如图2所示的现有技术二先要走到内核协议栈,然后走到TGT进程,再次走到内核协议栈,缺点是IO路径增加。而在图3所示的本发明中存储设备直接接入用户态的SPDK。如果是虚拟机,则直接走vhost-scsi(现有技术中的函数接口)使用。如果是裸机和容器则走内核态的sdb设备(此处为本发明技术方案核心改进点)。本发明优点在于IO路径在SPDK直接处理,不用分那么多层,性能提升。
综上所述,现有技术一的缺点主要是,对接系统需要感知不同的存储类型,基于不同存储使用不同的存储协议来进行访问。现有技术二通过借助scsi模拟器(即TGT到sdb再到虚拟机/容器/裸机的方案),可以对外统一呈现接口,但是由于只是简单的堆叠,IO路径需要多次从内核态到用户态转换,导致性能低。本发明主要是利用了SPDK,纯用户态协议栈的优势,提升了速度。使用SPDK提供的多协议屏蔽了存储的细节。
如图4所示,使用iscsi-target直接进行映射,这样可以直接使用iscsi协议进行磁盘映射为sdb,让用户统一访问。但是该方案,如图5所示,是通过网络进行通信的(例如TCP/IP协议的以太网),通信方式需要走网络协议栈,所以性能仍然需要改进。
由于SPDK中已经实现了iscsi-target。如图5所示,直接使用iscsi协议进行访问。
本发明实现进一步对其进行了改进,使用了高速的iscsi-target进程,现有技术中的iscsi-target进程是为了虚拟机加速访问的,所以在物理机和容器无法进行支持。本发明通过实现了虚拟存储专用(在本发明实施例中也被表述为virtio-blk-user)驱动,克服了现有技术高速iscsi-target进程在裸机和容器无法进行支持的问题,使得用户态和内核态通过高速共享内存进行访问,提升了速度,相应实现的方案如图6所示。
如图7所示,纯粹使用iscsi协议,其中iscsi驱动和iscsi-target进程之间使用的是网络协议栈(此处的首字符i指的是internet,通过网络的意思),访问速度慢。如图8所示,本发明进一步的改进实现方案中采用虚拟存储专用驱动和虚拟scsi后端进程共享内存,无锁队列技术,访问速度得到了有效提升。如图8所示,内核/用户态仅是传输必要的控制信息,大量的耗时数据直接在用户态传输。在采用上述方式之前,数据(Data)在用户态和内核态都要经过,访问速度收到较大影响
本发明不再对异构存储的卷进行抽象。而转交于直接使用卷本身进行对外映射,在接口层面进行统一转换,并利用SPDK的用户态协议栈进行存储IO路径的加速,使得不同存储协议的卷,在存储网关侧映射成统一的接口(综合表现为使用SPDK实现本发明中对应存储网关的功能)。让容器/裸机/虚拟机都可以进行使用。
为了达到这种使用方式,需要搭配本发明所提出的统一管理系统,一方面对异构存储进行统一的创卷和删卷管理;另一方面需要对本发明提出的存储网关进行控制,对卷进行同步映射。而由于异构存储中提供的协议不同,需要将协议进行相应的转换及抽象。因此在存储网关侧实现了虚拟通用存储层(在本发明各实施例中也被描述为虚拟通用存储设备),统一对设备进行相关的抽象,然后再通过虚拟scsi后端对外提供统一的接口。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1:
本发明实施例1提供了一种基于SPDK的存储网关的实现方法,在每一个提供卷的主机安装存储网关,通过统一管理系统对存储网关的连接访问来获取相应卷的读写操作,如图9所示,方法包括:
在步骤201中,统一管理系统接收创建卷的命令,通过所述存储网关在提供卷的主机上进行卷的创建,包括生成卷ID,记录卷的大小、卷的存储地址信息和卷的协议类型信息中的一项或者多项。其中,所述创建卷的命令来自用户操作或者其他平台API操作等等。
在步骤202中,当进行创建的卷挂载时,统一管理系统下发attach命令到各个存储网关,所述attach命令中包括存储的卷ID、卷的存储地址信息和卷的协议类型。
在步骤203中,当存储网关接收到挂载卷的attach命令时,调用SPDK库函数将物理存储的卷映射成虚拟通用存储设备,以及创建虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联;所述虚拟通用存储设备用于将不同物理存储的卷进行抽象成统一的设备。
其中,虚拟通用存储设备是SPDK内部设备的概念,为将不同的类型的卷抽象成统一的设备。类似图6中所示的,所述虚拟通用存储设备逻辑上存在于SPDK中,在SPDK中也被描述为bdev。
在步骤204中,存储网关下发attach命令给虚拟存储专用驱动之后,在所述虚拟存储专用驱动调用系统注册接口后,通过所述统一管理系统实现所述卷的呈现。例如卷的呈现表现为“/dev”和/或“/sdb”;其中,/sdb类似window系统中所呈现的C盘和D盘效果。
在步骤205中,建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道。
在本发明通过SPDK库对协议管理,可以对接不同的异构存储,对上抽象出一个相同的虚拟通用存储设备,为了满足虚拟机/容器/物理机对存储的统一使用方式,本发明中还提出了一种虚拟存储专用驱动,进行快存储的映射;另外还提出了一种虚拟存储专用作为虚拟scsi后端进程和虚拟存储专用驱动的通信媒介,进行数据的拷贝传输等。通过虚拟存储专用驱动,使得卷可以在物理机和容器上进行挂载。
在本发明实施例具体实现过程中,虚拟存储专用驱动可以是基于virtio驱动修改得到的。虚拟scsi后端进程是基于SPDK中的iscsi-target少量修改,主要适配本发明提出的与虚拟存储专用驱动的交互实现,不影响其原始基本功能。
SPDK是一个软件开发试用的开发库,本发明实施例的存储网关就是基于SPDK开发而成的。当存储网关收到统一管理系统下发attach命令后,首先就是调用SPDK,进行一个或者多个卷的映射成为bdev设备,即,先将物理存储的卷映射到成一个虚拟通用存储设备。再创建一个虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联。
作为本发明实施例较为完整实现场景的考虑,以及作为本发明实施例所提出方案复杂场景下的实现可能,结合本发明实施例还存在一种实现方案,当存储网关接收到挂载卷的命令时,所述方法还涉及一层判断处理,包括:
如果需要使用卷的主机为虚拟机,则无需做处理(直接通过使用虚拟scsi后端进程,完成相应物理存储生成的卷的使用),由虚拟机通过虚拟机监视器进程(例如开源软件qemu)进行卷的挂载,通过既有的vhost-scsi协议,提供虚拟卷给虚拟机使用;
如果需要使用卷的是非虚拟机,则执行所述的将物理存储的卷映射成虚拟通用存储设备,创建虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联;存储网关下发attach命令给虚拟存储专用驱动之后,在所述虚拟存储专用驱动调用系统注册接口后,通过所述统一管理系统实现所述卷的呈现;建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道的操作。(这一块只是一个使用的描述,意思是虚拟机场景就沿用原来的方式,非虚拟机场景需要使用本发明实施例所提出的实现方法。)
在本发明实施例实现过程中,若只有vhost-scsi-target是无法在客户态表现为裸机和容器场景下被统一管理系统直接使用的。需要如本发明实施中描述的通过虚拟存储专用驱动去系统注册的方式模拟出设备接口(例如/dev/sdb),才可以使用所述设备接口。如图10所示,虚拟存储专用驱动的实现,其至少包括virito接口、ioctl管理模块和ring通信;其中,virito接口:主要实现对接了vrito协议;ioctl管理模块:负责跟存储网关中的其他程序进行接口交互;ring通信:负责和虚拟scsi后端进程进行内存交换。需要说明的是,上述对应图10阐述的接口、模块仅仅是诸多可实现方式中的一种,由此能够推导出的等同实现方案均属于本发明的保护范围内。
因此,在本发明实施例中,针对上述步骤205中涉及的建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道,还给予了一种较为详尽的实现方式,如图11所示,具体包括:
在步骤2051中,attach命令下发给虚拟存储专用驱动时,通过所述attach命令传入socket地址;以便通过所述socket地址完成虚拟存储专用驱动和虚拟scsi后端进程之间的信令交互通道的建立。所述信令交互通道具体可以表现为是socket通道。
在步骤2052中,虚拟存储专用驱动通过所述socket地址向虚拟scsi后端进程询问共享内存地址。
在步骤2053中,虚拟存储专用驱动获取所述共享内存地址后,将所述共享内存地址进行记录;其中,记录所述共享内存地址用于进行内存共享时访问使用。
在具体实现过程中,虚拟存储专用驱动获取所述共享内存地址就是后面的ring环,具体是将所述共享内存地址的base地址进行记录;其中,记录所述共享内存地址和base地址是用于进行内存共享时,ring环访问使用。其中,base地址就是基准地址,后面就可以通过偏移量来进行ring环访问。
例如:虚拟存储专用驱动从共享内存获取一个内存页,用于初始化ring环,并将ring环地址发送给虚拟scsi后端进程,从而完成虚拟存储专用驱动和虚拟scsi后端进程建立关联关系。
作为本发明实施例使用场景的表现,在执行完上述步骤2051-2053建立了虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道后,用户通过所述第一设备进行数据写入时,如图12所示,所述方法还包括:
在步骤301中,用户进程,写入磁盘设备,然后通过虚拟存储专用驱动,将数据写入请求挂在ring环上,然后唤醒虚拟scsi后端进程。
其中,虚拟scsi后端进程循环的从ring环读取数据写入内容,提交到虚拟通用存储设备,然后调用SPDK中的存储驱动,通过存储协议发送给物理存储设备。
在步骤302中,物理存储设备响应后,SPDK中的存储驱动,会返回写入成功的信息,通过虚拟scsi后端进程将写入成功的信息放入ring环中。
在步骤303中,虚拟存储专用驱动返回成功信息,通过磁盘返回给用户进程,写入完成。
相应的,结合本发明实施例,在进行卷卸载时,如图13所示,方法还包括:
在步骤401中,统一管理系统下发detach命令到存储网关,所述detach命令中包括待进行卷卸载的卷ID。
在步骤402中,存储网关通过卷ID找到相关设备,下发detach命令给虚拟存储专用驱动。
在步骤403中,虚拟存储专用驱动停止接收用户的IO操作。
在步骤404中,虚拟存储专用驱动调用系统注销接口注销卷的呈现内容。
在步骤405中,虚拟存储专用驱动等待ring环上数据写入完成。
在步骤406中,虚拟存储专用驱动解除共享内存映射。
在步骤407中,虚拟存储专用驱动发送stop指令。
在步骤408中,虚拟scsi后端进程将共享内存进行回收。
在步骤409中,调用SPDK接口删除虚拟通用存储设备。
相应的,结合本发明实施例,在进行卷删除时,方法还包括:
统一管理系统接收到删除卷的命令,则调用物理存储API对卷进行删除;其中,若卷还未卸载,则先执行卷的卸载操作后,再执行卷的删除操作。
实施例2:
本发明实施例将通过关键的程序代码,阐述本发明实施例1在一些关键步骤上的具体实例内容表现。在本发明实施例中,如图14所示,虚拟存储专用驱动被表述为virtio-blk-user驱动;虚拟通用存储设备被表述为bdev;虚拟scsi后端进程被表述为vhost-scsi-target进程。
在控制节点搭建统一管理系统,该系统负责对异构存储及网关的统一管理。
在每一个需要使用卷的主机安装存储网关。该存储网关通过接受统一管理平台的管理,对物理设备的卷进行连接访问,并对裸机/容器/虚拟机提供统一接口进行访问。
卷的创建时步骤:
1统一管理系统接收到创建卷的命令调用物理存储API,在物理存储上进行卷的创建。生成卷ID,并记录卷大小,存储信息,协议类型信息。
卷ID | 容量 | 协议类型 | 存储地址 | 信息 |
当执行卷挂载时步骤如下:
统一管理系统下发attach命令到存储网关,包括存储的协议类型,存储地址信息,卷ID。
磁盘映射。当存储网关接收到挂载卷的命令时,调用SPDK接口创建bdev设备。此处会调用SPDK的原生脚本,例如:
创建Nvme0设备scripts/rpc.py bdev_nvme_attach_controller -b Nvme0 -tpcie -a 0000:01:00.0
创建vhost控制器target scripts/rpc.py vhost_scsi_controller_add_targetvhost.0 0 Nvme0n1
创建内存设备Malloc0 scripts/rpc.py bdev_malloc_create -b Malloc0 1284096
创建vhost-scsi-target控制器scripts/rpc.py vhost_create_scsi_controller--cpumask 0x1 vhost.0
将Malloc0绑定到vhost target scripts/rpc.py vhost_scsi_controller_add_target vhost.0 1 Malloc0
如果为虚拟机。如图14所示,需要先映射成bdev设备,然后由虚拟机通过qemu进行IO映射。
如果需要使用卷的是非虚拟机,则将磁盘挂载到本地。
例如scripts/rpc.py vhost_create_blk_user -patch /var/tmp/vhost.0
存储网关下发attach device命令给virtio-blk-user驱动,
该驱动调用系统注册接口,呈现设备例如/dev/sdb。
实施例3:
如图15所示,是本发明实施例的基于SPDK的存储网关的实现装置的架构示意图。本实施例的基于SPDK的存储网关的实现装置包括一个或多个处理器21以及存储器22。其中,图15中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图15中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例1中的基于SPDK的存储网关的实现方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行基于SPDK的存储网关的实现方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的基于SPDK的存储网关的实现方法,例如,执行以上描述的图9、图11、图12和图13所示的各个步骤。
值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于SPDK的存储网关的实现方法,其特征在于,在每一个提供卷的主机安装存储网关,通过统一管理系统对存储网关的连接访问来获取相应卷的读写操作,方法包括:
统一管理系统接收创建卷的命令,通过所述存储网关在提供卷的主机上进行卷的创建;
当进行创建的卷挂载时,统一管理系统下发attach命令到各个存储网关;
当存储网关接收到挂载卷的attach命令时,调用SPDK库函数将物理存储的卷映射成虚拟通用存储设备,以及创建虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联;所述虚拟通用存储设备用于将不同物理存储的卷进行抽象成统一的设备;
存储网关下发attach命令给虚拟存储专用驱动之后,在所述虚拟存储专用驱动调用系统注册接口后,通过所述统一管理系统实现所述卷的呈现;
建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道。
2.根据权利要求1所述的基于SPDK的存储网关的实现方法,其特征在于,所述卷的创建包括生成卷ID、记录卷的大小、卷的存储地址信息和卷的协议类型信息中的一项或者多项,则所述attach命令中包括存储的卷ID、卷的存储地址信息和卷的协议类型。
3.根据权利要求1所述的基于SPDK的存储网关的实现方法,其特征在于,当存储网关接收到挂载卷的命令时,所述方法还包括:
如果需要使用卷的主机为虚拟机,则执行所述的将物理存储的卷映射成虚拟通用存储设备,创建虚拟scsi后端进程;在虚拟机启动时,通过虚拟机监视器进程对所述虚拟通用存储设备进行IO映射;
如果需要使用卷的是非虚拟机,则执行所述的将物理存储的卷映射成虚拟通用存储设备,创建虚拟scsi后端进程;并将所述虚拟通用存储设备和虚拟scsi后端进程关联;存储网关下发attach命令给虚拟存储专用驱动之后,在所述虚拟存储专用驱动调用系统注册接口后,通过所述统一管理系统实现所述卷的呈现;建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道的操作。
4.根据权利要求1所述的基于SPDK的存储网关的实现方法,其特征在于,建立所述虚拟存储专用驱动与虚拟scsi后端进程的信令交互通道,具体包括:
attach命令下发给虚拟存储专用驱动时,通过所述attach命令传入socket地址;以便通过所述socket地址完成虚拟存储专用驱动和虚拟scsi后端进程之间的信令交互通道的建立;其中,所述信令交互通道具体为socket通道;
虚拟存储专用驱动通过所述socket地址向虚拟scsi后端询问共享内存地址;
虚拟存储专用驱动获取所述共享内存地址后,将所述共享内存地址进行记录;其中,记录所述共享内存地址用于进行内存共享时访问使用。
5.根据权利要求4所述的基于SPDK的存储网关的实现方法,其特征在于,用户通过第一设备进行数据写入时,所述方法还包括:
用户进程,写入磁盘设备,然后通过虚拟存储专用驱动,将数据写入请求挂在ring环上,然后唤醒虚拟scsi后端进程;其中,所述ring环在所述共享内存地址上生成;其中,所述磁盘设备为所述统一管理系统实现所述卷的呈现内容;
虚拟scsi后端进程循环的从ring环读取数据写入内容,提交到虚拟通用存储设备,然后调用SPDK中的存储驱动,通过存储协议发送给物理存储设备中对应的卷。
6.根据权利要求5所述的基于SPDK的存储网关的实现方法,其特征在于,方法还包括:
物理存储设备响应后,SPDK中的存储驱动,会返回写入成功的信息,通过虚拟scsi后端进程将写入成功的信息放入ring环中;
虚拟存储专用驱动返回成功信息,通过磁盘返回给用户进程,写入完成。
7.根据权利要求5所述的基于SPDK的存储网关的实现方法,其特征在于,所述虚拟存储专用驱动包括virito接口、ioctl管理模块和ring通信;其中,virito接口:主要实现对接了vrito协议;ioctl管理模块:负责跟存储网关中的其他程序进行接口交互;ring通信:负责和虚拟scsi后端进程进行内存交换。
8.根据权利要求1-7任一所述的基于SPDK的存储网关的实现方法,其特征在于,在进行卷卸载时,方法还包括:
统一管理系统下发detach命令到存储网关,所述detach命令中包括待进行卷卸载的卷ID;
存储网关通过卷ID找到相关设备,下发detach命令给虚拟存储专用驱动;
虚拟存储专用驱动停止接收用户的IO操作;
虚拟存储专用驱动调用系统注销接口注销卷的呈现内容;
虚拟存储专用驱动等待ring环上数据写入完成;
虚拟存储专用驱动解除共享内存映射;
虚拟存储专用驱动发送stop指令;
虚拟scsi后端进程将共享内存进行回收;
调用SPDK接口删除虚拟通用存储设备。
9.根据权利要求8所述的基于SPDK的存储网关的实现方法,其特征在于,在进行卷删除时,方法还包括:
统一管理系统接收到删除卷的命令,则调用物理存储API对卷进行删除;
其中,若卷还未卸载,则先执行卷的卸载操作后,再执行卷的删除操作。
10.一种基于SPDK的存储网关,其特征在于,所述存储网关包括:
至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,用于执行权利要求1-9任一所述的基于SPDK的存储网关的实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110476073.8A CN113242175B (zh) | 2021-04-29 | 2021-04-29 | 一种基于spdk的存储网关及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110476073.8A CN113242175B (zh) | 2021-04-29 | 2021-04-29 | 一种基于spdk的存储网关及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113242175A CN113242175A (zh) | 2021-08-10 |
CN113242175B true CN113242175B (zh) | 2022-03-25 |
Family
ID=77131693
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110476073.8A Active CN113242175B (zh) | 2021-04-29 | 2021-04-29 | 一种基于spdk的存储网关及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113242175B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114047888B (zh) * | 2022-01-17 | 2022-04-22 | 浪潮云信息技术股份公司 | 一种NVMe磁盘的挂载方法、设备及存储介质 |
CN115129365B (zh) * | 2022-06-29 | 2024-02-06 | 江苏安超云软件有限公司 | 基于ipsan实现应用程序可移植性的方法及应用 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213772A (zh) * | 2018-09-12 | 2019-01-15 | 华东师范大学 | 数据存储方法及NVMe存储系统 |
CN111722786A (zh) * | 2019-03-21 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 基于NVMe设备的存储系统 |
CN112347044A (zh) * | 2020-11-10 | 2021-02-09 | 北京赛思信安技术股份有限公司 | 一种基于spdk的对象存储优化方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11144488B2 (en) * | 2019-02-04 | 2021-10-12 | American Megatrends International, Llc | Techniques of sending alerts from storage services running on server san target |
US11748278B2 (en) * | 2019-06-20 | 2023-09-05 | Intel Corporation | Multi-protocol support for transactions |
US20200319812A1 (en) * | 2020-06-03 | 2020-10-08 | Intel Corporation | Intermediary for storage command transfers |
-
2021
- 2021-04-29 CN CN202110476073.8A patent/CN113242175B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213772A (zh) * | 2018-09-12 | 2019-01-15 | 华东师范大学 | 数据存储方法及NVMe存储系统 |
CN111722786A (zh) * | 2019-03-21 | 2020-09-29 | 阿里巴巴集团控股有限公司 | 基于NVMe设备的存储系统 |
CN112347044A (zh) * | 2020-11-10 | 2021-02-09 | 北京赛思信安技术股份有限公司 | 一种基于spdk的对象存储优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113242175A (zh) | 2021-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10628209B2 (en) | Virtual machine monitor to I/O stack conduit in virtual real memory | |
US8635616B2 (en) | Virtualization processing method and apparatuses, and computer system | |
US10120705B2 (en) | Method for implementing GPU virtualization and related apparatus, and system | |
US8073674B2 (en) | SCSI device emulation in user space facilitating storage virtualization | |
CN113242175B (zh) | 一种基于spdk的存储网关及其实现方法 | |
CN105183674B (zh) | Usb虚拟化网络映射方法、装置以及usb集线器 | |
CN110046026B (zh) | 云主机指定虚拟磁盘限速方法、计算设备及云平台 | |
US8447894B2 (en) | Upgrading an elastic computing cloud system | |
CN111309649B (zh) | 一种数据传输和任务处理方法、装置及设备 | |
CN111782318A (zh) | 远程挂载本地磁盘到云桌面虚拟机中共享访问系统及方法 | |
US9841985B2 (en) | Storage block deallocation in virtual environments | |
WO2022041507A1 (zh) | 3d渲染方法及系统 | |
WO2022143714A1 (zh) | 服务器系统、虚拟机创建方法及装置 | |
WO2012094303A1 (en) | Upgrading an elastic computing cloud system | |
CN117389694B (zh) | 基于virtio-blk技术提升虚拟存储IO性能的方法 | |
KR20200135715A (ko) | 데이터 처리 방법, 장치, 기기 및 매체 | |
WO2021223744A1 (zh) | 实现热迁移的方法、芯片、板卡和存储介质 | |
US10210007B2 (en) | Parallel mapping of client partition memory to multiple physical adapters | |
CN114461334A (zh) | 一种适合无线自组网中的边缘云迁移数据处理方法 | |
CN112202855A (zh) | 裸金属服务器与弹性块存储的通信装置、智能网卡和系统 | |
CN115576654B (zh) | 一种请求处理方法、装置、设备及存储介质 | |
CN111367472A (zh) | 虚拟化方法和装置 | |
CN115617270A (zh) | 一种数据处理器的虚拟化存储设备数据处理方法及装置 | |
CN108509155A (zh) | 一种远程访问磁盘的方法和装置 | |
CN113568714A (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 |