用户态存储系统数据交互的方法、装置及设备与流程

文档序号:14155839阅读:195来源:国知局

本发明涉及服务器存储系统领域,特别是涉及一种用户态存储系统数据交互的方法、装置、设备以及计算机可读存储介质。



背景技术:

随着计算机网络的发展,数据信息的价值越来越高。数据作为资产也越来越受到社会的重视,各种云计算中心,数据中心如雨后春笋,得到了巨大发展。然而随着数据中心的规模扩大,存储与服务器数量猛增,其中的数据访问、数据共享也变得更加频繁,由此带来了数据网络、存储性能提高的要求。

在传统的存储中大量的存储模块都是在内核态中实现,如网络驱动,fc(fibrechannel光纤网络通道)驱动、sas(serialattachedscsi)串行连接scsi)驱动等,使用内核态实现驱动,带来方便的同时,也带来了问题,特别是性能变得越来越力不从心。比如网络,随着访问量的剧增,使用传统的网络处理方式,在网卡接收到数据包以后需要产生大量的中断和多次拷贝,带来了数据访问性能的大量损失。

现有的存储系统中加载了大量的模块,这些模块有各种管理,访问控制的,还有各种外设的驱动等,特别是外设驱动以模块的形式加入内核,这些驱动需要处理大量的io,由此会带来大量的中断和数据拷贝,这在访问量较低的情况下,存储性能满足要求,但是在访问量大增以后,性能,时延变得越来越让人无法忍受。

综上所述可以看出,如何提高存储系统的io性能是目前有待解决的问题。



技术实现要素:

本发明的目的是提供一种用户态存储系统数据交互的方法、装置、设备以及计算机可读存储介质,已解决现有技术中的存储系统的io性能较低的问题。

为解决上述技术问题,本发明提供一种用户态存储系统数据交互的方法,包括:前端接发设备接收到实际数据时,将所述实际数据映射到存储系统预留的内存区域内,所述存储系统预留的内存区域被所有用户线程共享;在所述前端接发设备内生成包含指向实际数据存储区域的指针;通过用户线程传递所述包含指向实际数据存储区域的指针至后端存储设备,以便将所述实际数据映射并存储至所述后端存储设备上。

优选地,所述前端接发设备接收到实际数据,将所述实际数据映射到存储系统预留的内存区域内,所述存储系统预留的内存区域被所有用户线程共享包括:前端接发设备、后端存储设备通过dma与存储系统存放实际数据预留的内存区域建立内存映射;当所述前端接发设备接收到实际数据时,将所述实际数据dma到所述存储系统预留的内存区域内。

优选地,所述在所述前端接发设备内生成包含指向实际数据存储区域的指针包括:在所述前端接发设备接收到实际数据时,形成包含指向实际数据存储区域的指针的数据结构f,将所述数据结构f挂载至所述前端接发设备的接收环形队列中。

优选地,所述通过用户线程传递所述包含指向实际数据存储区域的指针至后端存储设备,以便将所述实际数据映射并存储至所述后端存储设备上包括:通过用户线程从所述前端接发设备的接收环形队列中获取所述数据结构f;依据预设处理规则以及所述数据结构f,生成包含指向实际数据存储区域的指针的数据结构n,并将所述数据结构n挂载至后端存储设备的发送环形队列中;在内存管理单元的管理下,将所述实际数据dma到所述后端存储设备,并存储所述实际数据至所述后端存储设备。

优选地,所述存储系统预留的内存区域在系统启动时被分割为连续、固定大小的内存小块,且所述前端接发设备的内存区域的被分割成的内存小块与所述存储系统预留的内存区域的内存小块大小相同。

本发明还提供了一种用户态存储系统数据交互的装置,包括:

映射模块,用于前端接发设备接收到实际数据时,将所述实际数据映射到存储系统预留的内存区域内,所述存储系统预留的内存区域被所有用户线程共享;

生成模块,用于在所述前端接发设备内生成包含指向实际数据存储区域的指针;

传递模块,用于通过用户线程传递所述包含指向实际数据存储区域的指针至后端存储设备,以便将所述实际数据映射并存储至所述后端存储设备上。

优选地,所述映射模块具体用于:前端接发设备、后端存储设备通过dma与存储系统存放实际数据预留的内存区域建立内存映射;当所述前端接发设备接收到实际数据时,将所述实际数据dma到所述存储系统预留的内存区域内。

优选地,所述生成模块具体用于:在所述前端接发设备接收到实际数据时,形成包含指向实际数据存储区域的指针的数据结构f,将所述数据结构f挂载至所述前端接发设备的接收环形队列中。

本发明还提供了一种用户态存储系统数据交互的设备,包括:

存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述一种用户态存储系统数据交互的方法的步骤。

本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述一种用户态存储系统数据交互的方法的步骤。

本发明所提供的一种用户态存储系统数据交互的方法、装置、设备以及计算机可读存储介质,当存储系统的前端接发设备接收到外部发送的实际数据时,所述前端接发设备将所述实际数据映射至存储系统预留存放实际数据的内存区域内,所述存储系统预留的内存区域被所有用户处理线程共享;在所述前端接发设备内形成包含实际数据存储地址的指针;所述存储系统的用户处理线程从所述前端接发设备获取所述指针,并传递所述包含实际数据存储地址的指针至后端存储设备,将所述存储系统预留的内存区域的所述实际数据映射至所述后端存储设备。根据上述方法、装置、设备以及计算机可读存储介质,实际用户数据产生以后,不管需要经过有多少进程进行处理,都不会对实际的用户数据进行拷贝,只会对实际的用户数据的指针进行传递;这样存储上的操作系统就可以从大量的数据拷贝无用功中解放出来,专注做相关处理,io实现主要由用户态完成,实现了零拷贝,提高了存储系统的io性能。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明所提供的用户态存储系统数据交互的方法的第一种具体实施例的流程图;

图2为本发明提供的使用san定义的存储系统的结构框架图;

图3为本发明所提供的用户态存储系统数据交互的方法的第二种具体实施例的流程图;

图4为本发明实施例提供的一种用户态存储系统数据交互的装置的结构框图。

具体实施方式

本发明的核心是提供一种用户态存储系统数据交互的方法、装置、设备以及计算机可读存储介质,提高了存储系统的io性能。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参考图1,图1为本发明所提供的用户态存储系统数据交互的方法的第一种具体实施例的流程图;具体操作步骤如下:

步骤s101:前端接发设备接收到实际数据时,将所述实际数据映射到存储系统预留的内存区域内,所述存储系统预留的内存区域被所有用户线程共享;

所述存储系统与外界设备进行数据交互主要通过相关接口卡,因此所述前端接发设备可以使用以太网、fc、ib(infiniband无线宽带技术)。

步骤s102:在所述前端接发设备内生成包含指向实际数据存储区域的指针;

步骤s103:通过用户线程传递所述包含指向实际数据存储区域的指针至后端存储设备,以便将所述实际数据映射并存储至所述后端存储设备上。

所述后端存储设备可以使用sas(serialattachedscsi串行连接scsi)、nvme等。

本实施例所涉及的软件定义存储主要面向san(storageareanetwork存储区域网络),即使用块的方式进行存储。由服务器端管理数据的组织,及其他相关的thinprovision,重删等功能,存储只专注数据的存储及数据的存储。因为本实施例的数据存储主要面向是san,只给服务器提供存储容量支持,就像服务器本地的磁盘一样,但是存储的容量可以通过各种网络实现多个服务共享。

由于存储简化了一些附属功能,可以根据专注的进行io,容量支持。这里的容量支持包括raid(磁盘阵列)、逻辑卷等的管理。所述io也主要是各种hba(主机总线适配器)卡、initiator、target等的支持,即实现数据能快速的进的来,快速地存下,也能快速地取得出,快速地传走。

如图2所示,本实施例所提供的存储系统的外设接口主要分为用户态和内存态,内核态的部分主要为用户态代码提供使用内核的相关接口,这些接口包括相关管理和工具两部分,内核态中的寄存器映射主要借助uio(userspacei/o)技术,将板卡硬件寄存器映射到用户态。用户态port数据接口部分,主要为各个端口实现接收数据的内存空间的管理;用户态的处理层主要是对数据包根据相关协议栈进行数据处理,包括接收线程和发送线程。

本具体实施例提出一种提高存储性能的解决方案,主要通过剥离存储中的相关特性到服务器,专注数据传输及数据存储等基本功能,以应对服务器对存储的高并发访问。实际用户数据产生以后,不管需要经过有多少进程进行处理,都不会对实际的用户数据进行拷贝,只会对实际的用户数据的指针进行传递;这样存储上的操作系统就可以从大量的数据拷贝无用功中解放出来,提高了存储系统的io性能。

请参考图3,图3为本发明所提供的用户态存储系统数据交互的方法的第二种具体实施例的流程图。

在上述实施例的基础上,本实施例选用fc卡作为前端接发设备,在fc卡接收到实际用户数据时,通过dma(directmemoryaccess直接内存访问)建立内存映射,即fc接收到实际用户数据后,dma会直接将fc卡的数据拷贝到预先分配的一块固定的用于接收和发送缓存的内存区域。

所述前端接发设备以及后端存储设备的内存区域选用环形队列方式管理,每种网卡都会有两个总的环形队列,一个用于发送,一个用于接收。所述环形队列中的每一项都为一个数据结构,环形队列具体数据结构如下:

以fc卡为例:当存储系统需要通过fc卡发送数据时,相关线程会首先将数据存储到fc卡的这个总的环形队列中,将数据发送到该环形队列中的用户线程可以看成是生产者,因为存储中可能有多个线程需要通过fc卡发送数据,所以看成多生产者,fc卡发送线程会一直轮询该总的环形队列,是否有数据发送,如果有,立即将数据取走,并进行发送,此时的fc卡发送线程一般可以看成是消费者。这是一种多生产者单消费者情形。

当接收数据时,fc接收线程会将数据发到总的接收环形队列,存储的处理线程(可能包括scsi,nvme等接收线程)也会轮询总的接收环形队列,是否有数据接收,如有就接收。这里的fc接收线程可以看成是生产者,而存储用户处理线程可以看成是消费者,这是一个单生产者多消费者的情形。

本实施例的具体操作步骤如下:

步骤s301:fc卡接收到实际数据,将实际数据dma到存储系统预留的内存区域;

所述存储系统预留的内存区域在系统启动时被分割为连续、固定大小的内存小块,且所述前端接发设备的内存区域的被分割成的内存小块与所述存储系统预留的内存区域的内存小块大小相同。为了实现整个数据处理过程不需要进行实际数据拷贝,预留存放实际数据的存储内存区域将被所有线程共享,同时所有的接口卡都能对这块区域进行dma操作。所有卡对这块区域进行操作的时候,相关同步,管理有mmu(memorymenagerieunit内存管理单元)硬件完成。

步骤s302:形成包含指向实际用户存储区域的指针的数据结构f,并将所述数据结构f挂载至总的fc卡的接收环形队列上;

步骤s303:相关存储中的用户处理线程从总的fc卡的接收环形队列中获取所述数据结构f;

步骤s304:对所述数据结构f进行处理,形成包含指向实际数据存储区域的指针的数据结构n;

为了实现实际用户数据不进行拷贝,只进行指针传递思想,所有与实际用户数据有关的数据结构当中都有一个成员——指向实际数据区域的指针。

步骤s305:将所述数据结构n挂载至所述nvme卡的发送环形队列中;

步骤s306:在内存管理单元的管理下,将所述实际数据dma到所述nvme卡,并存储所述实际数据至所述nvme固态盘上。

在本实施中,由于环形队列中保存的是存放实际数据的相关数据结构的指针,数据发送到环形队列和从环形队列里接收数据只是将相关数据结构的指针进行转移,并不引起实际数据的拷贝。引起数据拷贝的情形只有两种,一种是:fc卡发送线程从环形队列中取数据发送,数据会通过dma通道重内存拷贝到fc卡的相关内存区域。另一种是:fc卡接收到数据,fc卡接收线程通过dma将数据从fc中拷贝到内存中。

实际的用户数据产生以后,不管需要经过有多少进程进行处理,都不会对实际的用户数据进行拷贝,只会对实际的用户数据的指针进行传递。这样存储上的操作系统就可以从大量的数据拷贝无用功中解放出来,专注做相关处理,整个数据从接收到落盘都相对现在的存储简单很多。本实施例所提供的存储管理系统,将实际用户数据指针和整个接收或发送数据的指针进行独立,以便数据处理时用户指针传递方便,全部存储用户数据的内存区域进行预留,并实现所有接口卡都能对该存储区域进行dma操作,其io实现主要由用户态完成,实现了零拷贝,可提高存储的io性能,提高了存储相关竞争力。

请参考图4,图4为本发明实施例提供的一种用户态存储系统数据交互的装置的结构框图;具体装置可以包括:

映射模块100,用于前端接发设备接收到实际数据时,将所述实际数据映射到存储系统预留的内存区域内,所述存储系统预留的内存区域被所有用户线程共享;

生成模块200,用于在所述前端接发设备内生成包含指向实际数据存储区域的指针;

传递模块300,用于通过用户线程传递所述包含指向实际数据存储区域的指针至后端存储设备,以便将所述实际数据映射并存储至所述后端存储设备上。

本实施例的用户态存储系统数据交互的装置用于实现前述的用户态存储系统数据交互的方法,因此用户态存储系统数据交互的装置中的具体实施方式可见前文中的用户态存储系统数据交互的方法的实施例部分,例如,映射模块100,生成模块200,传递模块300,分别用于实现上述用户态存储系统数据交互的方法中步骤s101,s102和s103,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。

本发明具体实施例还提供了一种用户态存储系统数据交互的设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述一种用户态存储系统数据交互的方法的步骤。

本发明具体实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述一种用户态存储系统数据交互的方法的步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的用户态存储系统数据交互的方法、装置、设备以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1