我正在运行一个小型实验,以使用 flowvisor(1.4 版,openflow 1.0 版)实现基于端口的切片来隔离带宽。使用 mininet,我创建了一个由主机 h1 ( 10.0.0.1
) 组成的拓扑,连接到称为 s3 的交换机,连接到另一个主机 h2 ( 10.0.0.2
),这样:
h1 ----- s3 ------ h2
为了实现这一点,我使用这个 mininet 命令来运行我的自定义拓扑(称为 simpletopo.py):sudo mn --custom simpletopo.py --topo mytopo --switch ovsk --controller remote --mac --arp --link tc
我希望666
从 h1 到 h2(反之亦然)端口的所有流量都具有 1Mbps 的带宽,并且555
从 h1 到 h2(反之亦然)端口的所有流量都具有 1Gbps 的带宽。为此,我在交换机 s3、q0 和 q1 中创建了两个队列。q0 用于 1Mbps 流量,q1 用于 1Gbps 流量。
首先,我创建了两个切片:
fvctl add-slice slice1 tcp:127.0.0.2:6643 generic@email.com
fvctl add-slice slice2 tcp:127.0.0.3:6653 generic@email.com
然后,我分配流空间:
fvctl -f pass add-flowspace --queues=1 --forced-queue=1 flow1 3 100 in_port=2,tp_dst=666 slice1=7
fvctl -f pass add-flowspace --queues=1 --forced-queue=1 flow2 3 100 in_port=1,tp_src=666 slice1=7
fvctl -f pass add-flowspace --queues=1 --forced-queue=1 flow3 3 100 in_port=1,tp_dst=666 slice1=7
fvctl -f pass add-flowspace --queues=1 --forced-queue=1 flow4 3 100 in_port=2,tp_src=666 slice1=7
fvctl -f pass add-flowspace --queues=0 --forced-queue=0 flow5 3 100 in_port=2,tp_dst=555 slice2=7
fvctl -f pass add-flowspace --queues=0 --forced-queue=0 flow6 3 100 in_port=1,tp_src=555 slice2=7
fvctl -f pass add-flowspace --queues=0 --forced-queue=0 flow7 3 100 in_port=1,tp_dst=555 slice2=7
fvctl -f pass add-flowspace --queues=0 --forced-queue=0 flow8 3 100 in_port=2,tp_src=555 slice2=7
我使用 queue 选项告诉 flowvisor 哪些切片可用于每个 flowspace,并使用强制队列选项来强制 flowvisor 更改指定队列中入队操作的输出操作。
然后我运行两个 POX 控制器,每个切片一个:
./pox.py --verbose pox.openflow.of_01 --address=127.0.0.2 --port=6643 pox.forwarding.l2_learning
./pox.py --verbose pox.openflow.of_01 --address=127.0.0.3 --port=6653 pox.forwarding.l2_learning
现在,我使用 mininet 运行拓扑。此时,两个切片工作正常,每个切片都控制其流量。流量使用所有带宽。
现在我想限制带宽。为了实现这一点,我创建了上面提到的队列。
我创建这样的队列:
sudo ovs-vsctl -- set Port s3-eth1 qos=@newqos -- set Port s3-eth2 qos=@newqos -- --id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1 -- --id=@q0 create Queue other-config:min-rate=1000000 other-config:max-rate=1000000 -- --id=@q1 create Queue other-config:min-rate=1000000000 other-config:max-rate=1000000000
当我使用 iperf 运行测试时,我将所有流量限制为 1 Mbps。当我运行时sudo ovs-ofctl queue-stats s3
,我看到所有流量都通过queue 0
(openflow 的默认队列)并且没有流量通过queue 1
。
怎么了?flowvisor 或队列的创建是否有问题?
非常感谢。