Обмеження пропускної здатності мережі вже запущеного процесу? (Linux / FreeBSD)


10

Чи є яка-небудь утиліта для обмеження пропускної здатності мережі після його запуску? Простий приклад: ви зазначаєте, що користувач приймає всю пропускну здатність завантаження за допомогою scp, і ви хочете обмежити швидкість або зменшити пріоритет передачі.

Я думаю, що я міг би використати комбінацію iptables / tc або pf, щоб досягти цього, але мені було цікаво, чи є в наявності інструмент "один удар" (як, наприклад, стручковий параметр --pid ^)?


Ви мали на увазі "струк"?
перерва

Редагувати: я припускав, що "струмка" була призначена.
Стівен, понеділок,

Відповіді:


3

На жаль, для FreeBSD такого рішення немає. Існує багато рішень, таких як dummynet / ipfw або altq / pf, які використовуються для обмеження використання мережі на основі різних моделей, але не на pids.

У Linux існує спосіб обмеження використання мережі на основі користувача:

iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner test -j MARK --set-mark 1

Я думаю, що немає рішення щодо обмеження використання мережі на основі pid.


2
Ipfw

1

Якщо в процесі отримання мережевих портів, які використовує Proc. Коли ви дізнаєтесь, які порти використовуються, ви можете використовувати правила IPTABLES для обмеження швидкості цих портів. Ці статті повинні дати вам кращу ідею: http://linux-ip.net/articles/Traffic-Control-HOWTO/ http://blog.edseek.com/~jasonb/articles/traffic_shaping/ http: // wikis. sun.com/pages/viewpage.action?pageId=49906332


0

В Linux навіть комбінація iptables та tc може бути важкою проблемою, оскільки параметр "--pid-owner" був відмовлений від модуля iptables "власник" (див. Примітку нижче таблиці тут ). Насправді, лише ця асоціація (пакетний процес) здається складною, тоді як ми можемо легко зробити все інше, тобто фільтрувати та обмежувати пакети досить ефективно.


0

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

По-перше, ви можете отримати список усіх з'єднань конкретного процесу з lsof. Тоді ви можете створити політику введення за допомогою tc для цих з'єднань.


0

Грубо кажучи, якщо ви сподобаєтеся процесу до +20, то все, що працює в системі, отримає пріоритет, і завдання плануватиметься рідше, тому важче буде заповнювати буфери або пакети процесів, що повинно призвести до деяких TCP дроселювання. Це буде спорадично, але може допомогти достатньо.

# renice 20 -p $pid

1
Це дуже обхідний спосіб намагатися контролювати пропускну здатність і дійсно працюватиме лише в тому випадку, якщо система дуже сильно завантажена - у режимі очікування процес, який переноситься на -20, все одно потраплятиме на процесор так часто, як хоче.
voretaq7

Правильно, але якщо це не пропускна здатність, яку ділиться з іншими локальними комп'ютерами, то, якщо машина не працює, то вам переважно все одно, чи цей процес отримує всю пропускну здатність. Це має значення лише тоді, коли є інший процес, який намагається використовувати пропускну здатність. У нас можуть бути різні визначення поняття "дуже сильно завантажений" - якщо є інший процес, який намагається запустити, він отримує пріоритет, і якщо середнє навантаження>> 1 на ядро, це може допомогти. Я зауважив, що це сирий, але якщо це єдиний доступний інструмент (FreeBSD), то, принаймні, варто його зняти.
Phil P
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.