掌桥专利:专业的专利平台
掌桥专利
首页

基于VMDq技术的IO虚拟化的实现系统及方法

文献发布时间:2023-06-19 16:12:48



技术领域

本发明涉及虚拟化实现的技术领域,具体地,涉及一种基于VMDq技术的IO虚拟化的实现系统及方法。尤其是,优选的涉及一种以太网控制器中支持基于VMDq技术的IO虚拟化的实现方法。

背景技术

二十一世纪的最近数年,随着电商、短视频和搜索引擎等行业的快速崛起,导致需要存储与转发大量的数据,这些数据的存储与转发,均需要依托云计算技术,因此对云计算基础设施建设提出了巨大的挑战。而虚拟化是云计算基础设施平台建设的核心技术之一,虚拟化技术将系统的下层物理资源(如CPU、内存、以太网控制器等I/O设备),通过空间上的分割、时间上的分时以及模拟等手段,抽象成多份虚拟物理资源,并将其通过网络等媒介提供给上层使用,使得现有的物理资源得到充分地利用。CPU英文全称为central processingunit,中文译文为中央处理器。此外,大部分虚拟化技术对于上层用户是透明的,即应用程序在使用虚拟资源时,仍然认为它正在使用真实物理资源。系统虚拟化的基本结构如图1所示,OS英文全称为Operating System,中文译文为操作系统。

虚拟机(虚拟机英文全称为Virtual Machine,简称为VM)运行在虚拟机监视器(虚拟机监视器英文全称为Virtual Machine Monitor,简称为VMM)之上。VMM不但需要管理和维护虚拟机,还需要负责CPU、内存和I/O设备等硬件资源的整合与分配工作,满足虚拟机对计算机硬件资源的需求。

目前主流的虚拟化技术包括:CPU虚拟化、内存虚拟化以及I/O虚拟化。随着技术的不断地更新迭代,相比于另外两种技术逐渐趋于完善,I/O虚拟化却发展相对缓慢,成为目前制约虚拟化技术发展的短板。计算机实际运用中I/O设备资源总是有限的,VMM通过I/O虚拟化将有限的I/O设备资源抽象模拟成多份,以满足多个虚拟机对I/O设备的需求。目前I/O虚拟化的解决方案具体分为:I/O设备完全模拟虚拟化、半虚拟化(前端后端虚拟化)以及基于硬件辅助I/O虚拟化。

I/O设备完全模拟虚拟化,是采取软件模拟的手段,使得虚拟设备拥有与物理设备一模一样的接口。该技术的优点是虚拟机操作系统能够利用原有的物理设备驱动程序驱动虚拟设备。缺点则为由于是在软件层上实现的I/O虚拟化,软件则需要承担巨大的工作量,因此该技术存在虚拟I/O效率较低,CPU负担重等问题。

半虚拟化技术被广泛应用在Xen、KVM等虚拟化平台,是一种相对成熟的I/O虚拟化技术。该技术首先模拟出与虚拟机个数相同的虚拟前端设备,然后采取分离式的前端/后端驱动实现I/O虚拟化,前后端驱动利用VMM提供的事件通道机制进行通讯。相比I/O设备完全模拟,半虚拟化技术通过减少VMM的复杂度和VMM在I/O传输过程中的干预,在一定程度上提升了虚拟I/O效率。其缺点是由于每个设备都需要编写匹配的前端/后端驱动,因此还需要对操作系统内核进行修改,故在Windows等非开源的平台下适配性较差,开发与日常维护开销较大。Xen是一个开放源代码虚拟机监视器。KVM英文全称为Kernel-based VirtualMachine,中文译文为开源虚拟机。

基于硬件辅助I/O虚拟化是指通过拥有多个功能接口的特殊硬件辅助实现I/O虚拟化,以此减少纯软件虚拟化所带来的高额花销。通过将每个功能接口分配给一个虚拟机,使得每个虚拟机独享一份虚拟硬件资源,实现虚拟机与硬件设备直通,极大程度地提升了虚拟I/O性能。

21世纪以来,尤其是最近几年,互联网公司的业务量呈爆发式增长,为了满足业务需求尤其是高清视频和大量用户数据处理的需求,提高公司自身服务质量,企业的数据中心需要在升级硬件时在满足需求之外,还需要尽量的降低成本。I/O虚拟化技术就为上述问题提供了一种折中的方案。

随着云计算技术的发展,越来越多公司抛弃直接在服务器上面跑应用程序,改为采用服务器里运行多个虚拟机,虚拟机里面跑应用程序的方式。通常情况下,一个服务器上面跑几十个虚拟机,对计算能力和网络性能的需求是很惊人的,前者促生了多核技术的发展,后者如果简单的通过几十个以太网控制器来解决,首先不考虑主板上是否有这么多的接口,光成本上就是难以让人接受的。或者如果给虚拟机分配的接口都是通过VMM中软件交换机的虚拟端口,那么服务器维护虚拟端口和转发就要占用大量的计算资源。

公开号为CN108920252A的中国发明专利文献公开了一种基于多队列千兆以太网控制器的IO虚拟化装置,包括接收引擎模块,完成数据帧从以太网控制器到主机内存的传输;接收BD环模块,存放从主机内存获取的接收BD信息,包括若干个接收BD环,其中一个接收BD环与主机对应,其他的接收BD环与主机上的虚拟机唯一对应;发送引擎模块,根据目的MAC地址,将主机内存中待发送的数据帧发送到以太网控制器;发送BD环模块,存放从主机内存获取的发送BD信息,包括若干个发送BD环,其中一个发送BD环与主机对应,其他的发送BD环与主机上的虚拟机唯一对应。

针对上述中的相关技术,发明人认为I/O设备完全模拟虚拟化,具有共享性好和直接使用原有物理驱动等优点,但是由于全部通过软件模拟来完成虚拟I/O传输等工作,导致其存在I/O效率低下等问题;半虚拟化模型,相比设备完全虚拟化的虚拟I/O性能有显著提高,但是要对每个设备都要编写相应的前后端驱动,而且要修改操作系统,对于Windows之类非开源系统,开发和日常维护的花销较为大;基于硬件辅助I/O虚拟化,通过特殊硬件提供的多个功能接口与虚拟机互连,实现虚拟机与硬件设备直通,因此其虚拟I/O效率无限接近物理设备原始性能,无疑是最具有发展潜力的I/O虚拟化技术。

发明内容

针对现有技术中的缺陷,本发明的目的是提供一种基于VMDq技术的IO虚拟化的实现系统及方法。

根据本发明提供的一种基于VMDq技术的IO虚拟化的实现系统,包括如下模块:

模块M1:采用VMDq技术对硬件进行改进;

模块M2:通过改进的硬件进行IO虚拟化。

优选的,所述模块M1包括如下模块:

GMAC模块:接收帧数据并将帧数据送入虚拟化模块;

虚拟化模块:接收帧数据,帧数据经过处理产生队列号,根据队列号将处理后的帧数据送入接收缓存模块;

接收缓存模块:接收处理后的帧数据;

DMA模块:将接收缓存模块中的帧数据搬至主机内存。

优选的,所述模块M1还包括接收控制模块和PCIe接口模块;

接收缓存模块:接收处理后的帧数据,并产生队列非空信号,将队列非空信号送给接收控制模块;

接收控制模块:接收队列非空信号;将虚拟化模块中的片内描述符读至接收控制模块中的接收使用描述符队列,并根据读来的片内描述符信息,将DMA配置信息送至PCIe接口模块;

PCIe接口模块:根据送至的DMA配置信息正确配置DMA模块。

优选的,所述虚拟化模块包括如下模块:

预处理模块:对帧数据信息进行预处理获得初始分类依据;

虚拟信息处理模块:根据初始分类依据根据优先级决策出最终分类号;

分页式内存管理单元:根据最终分类号对帧数据进行分类存储。

优选的,所述预处理模块包括如下模块:

解析模块:解析帧数据的信息并将与寄存器匹配的信息作为初始分类依据;

过滤模块:对解析后的帧数据进行过滤处理。

根据本发明提供的一种基于VMDq技术的IO虚拟化的实现方法,包括如下步骤:

步骤S1:采用VMDq技术对硬件进行改进;

步骤S2:通过改进的硬件进行IO虚拟化。

优选的,所述步骤S1包括如下步骤:

GMAC步骤:接收并发送帧数据;

虚拟化步骤:接收帧数据,帧数据经过处理产生队列号,根据队列号发送处理后的帧数据;

接收缓存步骤:接收处理后的帧数据;

DMA步骤:将接收缓存步骤中所述帧数据搬至主机内存。

优选的,所述步骤S1还包括接收控制步骤和PCIe接口步骤;

接收缓存步骤:接收处理后的帧数据,并产生队列非空信号,将发送队列非空信号;

接收控制步骤:接收队列非空信号;将片内描述符读至接收使用描述符队列,并根据读来的片内描述符信息,发送DMA配置信息;

PCIe接口步骤:根据DMA配置信息进行配置。

优选的,所述虚拟化步骤包括如下步骤:

预处理步骤:对帧数据信息进行预处理获得初始分类依据;

虚拟信息处理步骤:根据初始分类依据根据优先级决策出最终分类号;

分页式内存管理单元:根据最终分类号对帧数据进行分类存储。

优选的,所述预处理步骤包括如下步骤:

解析步骤:解析帧数据的信息并将与寄存器匹配的信息作为初始分类依据;

过滤步骤:对解析后的帧数据进行过滤处理。

与现有技术相比,本发明具有如下的有益效果:

1、本发明基于硬件辅助I/O虚拟化模型,并采用VMDq技术对传统以太网控制器结构进行改进与创新,使其支持虚拟化功能;

2、本发明通过对数据帧进行预处理,根据优先级不同获得数据帧分类依据(VMDq_Pool);采用两级链表和分页式存储的方式改进内存管理,实现数据帧在片内分类存储的目的,最终将数据帧通过DMA写入到DMA重映射后的虚拟机内存地址当中,实现了以太网控制器内部PCIe每个通道(lane)支持八个虚拟机拥有独享的网络数据收发通路,可以实现一台服务器上运行几十个虚拟机的应用;

3、本发明减少了在使用虚拟机时,VMM在I/O传输中的干预,节约了大量的CPU资源,让CPU可以用于处理其他事务,极大地提高了系统I/O虚拟化效率。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为系统虚拟化的基本结构图;

图2为以太网控制器内部结构框图;

图3为数据帧多队列选择示意图。

附图标记:GMAC英文全称为Gigabit Media Access Control,中文译文为千兆介质访问控制器;FRAME中文译文为帧;Des英文全称为Descriptor,中文译文为描述符;Des_Queue英文全称为Descriptor_Queue,中文译文为描述符队列;Fra&Des英文全称为Frameand Descriptor,中文译文为帧和描述符;Buff_tag英文全称为Buffer_tag,中文译文为缓存标签;Frame_Buff英文全称为Frame_Buffer,中文译文为帧缓存;PCIe英文全称为Peripheral Component Interconnect Express,中文译文为周边设备高速连接标准,是一种高速串行计算机扩展总线标准;DMA英文全称为Direct Memory Access,中文译文为直接存储器访问;Pool_Num英文全称为Pool_Number,中文译文为队列号;L2英文译文为Layer2,中文译文为第二层;Queue中文译文为队列。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

本发明实施例公开了一种基于VMDq技术的IO虚拟化的实现系统,如图2和图3所示,包括如下模块:模块M1:采用VMDq技术对硬件进行改进。模块M1包括如下模块:GMAC模块:接收帧数据并将帧数据送入虚拟化模块。虚拟化模块:接收帧数据,帧数据经过处理产生队列号,根据队列号将处理后的帧数据送入接收缓存模块。虚拟化模块包括如下模块:预处理模块:对帧数据信息进行预处理获得初始分类依据。预处理模块包括如下模块:解析模块:解析帧数据的信息并将与寄存器匹配的信息作为初始分类依据。过滤模块:对解析后的帧数据进行过滤处理。虚拟信息处理模块:根据初始分类依据根据优先级决策出最终分类号。分页式内存管理单元:根据最终分类号对帧数据进行分类存储。

接收缓存模块:接收处理后的帧数据,并产生队列非空信号,将队列非空信号送给接收控制模块。接收控制模块:接收队列非空信号;将虚拟化模块中的片内描述符读至接收控制模块中的接收使用描述符队列,并根据读来的片内描述符信息,将DMA配置信息送至PCIe接口模块。PCIe接口模块:根据送至的DMA配置信息正确配置DMA模块。DMA模块:将接收缓存模块中的帧数据搬至主机内存。

模块M2:通过改进的硬件进行IO虚拟化。

本发明实施例还公开了一种以太网控制器中支持基于VMDq技术的IO虚拟化的实现方法,包括如下步骤:步骤S1:采用VMDq技术对硬件进行改进。步骤S1包括如下步骤:GMAC步骤:接收并发送帧数据。虚拟化步骤:接收帧数据,帧数据经过处理产生队列号,根据队列号发送处理后的帧数据。虚拟化步骤包括如下步骤:预处理步骤:对帧数据信息进行预处理获得初始分类依据。预处理步骤包括如下步骤:解析步骤:解析帧数据的信息并将与寄存器匹配的信息作为初始分类依据。过滤步骤:对解析后的帧数据进行过滤处理。虚拟信息处理步骤:根据初始分类依据根据优先级决策出最终分类号。分页式内存管理单元:根据最终分类号对帧数据进行分类存储。

接收缓存步骤:接收处理后的帧数据,并产生队列非空信号,将发送队列非空信号。接收控制步骤:接收队列非空信号;将片内描述符读至接收使用描述符队列,并根据读来的片内描述符信息,发送DMA配置信息。PCIe接口步骤:根据DMA配置信息进行配置。DMA步骤:将接收缓存步骤中所述帧数据搬至主机内存。

步骤S2:通过改进的硬件进行IO虚拟化。

基于辅助I/O虚拟化模型,在传统以太网控制器的基础上采用VMDq技术进行改进与创新,提出了一种支持硬件辅助I/O虚拟化功能的以太网控制器内部结构,这种以太网控制器的内部结构如图2所示。

如图2所示,该硬件结构主要由GMAC模块、虚拟化模块、发送/接收控制模块、发送/接收缓存模块和PCIe接口模块等模块组成。GMAC英文全称为Gigabit Media AccessControl,中文译文为千兆介质访问控制器。当以太网物理层收发器芯片从网络上接收到帧数据以后,将帧数据送到以太网控制器的GMAC模块,若帧没有问题,GMAC会将帧送入虚拟化模块;帧进入虚拟化模块,会经历二层过滤,若帧通过二层过滤,会产生一个队列号;根据这个队列号,帧会被虚拟化模块送入接收缓存模块中,等待DMA将帧搬运到主机内存中。接收缓存模块在收到帧后,将产生一个队列非空信号,送给接收控制模块,接收控制模块此时会先将虚拟化模块中的片内描述符(由虚拟化模块产生)读至接收控制模块中的接收使用描述符队列,接收控制模块接下来会根据读过来的片内描述符中信息,将DMA的配置信息送至PCIe接口模块。PCIe接口模块根据刚刚送过来的DMA配置信息,去正确配置DMA模块,最后DMA模块会将帧从接收缓存模块中搬至主机内存。

发送控制模块:在发送时,发送控制模块会将存放在主机内存中的帧描述符,预取至发送控制模块上的帧描述符队列。帧描述符是128bit的,bit中文译文为比特,即二进制里的位的意思。然后发送控制模块将帧描述符的低64bit的字段内容(低64bit是地址字段,地址字段中的内容是帧描述符指向的这一帧的主机内存地址)裁剪掉,将裁剪后的帧描述符送至虚拟化模块。接着发送控制模块将DMA配置信息送给PCIE接口模块,PCIE接口模块去正确配置DMA模块,DMA模块会将帧数据从主机内存搬运至发送缓存模块。虚拟化模块在收到发送控制模块送过来的裁剪后的帧描述符后,会再次裁剪这个描述符,只保留描述符中的状态字段中的bit 0(状态字段中的bit 0是用来表示帧数据有没有发送出去的),并将状态字段中的bit 0置1,再次裁剪后的这个描述符叫作写回描述符。虚拟化模块将写回描述符送给发送控制模块。发送控制模块收到写回描述符后,将写回描述符放入写回描述符队列,待满足写回条件时,通过DMA模块,将写回描述符写回至主机内存中。

发送缓存模块:在发送时,用于暂时存放被DMA模块从主机内存搬运过来的帧。

本发明设计保持兼容非虚拟化模式下,为了支持硬件辅助I/O虚拟化功能,在传统以太网控制器结构中增加虚拟化模块(图2中的虚线部分)。其中解析模块和过滤模块在实现原有基础过滤功能,同时通过引入队列号的概念获得初始分类依据;新增的虚拟信息处理模块将初始分类依据根据优先级决策出最终分类号,将原本软件负责的包解析和分类转发功能采用硬件实现;采用分页式存储的方式改进了片上内存管理,并用两级链表的方式来管理内存,不但满足虚拟化对数据帧分类存储的需求,同时也减少了内存碎片化。此外根据VMDq技术中数据收发队列(Pool)概念,增加接收/发送缓存模块。每个Pool分配给一个虚拟机,即每个Pool与其对应的虚拟机直通。因此接收/发送缓存模块由八组用来缓存帧和描述符数据帧和描述符的FIFO(FIFO英文全称为First in First out,中文译文为先进先出缓存器)组成。接收/发送控制模块通过其内部八个描述符队列(环形结构)中的描述符来配置DMA,确保DMA可以正确地传输数据。最终将分类后的数据帧和描述符通过DMA,写入到相应的虚拟机的内存,或者从虚拟机内存中发送到GMAC中。DMA英文全称为Direct MemoryAccess,中文译文为直接存储器访问。

虚拟化模块为本发明设计的核心创新模块,本发明设计采用的是VMDq技术的思想,在以太网内部根据不同的优先级策略将数据帧进行分类,减少VMM在I/O传输过程中的干预,实现硬件加速和功能卸载,从而提高网络虚拟I/O效率。如图2中虚线区域所示,虚拟化模块主要由解析模块、L2过滤模块、虚拟化信息处理模块和分页式内存管理单元组成。

解析模块和L2过滤模块主要负责对数据帧信息进行预处理,与传统以太网控制器不同的是在实现基础过滤功能的同时,解析出数据帧头部中的关键信息并将与寄存器匹配的信息作为初始分类依据。本发明设计的以太网控制器在接收时,当在网络上监听到数据包后,如果数据包正常,则GMAC模块会将数据包传给虚拟化模块,数据包进入虚拟化模块后,会首先存入虚拟化模块的片上FIFO中,然后进行二层过滤。然后将过滤后的数据帧进行分类,根据分类结果将其送到相应的接收数据缓存队列(Pool)当中,等待DMA将数据转移到主机内存中。这一过程如下图3所示。

虚拟化信息处理模块,根据初始分类依据,根据不同的优先级策略将数据帧分类到八个队列(即VMDq技术中的数据收发队列Pool)中。而分页式内存管理单元为解决数据帧在RAM中存储碎片化的问题,通过分页式存储方式,减少了内存碎片,并实现数据帧在片内分类存储的目的。

因此本发明通过研究硬件辅助I/O虚拟化的相关技术,发明支持硬件辅助I/O虚拟化的PCIe千兆以太网控制器芯片,可以满足云计算技术应用中对虚拟化技术日益增长的性能需求。PCIe英文全称为Peripheral Component Interconnect Express,中文译文为周边设备高速连接标准,是一种高速串行计算机扩展总线标准。

本发明一种专门用于提升以太网控制器I/O虚拟化性能的技术——VMDq(VMDq英文全称为Virtual Machine Device Queue,中文译文为虚拟机设备队列)。在传统的虚拟化技术中,每个接收到的数据包都需要VMM的软件交换机分类后,再将其转发到相应的虚拟机内存中,采用这种方式将耗费巨额的CPU资源。而VMDq技术将该分类转发功能,交由以太网控制器内部的专门硬件电路来实现,VMM只需要负责提供内存保护和地址转发的工作。

VMDq本质上实现了交换机部分功能,在以太网控制器内部搭建一个OSI模型中的2层的分类/排序引擎。以太网控制器提供多个硬件数据包收发队列(队列一般称为Pool),VMM将硬件收发队列分配给指定的虚拟机。在接收数据包时,支持VMDq功能的以太网控制器的二层分类器根据数据包中关键信息(如MAC地址、VLAN ID和Ethernet Type等。MAC英文全称为Media Access Control,中文译文为介质访问控制器。VLAN ID英文全称为VirtualLocal Area Network Identification,中文译文为虚拟局域网标识。Ethernet Type中文译文为以太网类型)做出不同的分类决策,从而决定数据包要路由到哪个虚拟机中,然后根据VMM中的IOMMU表转换过来的虚拟机真实的内存地址,最终通过DMA将数据包送到目的虚拟客户机内存当中,并发送一个中断给虚拟机操作系统通知其有新的数据包到达。从而极大程度上提高了虚拟化网络I/O效率。OSI模型英文全称为Open System InterconnectionReference Model,中文译文为开放式系统互联通信参考模型。IOMMU英文全称为Input/Output Memory Management Unit,中文译文为输入输出内存管理单元。

I/O虚拟化:虚拟化的一种新形式,是来自物理连接或物理运输上层协议的抽象,让物理服务器和虚拟机可以共享I/O资源。硬件辅助I/O虚拟化:通过拥有多个功能接口的特殊硬件辅助实现I/O虚拟化,以此减少纯软件虚拟化所带来的高额花销。VMM:英文全称为Virtual Machine Monitor,中文译文为虚拟机监视器。虚拟机是运行在虚拟机监视器上的,虚拟机监视器不但需要管理和维护虚拟机,还需要负责CPU,内存,I/O设备等硬件资源的整合与分配工作,满足虚拟机对计算机硬件资源的需求。VMDq:英文全称为VirtualMachine Device Queue,中文译文为虚拟机设备队列。VMDq技术将每个接收到的数据包进行分类后,再将其转发到相应的虚拟机内存中。这部分工作原来由VMM的软件交换机完成,现在由以太网控制器内部的专门硬件电路来实现。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

技术分类

06120114739814