使用tc的lxc带宽控制

我正在试图限制我的容器内的带宽。 我曾尝试使用以下命令,但我认为它没有得到有效的。

cd /sys/fs/cgroup/net_cls/ echo 0x1001 > A/net_cls.classid # 10:1 echo 0x1002 > B/net_cls.classid # 10:2 tc qdisc add dev eth0 root \ handle 10: htb tc class add dev eth0 parent 10: \ classid 10:1 htb rate 40mbit tc class add dev eth0 parent 10: \ classid 10:2 htb rate 30mbit tc filter add dev eth0 parent 10: \ protocol ip prio 10 \ handle 1: cgroup 

这里A和B是用这个命令创build的容器。

 lxc-execute -n A -f configfile /bin/bash lxc-execute -n B -f configfile /bin/bash 

而configuration文件只包含这个条目:

 lxc.utsname = test_lxc 

在启动容器之后,我启动了容器A中的vsftpd,并尝试从另一台机器上使用ftp客户端访问这些文件。 然后我杀死了容器A中的vsftpd,并启动了容器B中的vsftpd,并尝试从另一台机器上使用ftp客户端访问这些文件。

我无法观察到任何性能差异,因为这个距离更接近40mbit / 30mbit。

请纠正我在这里是否有任何错误。

这里的问题没有很好的logging,但我以前经历过。 在64位系统上,您所回显的值不是以16位整数表示,而是以32位整数表示。

尝试更换:

 echo 0x1001 > A/net_cls.classid # 10:1 echo 0x1002 > B/net_cls.classid # 10:2 

 echo 0x00100001 > A/net_cls.classid # 10:1 echo 0x00100002 > B/net_cls.classid # 10:2 

这应该解决您的问题。

注意:实际上并不需要在开始时提供前导零,但为了清晰起见,我添加了它们。

许多非pipe理程序容器(lxc,jail)往往具有不可靠的/不完整的计量(磁盘iops,networking)影响其他容器。 如果限制外部传输是主要问题,请在这些防火墙之前先贴上透明防火墙(即ArmorLogic,梭子鱼等)。

在任何情况下,绝对加载testing,看看它是否有所作为。

(ProTip:Heroku运行LXC。heroku heroku run bash