Ограничение пропускной способности сети уже запущенного процесса? (Linux / FreeBSD)

10

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

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

jbdenis
источник
Вы имели в виду "струйка"?
Помогите
Редактировать: я предположил, что «струйка» была предназначена.
Стивен Понедельник,

Ответы:

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

Процесс получения сетевых портов, которые использует процесс. Как только вы узнаете, какие порты используются, вы можете использовать правила 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 «owner» (см. Примечание под таблицей здесь ). На самом деле, только эта ассоциация (пакет-процесс) кажется сложной, в то время как мы можем легко сделать все остальное, то есть фильтровать и ограничивать пакеты довольно эффективно.

питр
источник
0

Я не думаю, что есть готовое решение для этого. Но, используя стандартные инструменты Linux, вы можете взломать скрипт, который сделает это.

Во-первых, вы можете получить список всех соединений определенного процесса с помощью lsof. Затем вы можете создать входные политики с помощью tc для этих соединений.

Thor
источник
0

Грубо говоря, если вы доведите процесс до +20, то все, что работает в системе, получит приоритет, и задание будет планироваться реже, поэтому будет труднее заполнять буферы или обрабатывать пакеты, что должно привести к некоторому TCP дросселирование. Это будет спорадическим, но может помочь достаточно.

# renice 20 -p $pid
Фил П
источник
1
Это очень обходной способ управления полосой пропускания, и он действительно будет работать только в том случае, если система очень сильно загружена. На незанятой системе evan процесс, обработанный до -20, будет по-прежнему загружаться в ЦП так часто, как он этого хочет.
voretaq7
Да, но если эта пропускная способность не используется другими локальными компьютерами, то, если машина простаивает, вам, в основном, все равно, получает ли этот процесс всю пропускную способность. Только тогда, когда есть другой процесс, который пытается использовать пропускную способность, это имеет значение. У нас могут быть разные определения «очень сильно загруженных» - если пытается запустить другой процесс, он получает приоритет и поэтому, если средняя загрузка> = 1 на ядро, это может помочь. Я заметил, что он сырой, но если это единственный доступный инструмент (FreeBSD), то, по крайней мере, стоит попробовать.
Фил П