kum*_*mar 5 networking bandwidth tc bandwidth-control 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
Run Code Online (Sandbox Code Playgroud)
这里 A 和 B 是使用此命令创建的容器。
lxc-execute -n A -f configfile /bin/bash
lxc-execute -n B -f configfile /bin/bash
Run Code Online (Sandbox Code Playgroud)
而 configfile 仅包含此条目:
lxc.utsname = test_lxc
Run Code Online (Sandbox Code Playgroud)
启动容器后,我在容器 A 内启动了 vsftpd 并尝试使用另一台机器上的 ftp 客户端访问文件。然后我在容器 A 中杀死了 vsftpd 并在容器 B 中启动了 vsftpd 并尝试使用另一台机器上的 ftp 客户端访问文件。
我无法观察到任何性能差异,就此而言,它远不及 40mbit/30mbit。
请纠正我这里是否有任何错误。
这里的问题没有得到很好的记录,但我以前经历过。在 64 位系统上,您回显的值不是表示为 16 位整数,而是 32 位整数。
尝试更换:
echo 0x1001 > A/net_cls.classid # 10:1
echo 0x1002 > B/net_cls.classid # 10:2
Run Code Online (Sandbox Code Playgroud)
和
echo 0x00100001 > A/net_cls.classid # 10:1
echo 0x00100002 > B/net_cls.classid # 10:2
Run Code Online (Sandbox Code Playgroud)
这应该可以解决您的问题。
注意:实际上不需要在开始时提供前导零,但为了清楚起见,我添加了它们。