Назад | Перейти на главную страницу

Как добавить интерфейс с задержкой и ограничением полосы пропускания с помощью tc?

Я знаю, что могу добавить задержку к интерфейсу с помощью этой команды:

# 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.