使用tc进行lxc带宽控制

Modified on: Fri, 19 Apr 2019 19:20:03 +0800

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

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是使用此命令创建的容器。

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

而configfile仅包含此条目:

lxc.utsname = test_lxc

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

我无法观察到性能上的任何差异,就此而言,它远不及40mbit / 30mbit。

请纠正我这里是否有任何不妥之处。

作者:Sven,kumar

最佳答案

这里的问题没有很好的记录,但我以前经历过。
在64位系统上,您回显的值 not 表示为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

这可以解决您的问题。

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


相关问答

添加新评论