Networking
使用 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 是使用此命令創建的容器。
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。
請糾正我這裡是否有任何問題。
這裡的問題沒有很好的記錄,但我以前經歷過。在 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
這應該可以解決您的問題。
**注意:**實際上沒有必要在開始時提供前導零,但為了清楚起見,我添加了它們。
許多非管理程序容器(lxc、jails)往往具有影響其他容器的狡猾/不完整的計量(磁碟 iops、網路)。如果限制外部傳輸是主要關注點,請先在這些防火牆前面放置透明防火牆(即 ArmorLogic、梭子魚等)。
無論如何,一定要進行負載測試,看看它是否有所作為。
(專業提示:Heroku 執行 LXC。
heroku run bash
)