我在本地计算机上使用 Mininet 配置了基于 OpenVSwitch 的拓扑:
h1 (server) -------(eth1) s1 (eth2)--------------- h2 (client)
(eth3)
|
|
h3 (client)
所有链路均配置为具有 100Mbps 带宽 + 1ms 延迟,使用以下 qdisc/类:
qdisc htb 5: dev s1-eth1 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 ver 3.17 direct_qlen 1000
Sent 15134395731 bytes 9999886 pkt (dropped 467, overlimits 1558696 requeues 0)
backlog 0b 0p requeues 0
qdisc netem 10: dev s1-eth1 parent 5:1 limit 1000 delay 1.0ms
Sent 15134395731 bytes 9999886 pkt (dropped 467, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
class htb 5:1 root leaf 10: prio quantum rate 100Mbit ceil 100Mbit linklayer ethernet burst 1600b/1 mpu 0b cburst 1600b/1 mpu 0b level 0
Sent 15134395731 bytes 9999886 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps
rate 0bit 0ppsbacklog 0b 0p requeues 0
lended: 1123299 borrowed: 0 giants: 0
tokens: 1917 ctokens: 1917
class netem 10:1 parent 10: leaf 8007:
我在 上启动了 2 个 iperf3 服务器h1
,在h2
和h3
上分别启动了 2 个客户端,一切都按预期工作。
然后,为了确保 QoS,并且考虑到现有的 2 个 qdisc 是由 Mininet 设置的并且无法更改,我添加了一个新的pfifo_fast
qdiscnetem
作为父级:
qdisc pfifo_fast 8007: dev s1-eth1 parent 10:1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 6278984495 bytes 4149415 pkt (dropped 467, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
一开始效果很好,但几秒钟后,s1-eth1 开始丢弃所有传出数据包。tc
报告如下:
qdisc htb 5: dev s1-eth1 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 direct_qlen 1000
Sent 14716440349 bytes 9723342 pkt (dropped 387, overlimits 1494731 requeues 0)
backlog 641479b 332p requeues 0
qdisc netem 10: dev s1-eth1 parent 5:1 limit 1000 delay 1.0ms
Sent 14716440349 bytes 9723342 pkt (dropped 387, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc pfifo_fast 8007: dev s1-eth1 parent 10:1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 5861029113 bytes 3872871 pkt (dropped 387, overlimits 0 requeues 0)
backlog 641479b 332p requeues 0
mininet> sh tc -s -d class show dev s1-eth1
class htb 5:1 root leaf 10: prio quantum rate 100Mbit ceil 100Mbit linklayer ethernet burst 15337b/1 mpu
0b cburst 1600b/1 mpu 0b level 0
Sent 14717084878 bytes 9723917 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps
rate 0bit 0ppsbacklog 0b 0p requeues 0
lended: 1087545 borrowed: 0 giants: 0
tokens: 19104 ctokens: 1917
我的配置看起来合理吗?如果不是,使用 tc 配置带宽限制 + 模拟延迟 + QoS 的正确方法是什么?