Ограничить входящую и исходящую пропускную способность и задержку в Linux

15

Я понимаю, что многие подобные вопросы уже задавались, но до сих пор мне не удалось найти решение моей проблемы.

У меня есть виртуальный сервер Linux (работает под управлением Debian Squeeze), который я использую для тестирования скорости веб-сайтов, чтобы измерить увеличение и уменьшение времени загрузки указанных веб-сайтов. Я пытаюсь ограничить пропускную способность и задержку этого сервера, чтобы иметь возможность приблизиться к реальному времени загрузки веб-сайтов, но пока не удалось.

Что я хочу конкретно, так это следующее:

  • Для установки входящей и исходящей задержки 50 мс.
  • Чтобы установить ограничение входящей пропускной способности 512 кбит / с.
  • Установить ограничение исходящей полосы пропускания в 4096 кбит / с.

Я читал о netem и использовал tcкоманду, но это все еще немного над моей головой. Мне удалось собрать эту команду для управления задержкой, которая, кажется, работает, но я даже не уверен, обрабатывает ли она только исходящую задержку или обе:

tc qdisc add dev eth0 root netem delay 50ms

Любые сетевые гуру, которые могут мне помочь?

Редактировать:

После дальнейших исследований я достиг половины своей цели, используя эту команду, весь исходящий трафик ведет себя так, как я хочу:

tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000

Тем не менее, я до сих пор не смог должным образом ограничить входящий трафик. Я узнал, что должен использовать «Фильтр входного ограничителя», который я пытался сделать с помощью приведенной ниже команды, играя с разными значениями, но не повезло.

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop

Тем не менее, команда влияет на полосу пропускания. Приведенные выше значения приводят к тому, что скорость начинается со скоростью 2 МБ / с и, по мере передачи, медленно снижается примерно до 80-90 КБ / с, что достигается примерно через 30 секунд передачи.

Есть идеи, что я делаю не так?

YZFR1
источник
netem delay 50msне ограничивает время ожидания Это увеличивает задержку по 50msсравнению с тем, что было бы иначе.
Касперд
На самом деле вы правы. Убрано ограничение на количество слов, потому что это было увеличение на 50 мс, которое я действительно искал (так как это была виртуальная машина на том же компьютере, исходная задержка была достаточно близка к 0)
yzfr1

Ответы:

12

Я, наконец, решил просто установить исходящую пропускную способность / задержку на сервере, а затем сделать то же самое на клиенте, эффективно достигая того же результата.

Это команды, которые я выполнил на сервере и клиенте соответственно для достижения моих целей:

Сервер: 4 Мбит 50 мс

tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms

Клиент: 512 кбит 50 мс

tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms
YZFR1
источник
Я искал это месяцами. Благодарю. Один вопрос? Как вы удаляете правило? tc class del dev eth0 root показывает ответы RTNETLINK: нет такого файла или каталога
Nur
Это было несколько месяцев назад, но мне кажется, что этого достаточно, чтобы удалить корень qdisc: tc qdisc del dev eth0
yzfr1
2

Около 80-90 кБайт / с - это то, чего ожидать от

    tc filter add ... police rate 1.0mbit ...

Вы просите, чтобы входящие данные отбрасывались, когда они достигают скорости 1 мбит / с, то есть около 125 кБайт / с. Затем удаленный сервер опустится до значительно более низкого уровня (возможно, наполовину, не уверен). После этого все пакеты проходят, поэтому удаленный конец медленно набирает скорость, пока снова не будет достигнут 125 кБайт / с. Вы получаете среднюю пропускную способность значительно ниже 125 кБайт / с, что типично для формирования входа.

Я немного удивлен, что скорость должна достигать 2 МБ / с с уже установленным фильтром политики доступа. Где вы измеряли - на нисходящем клиенте (программе) или на каком-либо вышестоящем маршрутизаторе? Или, может быть, вы впервые установили соединение и только после этого включили фильтр политики входа?

Анонимный любитель Linux
источник