1. 程式人生 > >使用tc配置後端設備,來限制虛擬機網卡帶寬

使用tc配置後端設備,來限制虛擬機網卡帶寬

fig type idg pro 0x03 就是 同時 function 查看

如果通過tc來限制虛擬機網卡接收方向帶寬呢,實際上使用tc對接收方向限制的不夠好,使用tc ingress可以限制接收,但是功能不夠多,而且會形成丟包問題。一般是采用將流量重定向到一個虛擬設備ifb上,再對虛擬設備ifb的發包方向來限制帶寬,以此來達到限制接收方向帶寬的目的。

對於虛擬機的網卡而言,同樣也可以使用ifb設備,間接來限制接收方向的帶寬,但是還有一種辦法是通過限制虛擬機網卡的後端設備的發,來達到限制虛擬機網卡接收帶寬的目的。

1、查找虛擬機某網卡對應的後端設備

我的方法比較笨,先是在主機上virsh dumpxml xxx可以查看生成虛擬機的xml文件,如下:

<interface type=
bridge> <mac address=99:13:3a:59:22:5c/> <source bridge=br1/> <target dev=vnet11/> <model type=virtio/> <alias name=net2/> <address type=pci domain=0x0000 bus=0x00 slot=0x03 function=0x1/> </interface>

target dev 對應的就是後端設備,我們在主機上,ifconfig,就可以查到這個後端網卡設備。我們要限制虛擬機網卡的收,就可以限制這個後端網卡設備的發。

但很多情況下,由於路由問題,實際的業務流向並不一與後端設備。如,我的虛擬機環境中,ens3f0 端口的ip地址為 129.9.240.236,在物理主機上看,對應的後端設備是vnet11,我向129.9.240.236上發數據包時,通過sar命令查看,實際的數據流向卻不是走的vnet11->ens3f0。如下所示:

在主機中查看:

sar -n DEV 1

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:          br1     
25.49 0.00 1.36 0.00 0.00 0.00 0.00Average: eth0 57.46 1.29 3.86 0.26 0.00 0.00 24.45Average: vnet2 0.00 25.73 0.00 1.74 0.00 0.00 0.00 Average: eth1 71491.80 2447.85 105636.68 169.77 0.00 0.00 12.42Average: vnet11 0.00 25.73 0.00 1.74 0.00 0.00 0.00 Average: ovs-system 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: br0 57.42 1.25 3.07 0.26 0.00 0.00 0.00 Average: vnet12 2447.85 2763.77 169.77 101206.93 0.00 0.00 0.00 Average: vnet1 0.00 56.25 0.00 3.78 0.00 0.00 0.00

在虛擬機中查看:

sar -n DEV 1

08:22:26 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
08:22:27 AM    ens3f3     26.00      0.00      1.52      0.00      0.00      0.00      0.00      0.00
08:22:27 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
08:22:27 AM    ens3f0     26.00      0.00      1.52      0.00      0.00      0.00      0.00      0.00
08:22:27 AM      ens8     50.00      4.00      3.26      0.46      0.00      0.00      0.00      0.00
08:22:27 AM    ens3f1     26.00      0.00      1.52      0.00      0.00      0.00      0.00      0.00
08:22:27 AM    ens3f2  10305.00   8576.00 394693.92    598.61      0.00      0.00      0.00      0.00

可以看到實際的網絡流量是eth1->vnet12->ens3f2。

那麽在實際應用中,如果要是限制發向ip為129.9.240.236的業務流量帶寬,就需要限制vnet12發出方向的帶寬。

2、配置帶寬限制策略

在主機上對vnet12後端設備進行限制,配置如下所以:

tc qdisc add dev vnet12 root handle 1: htb default 20
tc class add dev vnet12 parent 1: classid 1:1 htb rate 10000mbit
tc class add dev vnet12 parent 1:1 classid 1:10 htb rate 2000mbit
tc class add dev vnet12 parent 1:1 classid 1:20 htb rate 1000mbit
tc class add dev vnet12 parent 1:1 classid 1:30 htb rate 500mbit
tc filter add dev vnet12 protocol ip parent 1:0 prio 1 u32 match ip dport 10051 0xffff flowid 1:10
tc filter add dev vnet12 protocol ip parent 1:0 prio 1 u32 match ip dport 10052 0xffff flowid 1:20
tc filter add dev vnet12 protocol ip parent 1:0 prio 1 u32 match ip dport 10053 0xffff flowid 1:30

測試下,虛擬機接收端,開啟三個接口,三個進程同時並發執行,如下:

[email protected]: python demo_server.py 3
3 process concurrent....
server  10051
server  10052
server  10053

發送端發送數據包,並統計時延時間,以及粗略計算下帶寬值,結果如下:

[email protected]: python test.py 129.9.240.236 3 1
3 process concurrent....
bandwidth  155.74MB/s
bandwidth  95.54MB/s
bandwidth  52.78MB/s

實際結果,與我們期望的一致。

使用tc配置後端設備,來限制虛擬機網卡帶寬