Як зменшити пропускну здатність на мережевому інтерфейсі Linux?


Відповіді:


32

Netem модуль ядра, керований iproute.

Вам потрібно компілювати Netem з ядром:

Networking -->
   Networking Options -->
     QoS and/or fair queuing -->
        Network emulator

Після завантаження netem-модуля, tc iproute дозволяє вам:

tc qdisc add dev  tap0 root netem delay 50ms loss 50% 

(50% втрати пакету, додаткова затримка 50 мс)


Так, це дуже гарний модуль для цих речей. Я не можу повірити, що ніхто до цього часу не відповів ...

Я використовую це для тестування серверів локально (на localhost), оскільки це було стандартним у всіх дистрибутивах протягом багатьох років. Щоб додати 20ms затримки "tc qdisc, додайте dev lo root handle 1: 0 netem затримка 20msec", а щоб видалити його "tc qdisc del dev lo root"
pixelbeat

1
Швидка примітка: модуль ядра є sch_netem. Зазвичай не потрібно завантажувати його вручну, він завантажується автоматично за потреби.
sleske


Моя версія netem (Ubuntu 13.10) також має можливість обмежити смугу пропускання з допомогою rateопції: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000. Слід зазначити , що для деяких пристроїв , таких як lo(для доступу до Localhost), вам необхідно встановити довжину черги , а також: ifconfig lo txqueuelen 1000. Дивіться serverfault.com/a/394949/76090
z0r

27

Сторона клієнта, правда?

струмок повинен робити те, що ти хочеш. Якщо ви працюєте з Ubuntu (або, я думаю, Debian), ви можете встановити його sudo apt-get install trickleі запустити. trickle -s -d 10 -u 10 firefox(або так, я не використовував його деякий час) запускав би firefox, обмежуючи швидкість завантаження та завантаження до 10 кілобайт в секунду.


Дякую за цю пораду. Чомусь дрібничка не спрацювала б для мене з Firefox, але вона добре працювала з google-chrome. (Ubuntu 9.10 64bit)
Том

6
струк працює, перехоплюючи виклики для з'єднання в стандартних функціях бібліотеки для передачі TCP - якщо у додатку ці функції статично пов'язані під час компіляції, це не може працювати.
Девід Спіллетт

16

Я знайшов спосіб уникнути того, щоб ящик не з'їдав всю пропускну здатність, доступну в мережі, використовуючи інструмент під назвою "wondershaper" в ubuntu. Я сподіваюся, що він існує і в інших Linux знищує. Я можу обмежити пропускну здатність того, що може споживати мій домашній ПК Linux за допомогою наступної команди.

sudo wondershaper eth0 1000 200

Це обмежує ліміт завантаження до 1000 кілобітів, а накладення - до 200 кілобітів. Для отримання додаткової інформації та варіантів зверніться до підручних сторінок чудес.


1
Це не зовсім те, що шукає ОП (йдеться про збереження пропускної здатності, а не про цілеспрямоване погіршення зв'язку), але все-таки добре знати.
sleske

1
BTW: Це пакет wondershaperу Debian.
sleske

З цим хиткою роботою / у нас були проблеми в офісі з насиченням пропускної здатності, виникла підтримка, яку я не міг перервати, і мені вдалося виправити це двома простими лініями: # apt-get install wondershaper then # wondershaper eth0 9999999 500 ще раз дякую!
помаранчевий80

4
Схоже, у чудес є деякі математичні проблеми. Щоб отримати шлях на 1 Мбіт / с вгору / вниз, ми в кінцевому підсумку використовували 28096 замість 1024. Хоча немає поняття, чому це сталося.
boatcoder

Для скидання використовуйте:sudo wondershaper clear eth0
Лео Лам

8

NIST зробить мережевий симулятор під назвою NistNet.

http://snad.ncsl.nist.gov/nistnet/ (посилання здається мертвим)

http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/

NistNet дозволяє зробити маршрутизатор, який імітує комунікаційне посилання на ваш вибір.

Для найпростішої експлуатації ви маєте його на коробці з двома мережами NIC між двома мережами.

Наприклад, у мене була програма, яка мала працювати над супутниковим зв’язком.

Дані можуть переходити по 2Мбіт / с посилання з великими затримками. Контроль повинен був пройти по 128 Кбіт / с, з однаковою затримкою.

NistNet допоміг все це працювати на 128 кбіт / с.

Використовуючи NistNet, я міг би імітувати не тільки пропускну здатність, але й затримку, і вона також скидає пакети для вас, імітуючи зайняте або ненадійне посилання.

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

Не забудьте також фрагментувати пакети. Ви можете встановити приємні невеликі MTU за фальшивим посиланням.

Додавання тремтіння пакетів IIRC дозволить вам з’ясувати, чи зможете ви впоратися з пакетами, що не вийшли із порядку.


NistNet давно не оновлюється, чи не так? IMO, найкращий спосіб на сьогодні - це модуль netem, який вже існує у всіх останніх ядрах.

Можливо, ви зможете змоделювати машину з 2 NIC за допомогою VM.
Скотт

посилання не працює
Hasen

Посилання працює для мене.
tripleee

4

В минулому я особисто використовував дивовижник для цього, хоча це було написано для зворотного випадку використання - максимально використовуючи ваш ADSL-з'єднання.

Мені доведеться спробувати інші згадані тут.


3

Ви можете використовувати локально встановлений проксі-сервер для обмеження пропускної здатності, наприклад, для тестування веб-сторінки на повільному посиланні:

  1. Встановіть проксі-кальмар зі свого дистрибутива - на моїй Fedora це було так само просто yum install squid.

  2. Додайте до /etc/squid/squid.conf:

    delay_pools 1
    delay_class 1 1
    delay_access 1 allow all
    delay_parameters 1 16000/16000

    Це обмежить пропускну здатність приблизно до 128 кбіт / с (16000 Bps).

  3. Почніть кальмари :/etc/init.d/squid start

  4. Налаштуйте браузер для використання localhostпорту проксі-сервера 3128.



3

Ще ніхто не згадав ip_relay , названий "iprelay" у сховищах Debian. Він працює в якості TCP - проксі, а не перехоплює виклики, як цівка робить, і буде працювати з будь-яким додатком , яке може використовувати проксі - сервер (наприклад, веб - браузер) або прийняти певний користувачем порт призначення (Telnet, SSH, FTP, завиток, et cetera ).

Налаштувати їх трохи складніше, але часто це працює в ситуаціях, коли струмок не буде.


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