一种Xen虚拟机网卡限速的方法
技术领域
本发明涉及一种在Xen虚拟机环境下,对虚拟网卡进行带宽速率限制的方法,属于计算机技术领域。
背景技术
Xen虚拟机是一个开源虚拟化产品,是指计算机元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。虚拟化技术可以在一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
如图2所示,一个Xen虚拟机环境一般由Xen监管程序(XenHypervisor)、虚拟域0(Domain0)、虚拟域U(DomainU)构成。
Xen监管程序是Xen虚拟机的核心和基础。对虚拟机来说,Xen监管程序是抽象的硬件层,虚拟机在监管程序上运行。Xen监管程序负责在虚拟机的调度和内存分配,并控制虚拟机的执行。
虚拟域0是一个修改的linux内核,是一个运行在Xen监管程序之上的独特虚拟机,对访问物理IO和其它虚拟域U虚拟机具有特殊的权利。
除了虚拟域0之外所有在Xen虚拟机环境下运行的虚拟机被称为虚拟域U。
该Xen监管程序不用来支持网络或者磁盘请求,因此一般虚拟域U需要通过监管程序向虚拟域0通信来进行磁盘或者网络请求。
对普通的物理PC(Personal Computer),通常情况下可以通过交换机限制IP对应网络的速度的方式来进行网速限制。在虚拟环境下的虚拟机也需要对虚拟网卡进行带宽速率限制,而使用物理交换机限制的网络IP数量是有限的,在虚拟机比较多的情况下无法满足需求,所以需要找到其它方法解决这个问题。
发明内容
本发明的目的是解决现有技术中存在的问题,提供一种在Xen虚拟机环境下对虚拟网卡进行带宽速率限制的方法。
本发明的目的是通过下述技术方案予以实现的:
一种Xen虚拟机网卡限速的方法,其特征在于:具体包括如下步骤:
(1)虚拟网卡通过输入接口接收发送来的数据包;
(2)虚拟网卡的入口流量限制模块监测所接收的数据包,并丢弃其中不符合接收条件的数据包;
(3)所接收的数据包通过输入多路分配器进行判断选择:如果数据包的目的地是本地,则将该数据包上传至上层处理;如果数据包的目的地不是本地,则将该数据包传送至转发器处理;
(4)转发器同时接收由本地上层发送来的发送数据包和由输入多路分配器传送来的转发数据包,并通过查看路由表决定所接收数据包的发送地址;
(5)由虚拟网卡的出口队列对步骤(4)中转发器的数据包进行调度,以便将它们通过输出接口输出。
在所述步骤(2)中,所述入口流量限制模块通过对与所述虚拟网卡相对应的虚拟域0的网卡的出口队列使用令牌桶过滤器队列进行速率限制。
在所述步骤(5)中,所述出口队列对转发器的数据包所进行的调度包括以下步骤:
(51)所述出口队列在与所述虚拟网卡相对应的虚拟域0的网卡的入口处使用防火墙对入口流量的数据进行标记;
(52)所述出口队列在与所述虚拟网卡相对应的虚拟域0的网卡的入口处对已标记的数据使用分层的令牌桶队列进行速率限制。
本发明的有益效果是:该虚拟机网卡限流方法一方面可以使对虚拟机网卡的入口流量限制成为可能;另一方面也可以实现在虚拟机启动后对其网卡流量进行灵活配置。
附图说明
图1为Xen虚拟机网卡限速方法的具体流程图;
图2为Xen虚拟机系统结构图。
具体实施方式
下面结合附图和实施例对本发明作进一步描述。
如前所述,本发明的目的在于针对Xen虚拟机现有虚拟网卡限速的缺点,通过使用Linux kernel中的流量整形内核模块TC(Traffic Control),对虚拟网卡进行出入口速率限制,在虚拟域U启动后虚拟网卡速率可以随时更改。
图1为本发明Xen虚拟机网卡限速方法的具体流程图。如图所示,该Xen虚拟机网卡限速方法具体包括如下步骤:
(1)虚拟网卡通过输入接口(Input Interface)接收发送来的数据包;
(2)虚拟网卡的入口流量限制模块(Ingress Policing)监测所接收的数据包,并丢弃其中不符合接收条件的数据包;
(3)所接收的数据包通过输入多路分配器(Input Demultiplexing)进行判断选择:如果数据包的目的地是本地,则将该数据包上传至上层处理(Upper layers);如果数据包的目的地不是本地,则将该数据包传送至转发器(Forwarding)处理;
(4)转发器(Forwarding)同时接收由本地上层发送来的发送数据包和由输入多路分配器传送来的转发数据包,并通过查看路由表决定所接收数据包的发送地址;
(5)由虚拟网卡的出口队列(Output Queuing)对步骤(4)中转发器的数据包进行调度,以便将它们通过输出接口(Output Interface)输出。
通过上述虚拟机网卡限速方法,我们可以通过对步骤(2)中入口流量限制模块的监测规则的设置以及对步骤(5)中出口队列的调度规则的设置来分别实现对网卡入口流量和出口流量的限制。因此,对于这两部分现有机制的设计,对本专利尤为重要。
如前所述,本发明所设计的虚拟机网卡限速方法是基于Linux kernel中的流量整形内核模块TC设计的。而该模块TC是在虚拟域0中执行的,因此如何通过模块TC对虚拟域U上的网卡入口出口进行限流就成为了问题。而在Xen虚拟机中,运行在虚拟域0上的网卡与运行在虚拟域U上的网卡是具有对应关系的。虚拟域U上的网卡出入流量与虚拟域0上的对应网卡出入流量相反。既虚拟域0的网卡出口流量是虚拟域U的网卡入口流量,而虚拟域0的网卡入口流量是虚拟域U的网卡出口流量。所以在实际操作时,可以通过限制虚拟域0的网卡出入流量来实现对虚拟域U的网卡流量限制。
具体采用如下方法:
在步骤(2)中,所述入口流量限制模块通过对与所述虚拟网卡相对应的虚拟域0的网卡的出口队列使用令牌桶过滤器(TBF,Token BucketFilter)队列进行速率限制。
这里,所述的令牌桶过滤器(TBF)是一个简单的队列规定:只允许以不超过事先设定的速率到来的数据包通过,但可能允许短暂突发流量朝过设定值。
在步骤(5)中,所述出口队列(Output Queuing)对转发器的数据包所进行的调度包括以下步骤:
(51)所述出口队列(Output Queuing)在与所述虚拟网卡相对应的虚拟域0的网卡的入口处使用防火墙对入口流量的数据进行标记;
(52)所述出口队列(Output Queuing)在与所述虚拟网卡相对应的虚拟域0的网卡的入口处对已标记的数据使用分层的令牌桶(HTB,HierarchicalToken Bucket)队列进行速率限制。
基于上述步骤,我们就能通过对虚拟域0的网卡入口出口处的流量限制,实现对相对应虚拟域U的网卡出口入口的相应流量限制。这样,一方面可以使对虚拟机网卡的入口流量限制成为可能;另一方面也可以实现在虚拟机启动后对其网卡流量进行灵活配置。
综上所述,本发明提供了一种在Xen虚拟机环境下对虚拟网卡进行带宽速率限制的方法。本领域一般技术人员在此设计思想之下所做任何不具有创造性的改造,均应视为在本发明的保护范围之内。