OVS的Quality of Service (QoS) 速率限制

本文档解释如何使用Open vSwitch实现将VM的流量控制在1 Mbps或者10 Mbps。

在这里插入图片描述

建立

本指南假定环境如下面的配置.

一个物理网络

  • 数据网络

    用于虚拟机数据通信的以太网络。此网络用于发送到/接收自外部主机的流量,此主机用于测量VM的发送速率。对于实验,这个物理网络是可选的;你可以将所有虚拟机连接一个网桥,但此网桥没有连接到任何的物理接口,使用一台虚拟机作为测量主机。

可能还有其它网络(例如,用于管理流量的网络)。但本指南只关心数据网络。

两个物理主机

第一个主机名为host1,是一个运行Open vSwitch 并具有一个NIC的Hypervisor。这个唯一的网卡eth0连接到数据网络。因为它属于OVS网桥,不能在eth0上分配IP地址。

第二个主机名为Measurement Host测量主机,可以是任何能够测量VM吞吐的主机。对于本指南,我们使用netperf,一个免费测量速率的工具,可测量由一个主机到另一主机的发送速率。测量主机只有一个"eth0"网卡,连接到数据网络。eth0的IP地址可以访问任何host1主机上的VM。

两个VMs

两个VMs(vm1vm2)运行在host1主机上。

每个VM具有一个端口,在物理主机上显示为Linux设备(如,tap0).

注意:
对于 Xen/XenServer, VM 的端口显示为Linux设备,名称类似与vif1.0. 其它Linux系统也许显示这些端口为vnet0, vnet1, 等待.

扫描二维码关注公众号,回复: 6730907 查看本文章

配置步骤

对于这两个虚拟机,我们修改接口表Interface table以配置入口策略规则。有两个值要设置:

ingress_policing_rate
VM允许的最大发送速率(Kbps)

ingress_policing_burst
策略算法的一个参数,用于指示接口可发送的超过配置的策略速率的最大数据量(以KB为单位)。

vm1速率限制在 1 Mbps, 使用以下命令:

$ ovs-vsctl set interface tap0 ingress_policing_rate=1000
$ ovs-vsctl set interface tap0 ingress_policing_burst=100

类似的,将vm2的速率限制在 10 Mbps, 在host1主机上输入以下的命令:

$ ovs-vsctl set interface tap1 ingress_policing_rate=10000
$ ovs-vsctl set interface tap1 ingress_policing_burst=1000

查看当前VM1的速率限制,执行以下命令:

$ ovs-vsctl list interface tap0

测试

要测试以上配置,请确保在两个VM以及测量主机Measurement Host上都安装并运行了netperf. netperf由一个客户端(netperf)及一个服务端(netserver)组成。在本例中,我们在测量主机上运行netserver(安装netperf时通常以守护进程的形式启动netserver,这意味着其是默认运行的)。

对于这个例子,我们假设测量主机的IP为10.0.0.100。并且可以从两个虚拟机访问。

在"vm1"上运行以下命令:

$ netperf -H 10.0.0.100

这将导致VM1以尽可能块的速度向测量主机发送TCP流量。10秒之后,将输出一系列值。我们感兴趣的是"Throughput"值,以Mbps(10^6位/秒)为单位。对于VM1该值应接近1。在VM2上运行相同的命令应该结果接近10。

排错

Open vSwitch使用Linux的traffic-control 流控功能实现速率限制. 如果你没有看到配置的速率限制的效果,确保你的内核在编译时打开了"ingress qdisc"选项,并且安装了用户空间工具(例如,/sbin/tc)。

额外信息

Open vSwitch 的速率限制使用策略,其不对数据包进行排队。它丢弃任何超过指定速率的数据包。指定更大的突发量让算法更容易被宽容,这对于像TCP这样对丢包有严重的反应的协议非常重要。应避免将突发量设置为小于MTU值(例如,10 kb)。

对于TCP流量,将突发量设置为总的策略速率的相当大比例的值(例如,>10%),有助于流量更接近全速。如果将突发量设置为总速率的很大比例,则客户端实际的平均速率会略高于设定的策略速率。

对于UDP流量,将突发量设置为略大于MTU值,并且确保你的性能工具不发送大于MTU值的报文(否则,这些数据包将被分片,导致性能低下)。例如,你可以强制netperf以1000字节的长度发送UDP流量,运行以下命令:

$ netperf -H 10.0.0.100 -t UDP_STREAM -- -m 1000

猜你喜欢

转载自blog.csdn.net/sinat_20184565/article/details/94654914
QOS