Я знаю, что могу добавить задержку к интерфейсу с помощью этой команды:
# tc qdisc add dev eth0 root netem delay 50ms
Помимо задержки, я хочу ограничить пропускную способность этого интерфейса до 100 кбит / с.
Как я могу это сделать?
Я видел несколько примеров того, как ограничить пропускную способность. Например:
# tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10mbit
# tc class add dev eth0 parent 1: classid 1:1 cbq rate 512kbit \
allot 1500 prio 5 bounded isolated
# tc filter add dev eth0 parent 1: protocol ip prio 16 u32
Но если я попытаюсь запустить эти команды после настройки задержки задержки, я получу следующие ошибки:
RTNETLINK answers: File exists
Например:
# tc qdisc add dev eth0 root netem delay 97ms
# tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10kbit
RTNETLINK answers: File exists
Я действительно хочу иметь возможность делать и то, и другое: ограничивать полосу пропускания и вводить задержку задержки. Кто-нибудь знает, как это сделать?
В вашем примере вы пытаетесь добавить два корневых qdiscs на выходе. Вторая команда не работает, потому что у вас уже есть корневой qdisc, и разрешен только один. Вместо этого создайте корневой qdisc, затем дочерний для него класс, а затем добавьте свой второй qdisc как дочерний для класса. Например:
tc qdisc add dev eth0 root handle 1:0 cbq avpkt 1000 bandwidth 10kbit
tc class add dev eth0 parent 1:0 classid 1:1 cbq rate 512kbit \
allot 1500 prio 5 bounded isolated
tc qdisc add dev eth0 parent 1:1 netem delay 97ms
В этом примере мы присвоили корневому диску метку 1: 0. Затем мы указали класс как потомок 1: 0 и дали ему дескриптор 1: 1. Затем мы добавили второй qdisc как дочерний для 1: 1.
После того, как вы выполните эти команды, запустите tc qdisc
должен показывать как cbq qdisc, так и netem qdisc. В Linux Advanced Routing & Traffic Control HOWTO предоставляет дополнительную информацию о qdiscs.