数据处理的方法、设备和服务器与流程

文档序号:20009110发布日期:2020-02-22 03:53阅读:274来源:国知局
数据处理的方法、设备和服务器与流程

本申请涉及服务器领域,并且更具体地,涉及数据处理的方法、设备和服务器。



背景技术:

在虚拟化场景中,虚拟机上的虚拟化输入/输出设备(virtualinput/outputdevice,virtio)可以通过下述方式实现:

全虚拟化(fullvirtualization)方式,这种方式通过虚拟机监控器(virtualmachinemonitor,vmm)来模拟virtio实现,vmm会截获虚拟机发起的i\o请求,并通过软件模拟真实的硬件。vmm必须处理所有虚拟机发起的i\o请求,然后将所有的io请求序列化为可以被底层硬件处理的单一i\o流。

当虚拟机中的virtio发起i\o请求时,虚拟机与虚拟机所在服务器之间会频繁地发生内核态与用户态切换等涉及上下文切换的操作,对i\o性能的影响较大。

此外,当vmm模拟多个virtio时,虚拟机所在服务器中的中央处理器(centralprocessingunit,cpu)的开销增大,性能降低。



技术实现要素:

本申请提供一种数据处理的方法,该方法能够优化i/o路径,提高虚拟化i/o性能。

第一方面,提供了一种数据处理的方法,该方法包括:服务器中的设备获取虚拟机发送的第一输入输出i/o请求,该设备通过高速串行计算机扩展标准pcie总线连接该服务器,该虚拟机运行在该服务器上,该设备向该服务器提供多个虚拟功能vf,该第一i/o请求为该虚拟机针对该多个vf中的任意一个vf发起的,该第一i/o请求包括读操作或写操作,该读操作用于对该服务器的i/o设备执行读取数据操作,该写操作用于对该服务器的i/o设备执行写入数据操作,该vf用于管理该虚拟机的存储空间;该设备根据该第一i/o请求,从该服务器的i/o设备中读取或写入数据。

在本申请中,通过将服务器中处理器处理的i/o业务卸载至设备,由该设备完成i/o处理过程,设备向服务器呈现为虚拟化输入/输出控制器,由该设备提供i/o资源供虚拟机使用,虚拟机直接向设备发起i/o请求,由设备处理该i/o请求。本申请的数据处理的方法能够优化i/o处理过程,降低服务器的处理器的负载,由设备直接处理虚拟机的i/o请求也进一步提高了虚拟化i/o性能。

在一种可能的实现方式中,该设备获取该虚拟机发送的第一i/o请求,包括:该设备从该第一队列获取第一描述符,该第一描述符为该虚拟机中的前端驱动对该第一i/o请求处理后生成的,该第一描述符用于指示该第一i/o请求在该服务器的内存中的存储位置,该第一队列存储至为该服务器的内存,该第一队列用于存储包括该第一i/o请求在内的多个i/o请求的描述符;该设备根据该第一描述符,从该服务器的内存中获取该第一i/o请求。

在另一种可能的实现方式中,该设备包括描述符预取引擎与直接内存访问dma引擎与存储器,该设备从该服务器为第一队列分配的存储空间中获取第一描述符,包括:该描述符预取引擎生成第二描述符,并将该第二描述符发送至该dma引擎,该第二描述符用于指示该第一描述符在该服务器为该第一队列分配的存储空间中的存储位置;该dma引擎根据该第二描述符,通过dma的方式从该第一队列分配的存储空间中获取该第一描述符,并将该第一描述符存储至该设备的存储器中。

通过描述符预取引擎实现自动从服务器中获取描述符,当服务器中的虚拟机发起i/o请求,且由前端驱动通知设备服务器中有新的描述符可用时,描述符预取引擎则会自动从服务器中将描述符搬运至设备的本地内存中,从而加快i/o请求处理的速度。

在另一种可能的实现方式中,该设备包括中断产生模块与后端驱动,该设备根据该第一描述符,从该服务器的内存中获取该第一i/o请求,包括:该后端驱动处理该中断产生模块发起的中断请求,从该存储器中获取该第一描述符,并将该第一描述符发送至该dma引擎;该dma引擎根据该第一描述符,通过dma的方式从该服务器的内存中获取该第一i/o请求。

在另一种可能的实现方式中,该设备还包括i/o设备引擎,该设备根据该第一i/o请求从该服务器的i/o设备中读取或写入数据,包括:当该第一i/o请求为该读操作时,该后端驱动根据该第一i/o请求,生成读数据报文,该读数据报文用于指示待读取的目标数据在该i/o设备中的存储位置,该读数据报文还用于指示读取到的该目标数据在该设备的存储器中的存储位置;该后端驱动通过该i/o设备引擎向该i/o设备发送该读数据报文;该后端驱动通知该dma引擎将存储在该设备的存储器中的该目标数据存储至该服务器的内存中。

在另一种可能的实现方式中,该设备根据该第一i/o请求从该服务器的i/o设备中读取或写入数据,包括:当该第一i/o请求为该写操作时,该dma引擎从该服务器的内存中获取待写入i/o设备的目标数据,并将该目标数据写入该设备的存储器中;该后端驱动根据该第一i/o请求,生成写数据报文,该写数据报文用于指示该目标数据在该存储器中的存储位置,该写数据报文还用于指示将该目标数据存储至该i/o设备的存储位置;该后端驱动向该i/o设备发送该写数据报文。

在另一种可能的实现方式中,该方法还包括:在该第一i/o请求处理完成之后,该后端驱动通过该dma引擎向该服务器发送中断请求,该中断请求用于该服务器确定该设备对该第一i/o请求的处理结果。

第二方面,提供了一种数据处理的设备,该数据处理的设备配置于服务器中,该设备通过高速串行计算机扩展标准pcie总线连接服务器,该数据处理的设备用于执行上述第一方面或第一方面的任一可能的实现方式中的方法。

第三方面,提供一种服务器,该服务器中配置有第二方面提供的数据处理的设备,该设备通过高速串行计算机扩展标准pcie总线连接服务器。

第四方面,提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行第一方面或第一方面的任一可能的实现方式中的方法。

第五方面,提供一种包含指令的计算机程序产品,当该指令在计算机上运行时,使得计算机执行第一方面或第一方面的任一可能的实现方式中的方法。

附图说明

图1是本发明实施例提供的虚拟机系统的示意性框图。

图2是本发明实施例提供的数据处理的设备的示意性框图。

图3为本发明实施例提供的数据处理的方法的示意性流程图。

图4为本发明实施例提供的数据处理的设备的另一示意性框图。

具体实施方式

下面将结合附图,对本发明实施例中的技术方案进行描述。

图1示出了本发明实施例提供的服务器100的示意性框图。该服务器100上运行有至少一个虚拟机101,每个虚拟机101中配置有前端驱动1011,此外,该服务器100中还配置有一个用于数据处理的设备102,该设备102通过高速串行计算机扩展标准(peripheralcomponentinterconnectexpress,pcie)总线与服务器100之间进行通信。其中,数据处理的设备102用于对来自虚拟机的i/o请求进行处理,该i/o请求包括读操作或写操作。

需要说明的是,本发明实施例中的设备102可以支持与基于虚拟化输入/输出(virtuali/o,virtio)协议开发的前端驱动进行通信,即,本发明实施例中的前端驱动1011可以是基于virtio协议开发的。其中,基于virtio协议开发的前端驱动的通用性强,不需要随着服务器100的内核版本的改变而改变,维护成本低。

设备102在具体实现时可以为片上系统(systemonchip,soc),该soc可以是一张单独的pcie卡,该pcie卡可以部署在服务器100上,也可以直接和服务器100主板集成在一起。

下面结合图2对本发明实施例提供的数据处理的设备102进行简单介绍。

如图2所示,该设备102包括控制器1021、寄存器1022、描述符预取引擎1023、后端驱动1024、直接内存访问(directmemoryaccess,dma)引擎1025、中断产生模块1026、i/o设备引擎1027与存储器1028。

在本发明实施例中,设备102可以将与该设备102通过i/o设备引擎1027连接的i/o设备的一个物理功能(physicalfunction,pf)通过硬件虚拟化(例如,单根输入输出虚拟化(singlerooti/ovirtualization,sr-iov)的方式向服务器100呈现多个虚拟功能(virtualfunction,vf),任意两个vf之间是相互隔离的,将该多个vf分配给多个虚拟机使用,每个虚拟机可以分配一个或多个vf。

例如,与设备102通过i/o设备引擎1027连接的i/o设备为存储设备,设备102向服务器100呈现256个vf,每个vf可以负责管理存储设备中的一块存储空间,此时,该256个vf对虚拟机而言则相当于256个存储控制器,256个vf总共可以使用1024个队列(queue)。

举例说明,该存储设备可以为固态硬盘(solidstatedrives,ssd)。关于队列的说明请见下文中的描述。

需要说明的是,本发明实施例中的设备102还可以通过i/o设备引擎1027与网络设备连接(例如,pcieswitch),例如,设备102向服务器100呈现100个vf,此时,该100个vf对虚拟机而言相当于100个网络控制器。

此外,服务器100中还包括设备驱动103,服务器100中的处理器(图1中未示出)通过执行设备驱动103中的指令,从而对设备102的工作模式进行配置。所谓对设备102的工作模式进行配置,是指对设备102向服务器100呈现的多个vf中可用的vf的数量以及为每个vf分配的队列的数量进行配置。

如果需要在服务器100中使用设备102,则需要服务器100中的处理器执行设备驱动103中的指令,从而完成对设备103的工作模式的配置。例如,服务器100中的处理器执行设备驱动103中的指令,配置256个vf中存在50个vf对虚拟机可用,并且配置每个vf可以使用4个队列。

每个vf会对应多个数据结构,设备102会在其内存空间中划分出多个存储空间,每个存储空间用于存储一种数据结构,该多个存储空间可以属于一个基地址寄存器(baseaddressregister,bar)空间,或者,每个存储空间也可以作为一个bar空间使用,其中,每个bar空间会被分配一个索引号。例如,设备102将公共配置能力(commonconfigurationcapability)数据结构、通知能力(notificationcapability)数据结构均存储在索引号为1的bar空间中。

寄存器1022为设备102的配置空间,将该配置空间划分为多个配置子空间,将每个配置子空间作为一个vf的配置空间分配给该vf使用,每个vf的配置空间包括存储有设备id(deviceid)、厂商id(vendorid)、多个基地址(baseaddress)字段、bar空间索引号字段、多个偏移(offset)量字段以及多个存储长度(length)字段。

设备102在将数据结构存储至为该数据结构分配的bar空间时,会将该数据结构在bar空间中占据的存储空间的起始地址相对于bar空间的起始地址的偏移量写入相应的偏移量字段,并将该数据结构在bar空间中占据的存储空间的长度写入相应的存储长度字段。例如,设备102将公共配置能力数据结构存储在索引号为1的bar空间,该数据结构在索引号为1的bar空间中占据的存储空间的起始地址相对于bar空间的起始地址的偏移量为10字节,该数据结构在bar空间中的存储长度为100字节,设备102将通知能力数据结构存储在索引号为1的bar空间,该数据结构在索引号为1的bar空间中占据的存储空间的起始地址相对于bar空间的起始地址的偏移量为110字节,该数据结构在bar空间中的存储长度为50字节,则设备102分别将公共配置能力数据结构与通知能力数据结构在索引号为1的bar空间中对应的偏移量与存储长度写入相应的vf的配置空间中。

其中,公共配置能力结构中包括为该vf分配的队列数量(num_queues)字段队列深度(queue_size)字段、队列使能(queue_enable)位。

需要说明的是,vf的各个数据结构是由虚拟化输入/输出(virtuali/o,virtio)协议规定好的,即vf的各个数据结构中的哪些字段用于存储什么内容,均是由virtio协议进行定义的。

应理解,在本发明实施例中,控制器1021可以是cpu,还可以是其他通用处理器、soc、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。

存储器1028可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。该存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledatadatesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。

服务器100在使用设备102处理来自虚拟机的i/o请求之前,除了需要服务器100中的处理器执行设备驱动103中的指令外,还需要前端驱动1011完成对设备102的初始化,下面对前端驱动1011对设备102进行初始化的过程进行介绍。

(1)前端驱动1011将设备102中存储各个数据结构的bar空间映射至服务器100的内存空间。

在服务器100上电时,服务器100会在其内存空间中划分出多个存储空间,并将该多个存储空间与设备102中的多个bar空间之间建立映射关系,并将为每一个bar空间在服务器100的内存空间中分配的存储空间的首地址写入相应的基地址字段,例如,将为索引号为0的bar空间分配的存储空间的首地址写入索引号为0的基地址字段。

前端驱动1011加载后根据设备id(deviceid)、厂商id便可探测到设备102,当前端驱动1011需要对设备102中的某个vf的bar空间中存储的数据结构进行访问时,便可以根据该vf的配置空间中的存储的bar空间的索引号,通过与该bar空间的索引号相同的基地址字段,在服务器100的内存空间中找到为该bar空间分配的存储空间的首地址,再根据该vf的配置空间中存储的偏移量字段与存储长度字段,在为该bar空间分配的存储空间中确定待访问的数据结构的存储区域,从而以访问服务器100内存的方式实现对设备102中的bar空间的访问。

(2)前端驱动1011向设备102发起复位操作。

前端驱动1011首先会对设备102进行复位以确保历史信息清空,此时控制器1021中的硬件逻辑会感知这步操作,并将公共配置能力数据结构以及通知能力数据结构中的各个字段进行复位。

(3)前端驱动1011获取i/o设备特征。

virtio协议中定义了一连串的特征位来标识设备和驱动的能力,例如,如果i/o设备设备为网卡,则特征可以用于标识该网卡是否支持校验和卸载功能。

前端驱动1011会获取i/o设备的特征,设备特征(device_feature)在公共配置能力数据结构中,字段长度为4字节。在成功获取i/o设备的设备特征后,前端驱动1011本身也有一个支持的驱动特征集合,前端驱动1011会将从公共配置能力数据结构中获取的设备特征与自身的特征进行交集,并将取交集后的特征作为前端驱动1011支持的特征写入公共配置能力数据结构中的驱动特征(driver_feature)字段,从而将该驱动特征作为最终与设备102协商好的特征告知设备102。

(4)前端驱动1011逐一使能队列

前端驱动1011会在服务器100的内存空间中为各个vf的每个队列分配一块存储空间,每一块存储空间用于存储虚拟机针对相应vf发起的多个i/o请求对应的描述符、待处理的i/o请求的数量avail_idx、待处理的i/o请求的多个描述符中的第一个描述符的索引avail_entry[i].index、已经处理完成的i/o请求的数量used_idx以及已经处理完成的i/o请求多个描述符中的第一个描述符的索引used_entry[i].index,其中,i为i/o请求的索引号。关于描述符的说明请见下文中描述。

公共配置能力数据结构中存储有为队列分配的存储空间中存储描述符区域的首地址queue_desc、存储待处理的i/o请求的数量avail_idx的区域的首地址queue_avail、存储已经处理完成的i/o请求的数量used_idx的区域的首地址queue_used。此外,公共配置能力数据结构中还存储有队列选择(queue_select)字段,通过将该queue_select字段置为队列的索引号,代表公共配置能力数据结构中的各个字段属于queue_select字段所指示的队列。

前端驱动1011通过将公共配置能力数据结构中的queue_select字段置为不同队列的索引号,从而对属于各个队列的queue_desc、queue_avail以及queue_used分别进行配置,配置完成之后,前端驱动1011便可以将某个队列的公共配置能力数据结构中的队列使能(queue_enable)字段置为1,代表将该队列使能,即代表服务器100为该队列分配的内存空间可以被使用。

此外,前端驱动1011也会根据i/o设备支持的msi-x中断的个数,在服务器100中为每个队列注册msi-x中断。

下面对描述符进行简单介绍。

在本发明实施例中,虚拟机针对每个vf发出的i/o请求首先会被前端驱动1011获取,前端驱动1011会将i/o请求封装为描述符,并将描述符存储至为相应vf的队列分配的存储空间中。

描述符用于描述i/o请求,描述符的结构可以为:地址+长度+标志+next,next用于描述与该描述符在逻辑上相邻的下一个描述符的索引号,每个描述符的大小为16字节。例如,将一个i/o请求划分为8个片段,每个片段包括100字节,则该8个片段对应8个描述符,每个描述符用于指示一个片段在服务器100的内存中存储的地址,存储的长度、该片段的读\写标志以及与该描述符在逻辑上相邻的下一个描述符的索引号。

此外,为队列分配的存储空间中除了存储i/o请求对应的多个描述符外,还会存储虚拟机发起的待处理的i/o请求的数量avail_idx与该i/o请求的多个描述符中的第一个描述符的索引号avail_entry[i].index,i代表请求的索引号,待处理的i/o请求的数量avail_idx与i/o请求的多个描述符中的第一个描述符的索引号avail_entry[i].index在该存储空间中的存储位置是相邻的。其中,待处理的i/o请求的数量avail_idx会随着虚拟机发起的i/o请求的数量的增加而相应增加。

例如,待处理的i/o请求的索引号i=1,该i/o请求在索引号为2的队列中,设备102可以根据索引号为2的队列的公共配置能力数据结构中存储的queue_avail,在服务器100中为该队列分配的存储空间中首先找到该i/o请求的第一个描述符的索引号avail_entry[1].index,再根据公共配置能力数据结构中存储的queue_desc与该i/o请求的第一个描述符的索引号avail_entry[1].index,在该存储空间中找到该i/o请求的第一个描述符,再根据该i/o请求的第一个描述符中的next字段,获取属于该i/o请求的其他描述符,并根据获取到的多个描述符,处理该i/o请求。关于设备102处理i/o请求的具体过程请见下文中描述。

下面,结合图1中的虚拟机系统100以及图2中的设备102,以该i/o设备为存储设备为例对本发明实施例提供的数据处理的方法200进行说明。图3示出了方法200的示意性流程图,该方法至少包括以下步骤。

201,服务器100中的设备获取虚拟机发送的第一输入输出i/o请求,该设备通过高速串行计算机扩展标准pcie总线连接该服务器100,该虚拟机运行在该服务器100上,该设备向该服务器100提供多个虚拟功能vf,该第一i/o请求为该虚拟机针对该多个vf中的任意一个vf发起的,该第一i/o请求包括读操作或写操作,该读操作用于对该服务器100的i/o设备执行读取数据操作,该写操作用于对该服务器100的i/o设备执行写入数据操作。

具体地,服务器100上运行的虚拟机可以针对设备102提供的某一个vf发起i/o请求(例如,第一i/o请求),该i/o请求可以为读操作或写操作,读操作用于对该服务器100的i/o设备执行读取数据操作,写操作用于对该服务器100的i/o设备执行写入数据操作。

202,设备根据该第一i/o请求,从该服务器100的i/o设备中读取或写入数据。

具体地,设备102首先获取虚拟机的i/o请求,如果该i/o请求为读操作,则设备102根据该i/o请求,对服务器100的i/o设备执行读取数据操作;或者,如果该i/o请求为写操作,则设备102根据该i/o请求,对该服务器100的i/o设备执行写入数据操作。

可选地,设备获取该虚拟机发送的第一i/o请求,包括:设备从第一队列获取第一描述符,该第一描述符为该前端驱动对该第一i/o请求处理后生成的,该第一描述符用于指示该第一i/o请求在该服务器100的内存中的存储位置,该第一队列存储至该服务器100的内存,该第一队列用于存储包括该第一i/o请求在内的多个i/o请求的描述符;设备根据该第一描述符,从该服务器100的内存中获取该第一i/o请求。

具体地,当虚拟机发出该i/o请求后,该i/o请求首先被前端驱动1011获取,前端驱动1011将该i/o请求封装为多个描述符(例如,第一描述符)。

前端驱动1011根据该i/o请求中携带的读取数据的目的地址或写入数据的目的地址,确定该目的地址属于i/o设备的哪一块存储空间,并根据确定的存储空间进一步确定该存储空间所对应的vf(即,确定处负责管理该存储空间的vf),将生成的多个描述符存储至服务器100为该vf的某一个队列(例如,第一队列)分配的存储空间中。

设备102从服务器100为该队列分配的存储空间中获取该i/o请求的多个描述符,并根据该多个描述符,从服务器100的内存中获取该i/o请求。

需要说明的是,服务器100为每个队列分配的存储空间为服务器100的内存中的部分存储空间。

接下来,对设备102从服务器100的内存中获取第一i/o请求的第一描述符的方法以及设备102根据该第一描述符,从服务器100的内存中获取该第一i/o请求的方法分别进行说明。

该设备从该服务器100为第一队列分配的存储空间中获取第一描述符,包括:该描述符预取引擎生成第二描述符,并将该第二描述符发送至该dma引擎,该第二描述符用于指示该第一描述符在该服务器100为该第一队列分配的存储空间中的存储位置;该dma引擎根据该第二描述符,通过dma的方式从该第一队列获取该第一描述符,并将该第一描述符存储至该设备102的存储器1028中。

具体地,在前端驱动1011将该i/o请求的多个描述符存储至服务器100为该队列分配的存储空间中后,前端驱动1011会对属于该队列的通知能力数据结构进行操作,例如,前端驱动1011在通知能力数据结构中的notify字段中写入该队列的索引号(例如,索引号为2),描述符预取引擎1023中的硬件逻辑会感知该操作,从而通知描述符预取引擎1023该vf的索引号为2的队列中有新的描述符更新事件。

描述符预取引擎1023对索引号为2的队列的公共配置能力数据结构进行查看,从中获取服务器100中为该队列分配的存储空间中存储描述符区域的首地址queue_desc、存储待处理的i/o请求的数量avail_idx的区域的首地址queue_avail,进而在服务器100分配给该队列的存储空间中定位到存储描述符的区域与存储待处理的i/o请求的数量的区域。

例如,该队列的存储空间中存储的待处理的i/o请求的数量为10,设备102本次处理的为索引号为6的i/o请求,描述符预取引擎1023根据该存储空间中存储的索引号为6的i/o请求的多个描述符中的第一个描述符的索引号avail_entry[6].index与存储描述符区域的首地址queue_desc,从该存储空间中找到索引号为6的i/o请求的第一个描述符,再根据该第一个描述符中的next字段,在该存储空间中找到属于索引号为6的i/o请求的其他描述符。

描述符预取引擎1023可以针对在该存储空间中定位到的索引为6的i/o请求的多个描述符,生成多个dma搬运描述符(例如,第二描述符),dma搬运描述符的结构可以为:地址+长度,即描述符预取引擎1023针对多个描述符中的每个描述符,生成一个dma搬运描述符,每个dma搬运描述符中包括相应描述符在该存储空间中的存储位置(例如,起始地址与结束地址)与存储的长度。

描述符预取引擎1023将生成的多个dma搬运描述符提供给dma引擎1025,由dma引擎1025从服务器100中的该存储空间中获取索引号为6的i/o请求的多个描述符,并将该多个描述符存储至设备102的存储器1028中。

通过描述符预取引擎实现自动从服务器中获取描述符,当服务器中的虚拟机发起i/o请求,且由前端驱动通知设备服务器中有新的描述符可用时,描述符预取引擎则会自动从服务器中将描述符搬运至设备的本地内存中,从而加快i/o请求处理的速度。

设备根据该第一描述符,从该服务器100的内存中获取该第一i/o请求,包括:后端驱动处理该中断产生模块发起的中断请求,从该存储器中获取该第一描述符,并将该第一描述符发送至该dma引擎;dma引擎根据该第一描述符,通过dma的方式从该服务器100的内存中获取该第一i/o请求。

具体地,在dma引擎1025将索引号为6的i/o请求的多个描述符全部存储至存储器1028中后,描述符预取引擎1023通过中断产生模块1026向设备102中的处理器(图2中未示出)发送中断请求,由于后端驱动1024已经提前将中断处理回调函数注册至设备102中的处理器中,因此,当设备102中的处理器处理dma引擎1025发起的中断请求时,会进入后端驱动1024的处理逻辑。此时,后端驱动1024会从存储器1028中获取索引号为6的i/o请求的多个描述符,并将该多个描述符发送至dma引擎,dma引擎根据该多个描述符,从服务器100的内存中获取虚拟机发起的索引号为6的i/o请求。

通过本发明实施例中将服务器中处理器处理的i/o业务卸载至设备,由该设备完成i/o处理过程,设备向服务器呈现为虚拟化输入/输出控制器,由该设备提供i/o资源供虚拟机使用,虚拟机直接向设备发起i/o请求,由设备处理该i/o请求,相对于由vmm处理虚拟机发起的i/o请求,该方法能够优化i/o处理过程,降低服务器的处理器的负载,由设备直接处理虚拟机的i/o请求也进一步提高了虚拟化i/o性能。

当设备102从服务器100的内存中获取第一i/o请求后,可以根据第一i/o请求的类型,对该第一i/o请求进行处理。例如,当该第一i/o请求的类型为读操作时,设备102对该服务器100的i/o设备执行读取数据操作;当该第一i/o请求的类型为写操作时,设备102对该服务器100的i/o设备执行写入数据操作。

下面对设备102处理i/o请求的过程分场景(例如,写操作场景或读操作场景)进行说明。

场景1:设备根据该第一i/o请求从该服务器100的i/o设备中读取或写入数据,包括:当该第一i/o请求为该读操作时,该后端驱动根据该第一i/o请求,生成读数据报文,该读数据报文用于指示待读取的目标数据在该i/o设备中的存储位置,该读数据报文还用于指示读取到的该目标数据在该设备102的存储器1028中的存储位置;该后端驱动通过该i/o设备引擎向该i/o设备发送该读数据报文;该后端驱动通知该dma引擎将存储在该设备102的存储器1028中的该目标数据存储至该服务器100的内存中。

具体地,当该i/o请求为读操作时,后端驱动1024将该i/o请求转换为符合设备102与i/o设备之间进行传输的读数据报文,例如,该i/o设备为网卡,则该读数据报文的格式符合设备102与网卡之间的网络传输所需的报文格式。

该读数据报文中包括待读取的目标数据在i/o设备中的存储位置以及将读取到的数据存储至存储器1028中的存储位置,i/o设备根据该读数据报文,从自身内存中读取该目标数据,并将读取到的目标数据通过i/o设备引擎1027存储至存储器1028中。

在i/o设备将从自身内存读取的目标数据存储至存储器1028中后,便会通知后端驱动1024数据已存储至存储器1028中,后端驱动1024再通知dma引擎1025,由dma引擎1025从存储器1028中获取读取到的目标数据,并将该目标数据写入服务器100内存中的该i/o请求所指示的存储空间。

场景2:设备根据该第一i/o请求从该服务器100的i/o设备中读取或写入数据,包括:当该第一i/o请求为写操作时,该dma引擎从该服务器100的内存中获取待写入i/o设备的目标数据,并将该目标数据写入该设备102存储器1028中;该后端驱动根据该第一i/o请求,生成写数据报文,该写数据报文用于指示该目标数据在该存储器中的存储位置,该写数据报文还用于指示将该目标数据存储至该i/o设备的存储位置;该后端驱动向该i/o设备发送该写数据报文。

具体地,当该i/o请求为写操作时,后端驱动1024根据该i/o请求,首先通过dma引擎1025从服务器100中获取待写入i/o设备的目标数据,由dma引擎1025将获取到的目标数据存储存储器1028中。

后端驱动1024将该i/o请求转换为符合设备102与i/o设备之间进行传输的写数据报文,该写数据报文中包括目标数据存储在存储器1028中的存储位置,该写数据报文还包括将该目标数据写入i/o设备时,该数据在i/o设备中的存储位置。

i/o设备根据写数据报文,首先通过i/o设备引擎1027从存储器1028中获取待写入的目标数据,并将该目标数据写入写数据报文所指示的i/o设备中的存储空间。

针对场景1与场景2,当索引号为6的i/o请求处理完成之后,后端驱动1024向服务器100中的处理器(图1中未示出)上报该i/o请求的处理结果。

该方法还包括:在该第一i/o请求处理完成之后,该后端驱动通过该dma引擎向该服务器100发送中断请求,该中断请求用于该服务器100确定该设备对该第一i/o请求的处理结果。

具体地,前面提到过,为队列分配的存储空间中存储有待处理的i/o请求的多个描述符、待处理的i/o请求的数量avail_idx、待处理的i/o请求的多个描述符中的第一个描述符的索引号avail_entry[i].index、已经处理完成的i/o请求的数量used_idx与已经处理完成的i/o请求的第一个描述符的索引号used_entry[i].index。

当后端驱动1024确定索引号为6的i/o请求处理完成之后,便会通过dma引擎1025将used_idx的值由10更新为9,将索引号为6的i/o请求的第一个描述符的索引号写入used_entry[6].index。

当后端驱动1024对索引号为6的i/o请求处理完成之后,后端驱动1024会通过dma引擎1025向服务器100中的处理器发送中断请求,由于前端驱动1011已经提前将中断处理回调函数注册至服务器100中的处理器中,因此,当服务器100中的处理器处理dma引擎1025发起的中断请求时,会进入前端驱动1011的处理逻辑。

公共配置能力数据结构中存储有该队列中存储已经处理完成的i/o请求的数量used_idx的区域的首地址queue_used,此时,前端驱动1011会根据该首地址queue_used,在服务器100中为该队列分配的存储空间中查看used_entry[i].index,若存在与索引号6的i/o请求的第一个描述符的索引号相同的索引号时,则前端驱动1011确定设备102对索引号为6的i/o请求已经处理完成。

在本发明实施例中,当前端驱动1011对某个队列的通知能力数据结构中的notify字段进行写操作时,同时本地内存有足够的空间可用于存储该队列中的i/o请求的多个描述符,此时即可以形成该队列的一个有效的rr调度请求。

然而,有可能多个队列中均存在待处理的i/o请求,此时,前端驱动1011在多个队列的多个notify字段中分别写入了各个队列的索引号,此时便形成了多个rr调度请求。

首先对当存在多个队列中的i/o请求需要处理时,本发明实施例提供的轮询(roud-robin)调度方法进行说明。

具体地,在处理该多个rr调度请求时,控制器1021可以预先对该多个队列进行分组,例如,将多个队列分成了32组(即,32个调度组),每一个调度组中包括32个队列的调度请求。通过第一级的rr调度从32个调度组中选出一个有调度请求的调度组,然后针对该调度组,进行第二级rr调度,从该调度组中的32个队列中选择出一个队列,对该队列形成的rr调度请求预先进行处理。

在对该队列形成的rr调度请求预先进行处理时,描述符预取引擎1023需要确定该队列在服务器100的内存空间中是否有待处理的描述符后,才能开始进行有效地预取操作。只有在该队列在服务器100的内存空间中存在待处理的描述符的情况下,描述符预取引擎1023才可以从服务器100中取出待处理的描述符,否则就有可能向服务器100发起一些无用的读操作,浪费pcie接口的带宽。因此,描述符预取引擎1023在从服务器100中预取i/o请求的多个描述符之前,有必要对是否从服务器100中预取i/o请求的多个描述符进行判断。

下面对本发明实施例提供的确定是否从服务器100中预取该队列中的i/o请求的多个描述符的方法进行说明。

在本发明实施例中,该队列中可能包括多个待处理i/o请求,在公共配置能力数据结构中存储有该队列中待处理的i/o请求的数量avail_idx,在描述符预取引擎1023中配置两个寄存器,分别用于针对每个队列记录服务器100中的存储空间保存的待处理的i/o请求的数量avail_idx与设备102已经处理完成的i/o请求的数量avail_ring_index_engine。

描述符预取引擎1023根据该队列的索引号,在上述两个寄存器中获取属于该队列的avail_idx与avail_ring_index_engine。

当属于该队列的avail_idx与avail_ring_index_engine相等时,说明该队列中的i/o请求已经处理完成,此时描述符预取引擎1023不需要再从该队列的存储空间中获取描述符;

当属于该队列的avail_idx与avail_ring_index_engine不同时,说明该队列中还存在未处理的i/o请求,此时描述符预取引擎1023则需要继续从该队列的存储空间中获取描述符,并对获取的i/o请求进行处理。

上文结合图1至图3,描述了本发明实施例提供的数据处理的方法,下面结合图4描述本发明实施例提供的数据处理的设备。

图4为本发明实施例提供的数据处理的设备300的示意性框图,设备300配置于服务器100中,并通过高速串行计算机扩展标准pcie总线连接服务器100,设备300包括:获取模块301、处理模块302、存储模块303、中断产生模块304与i/o设备引擎模块305。

获取模块301,用于获取虚拟机发送的第一输入输出i/o请求,该第一i/o请求为该虚拟机针对该多个vf中的任意一个vf发起的,该第一i/o请求包括读操作或写操作,该读操作用于对该服务器的i/o设备执行读取数据操作,该写操作用于对该服务器的i/o设备执行写入数据操作,该vf用于管理该虚拟机的存储空间;

处理模块302,用于根据该第一i/o请求从该服务器的i/o设备中读取或写入数据。

可选地,该获取模块301,还用于从该第一队列获取第一描述符,该第一描述符为该虚拟机中的前端驱动对该第一i/o请求处理后生成的,该第一描述符用于指示该第一i/o请求在该服务器的内存中的存储位置,该第一队列存储至该服务器的内存,该第一队列用于存储包括该第一i/o请求在内的多个i/o请求的描述符;

该获取模块301,还用于根据该第一描述符,从该服务器的内存中获取该第一i/o请求。

可选地,该设备300还包括存储模块303,该处理模块302,还用于生成第二描述符,并将该第二描述符发送至该获取模块301,该第二描述符用于指示该第一描述符在该服务器为该第一队列分配的存储空间中的存储位置;

该获取模块301,还用于根据该第二描述符,通过dma的方式从该第一队列分配的存储空间中获取该第一描述符,并将该第一描述符存储至该设备的存储模块303中。

可选地,该设备300还包括:中断产生模块304,该处理模块302,用于通过处理该中断产生模块304发起的中断请求,从该存储模块303中获取该第一描述符,并将该第一描述符发送至该获取模块301;

该获取模块301,还用于根据该第一描述符,通过dma的方式从该服务器的内存中获取该第一i/o请求。

可选地,该设备300还包括i/o设备引擎模块305,该处理模块302,还用于当该第一i/o请求为该读操作时,根据该第一i/o请求,生成读数据报文,该读数据报文用于指示待读取的目标数据在该i/o设备中的存储位置,该读数据报文还用于指示读取到的该目标数据在该存储模块303中的存储位置;

该处理模块302,还用于通过该i/o设备引擎模块305向该i/o设备发送该读数据报文;

该处理模块302,还用于通知该获取模块301将存储在该存储模块303的该目标数据存储至该服务器的内存中。

可选地,该获取模块301,还用于当该第一i/o请求为该写操作时,从该服务器的内存中获取待写入i/o设备的目标数据,并将该目标数据写入该存储模块303中;

该处理模块302,还用于根据该第一i/o请求,生成写数据报文,该写数据报文用于指示该目标数据在该存储模块303中的存储位置,该写数据报文还用于指示将该目标数据存储至该i/o设备的存储位置;

该处理模块302,还用于向该i/o设备发送该写数据报文。

可选地,该处理模块302,还用于在该第一i/o请求处理完成之后,向该服务器发送中断请求,该中断请求用于该服务器确定该设备对该第一i/o请求的处理结果。

本发明实施例提供的设备能够将服务器中处理器处理的i/o业务卸载至该设备,由该设备完成i/o处理过程,该设备向服务器呈现为虚拟化输入/输出控制器,由该设备提供i/o资源供虚拟机使用,虚拟机直接向设备发起i/o请求,由设备处理该i/o请求,相对于由vmm处理虚拟机发起的i/o请求,由该设备处理i/o请求能够优化i/o请求的处理过程,降低服务器的处理器的负载,由设备直接处理虚拟机的i/o请求也进一步提高了虚拟化i/o性能。

应理解,根据本发明实施例的数据处理的设备300可对应于本发明实施例中设备102,并可以对应于执行根据本发明实施例的方法200中的相应主体,并且数据处理的设备300中的各个模块的上述和其它操作和/或功能分别为了实现图3中的方法200的相应流程,为了简洁,在此不再赘述。

本发明实施例提供了一种服务器,该服务器包括数据处理设备102或数据处理设备300,该服务器用于实现图3所述的数据处理的方法的操作步骤。

上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行该计算机程序指令时,全部或部分地产生按照本发明实施例该的流程或功能。该计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘。

以上该,仅为本发明实施例的具体实施方式,但本发明实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明实施例的保护范围之内。因此,本发明实施例的保护范围应以该权利要求的保护范围为准。

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