У меня возникли проблемы с ограничением пропускной способности сети с помощью группы управления net_cls в сочетании с контроллером трафика linux (tc). Думаю, меня просто смущает то, как я пишу правила фильтрации. Я решил, что самый простой способ управлять пропускной способностью сети пользователей - это использовать их uid как часть classid группы управления net_cls. Поэтому я установил следующее правило в своем файле cgconfig (и продолжаю перезагружать машину). У меня также есть правильная настройка в моем cgrules.conf, так как любые ограничения, которые я налагаю на другие контроллеры (например, память), отражаются должным образом.
Скажем, у меня uid 5004,
group cgroup_demo_cg {
net_cls {
net_cls.classid=0x00105004;
#or should it be the hex equivalent of 5004 ?
#net_cls.classid=0x0010138c;
}
}
Так или иначе, следующим шагом должно быть добавление кое-каких материалов tc. Ручка 10
в любом случае сначала создайте qdisk:
tc qdisc add dev eth0 root handle 10: htb
затем установите правило класса:
tc class add dev eth0 parent 10: classid 10:5004 htb rate 4kbit
#or if I had to use the hex value
tc class add dev eth0 parent 10: classid 10:138c htb rate 4kbit
затем, наконец, примените фильтр, который, как мне кажется, должен быть одинаковым, использую ли я шестнадцатеричное значение или значение uid (5004):
tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup
Итак, после того, как я это настроил, я ожидаю, что любой сетевой трафик от пользователя в этой cgroup будет иметь пропускную способность сети, ограниченную tc соответственно, однако, похоже, это не так.
Если я вхожу в систему как пользователь и настраиваю сеанс ssh на другой из моих компьютеров, а затем выполняю команду top (которая должна отправлять / получать постоянный поток некоторых данных), затем запустите команду:
tc -s qdisc ls
Я вижу:
qdisc htb 10: dev eth0 root refcnt 2 r2q 10 default 0 direct_packets_stat 0
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc pfifo_fast 0: dev eth1 root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 1364212 bytes 6045 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
Что показывает мне, что на мой qdisk ничего не добавлялось? :(
У кого-нибудь есть идеи, что я здесь делаю не так?
Ура!