[zz]lxc使用tc+tbf限制网速

下面是有关于我开题部分很有帮助,thanks god!

虚拟机有考虑限制网速的需求,所以尝试用tc来做一下虚拟机限速的功能。

使用的效果还是比较理想的,使用tc跟tbf可以做到理想的限速。tc控制的原则是控发不控收,只会针对网卡的发包队列进行调度限速,而不会针对收包队列控制。

在虚拟机中,我们可以采用其他手段做到收发控制。

虚拟机网卡流量出的过程,先从虚拟机网卡出,然后经过宿主机提供的tap设备送到宿主机网桥,然后网桥决定是发给物理网卡送出去还是送到本宿主机的其他虚拟机当中。

虚拟机网卡收包的过程,数据包先从宿主机物理网卡送到宿主机网桥,然后宿主机网桥送到虚拟机对应的tap设备,然后,tap设备将数据送给虚拟机的网卡。

如图所示:

虚拟机网卡走向

可以看出,如果要控制虚拟机的发包流量,只能在虚拟机的eth0(注意不是物理机的eth0)出口处控制,如果要控制虚拟机的收包流量,我们可以在tap0的出口控制。

下面我们尝试在lxc中控制收发包的流量大小。

首先,启动一个实验用的lxc:

 
1
lxc-start -n debianlxc

然后在其中控制eth0的出口流量:

 
1
tc qdisc add dev eth0 root tbf rate 10Mbit latency 50ms burst 10000 mpu 64 mtu 150000

现在从虚拟机scp文件到宿主机,可以看到开始速度高发,但是稳定会限制在1.2MB/s左右
然后在主机控制tap0的出口流量,主机中对应的tap设备为vethQzV5ci,所以我们执行:

 
1
tc qdisc add dev vethQzV5ci root tbf rate 10Mbit latency 50ms burst 10000 mpu 64 mtu 150000

现在我们从主机给虚拟机scp文件,可以看到速度也在1.2MB/s。
其中注意mtu参数会影响效果,如果不设置mtu,有时候会造成传输终端,导致scp速度持续下降,mtu的一般选择网卡mtu值*100。(100是intel体系下的倍数)
另外关于查找虚拟机对应的tap网卡有时候是一个问题,还好lxc下比较容易获得。
不过,我们的需求一般都是控发不控收的,所以采用单向控制就足够了。

原文地址:https://www.cnblogs.com/zhangzhang/p/2489593.html