Обмежте вхідну та вихідну смугу пропускання та затримку в Linux


15

Я усвідомлюю, що багато подібних питань вже задавались, але поки що я ще не знайшов рішення своєї проблеми.

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

Що конкретно я хочу, це наступне:

  • Щоб встановити вхідну та вихідну затримку 50 мс.
  • Для встановлення межі пропускної здатності вхідного каналу 512 кбіт / с.
  • Для встановлення вихідної межі пропускної здатності 4096 кбіт / с.

Я читав нетем і використовував 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

Однак я все ще не зміг придушити належний трафік належним чином. Я дізнався, що я повинен використовувати фільтр "Ingress Policer", який я намагався робити саме за допомогою команди нижче, граючи з різними значеннями, але не пощастило.

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 секунд передачі.

Будь-які ідеї щодо того, що я роблю неправильно?


netem delay 50msне обмежує затримку. Це збільшує затримку в 50msпорівнянні з тим, що було б інакше.
kasperd

Дійсно, ви праві. Видалено обмеження слів, оскільки це було на 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

Я шукав цього місяцями. Спасибі. Одне питання? Як видалити правило? 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 Мбіт / с, коли вже введений фільтр політики введення. Де ви вимірювали - на нижньому клієнті (програмі) або на якомусь маршрутизаторі вище? Чи, можливо, ви спочатку запустили з'єднання і лише після цього ви натиснули на місце фільтр політики входу?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.