Open vSwitch 出口流量QoS实现
OVS中可以通过创建对应出端口的队列并配置队列最大/最小速率来实现qos操作。以下我们通过mininet中一个最简单的拓扑(一个交换机+两台主机,mininet的默认拓扑,直接运行sudo mn即可)来说明一下这个qos操作。
如图,交换机的s1-eth1(ofport=1)连接主机h1,s1-eth2(ofport=2)连接主机h2,h1为数据发送端,h2为数据接收端,所以我们需要对出端口,即与h2相连的s1-eth2作设置:
ovs-vsctl set port s1-eth2 qos=@newqos -- \
--id=@newqos create qos type=linux-htb other-config:max-rate=2000000 queues=123=@q1,456=@q2 -- \
--id=q1 create queue other-config:min-rate=1000000 -- \
--id=q2 create queue other-config:min-rate=400000 other-config:min-rate=2000000
以上针对s1-eth2设置了一个qos操作,其中端口被限速为2Mbits/s,对应设置了两个队列,队列123设置保障速率1 Mbits/s,队列456设置保障速率400 Kbits/s,最高速率2 Mbits/s。若要使这些队列生效,需要设置流表动作将数据包放入队列中:
ovs-ofctl add-flow in_port=1,ip,udp,tp_dst=5001,actions=set_queue:123,output:2
下面我们将用iperf来进行一些带宽实验以测试队列的效果。h1作为数据发送端,将同时向h2发送两个数据流,分别发往h2的udp5001端口和udp5002端口,其中发往5001端口的数据包会被放入队列123,发往5002端口的数据包会被放入队列456:
//iperf操作,以1Mbits/s发往5001端口为例
iperf –s –p 5001 –I 2 –u //h2 iperf操作
iperf –c 10.0.0.2 –t 20 –I 2 –p 5001 –b 1m –u //h1 iperf操作
下面进行了几组实验:
1. 设置端口限速2M,队列123 min 600K, 队列456 max 2M