Как определить приоритеты пропускной способности сети для каждого приложения?

20

Есть ли способ в Linux, чтобы дать конкретное приложение более / менее приоритетным для пропускной способности сети? Что-то вроде того, как niceработает приоритет процессора.

Контекст: в настоящее время у меня соединение с очень низкой пропускной способностью (ключ 3G). Хотя я выполняю довольно большое обновление с использованием aptitude, становится практически невозможно просматривать веб-страницы, так как загрузка обновления загружает мое интернет-соединение.

Поэтому я хотел бы как-то уменьшить приоритет полосы пропускания сети aptitudeпроцесса (и всех его дочерних элементов ), чтобы он не использовал слишком большую полосу пропускания, пока его использует другой процесс.

работа
источник
Использует ли aptitude определенный порт для своих соединений? Если это так, вы можете установить приоритет этого порта ниже, используя QoS на вашем маршрутизаторе (если ваш маршрутизатор имеет такую ​​возможность).
MaQleod
@MaQleod: 1) Нет, он использует HTTP для своих загрузок. 2) Поскольку я нахожусь в сети 3G, у меня нет маршрутизатора (ну, в любом случае, я не могу получить к нему доступ).
Работа
Я бы просто ограничил скорость загрузки aptitude / apt вместо того, чтобы пытаться играть с его приоритетом. Установите половину вашей максимальной пропускной способности, чтобы оставить ее для просмотра. Я попытался указать причину, по которой я не играл с QoS, в комментарии к ответу Каталина.
VTEST

Ответы:

8

Вы можете использовать force_bind, чтобы установить приоритет для всех сокетов приложения, а затем, используя Linux QoS (команда tc), вы можете назначить приложения диапазону приоритетов. Проверьте файл README для примера.

http://kernel.embedromix.ro/us/

Отказ от ответственности: я автор.

Пример:

14: Force priority (between 0 and 6 for non-root users). You can
        use 'tc' command from iproute to set-up 'prio' qdisc and to
        assign prio to queues:
        # 0. setup
        export FORCE_NET_VERBOSE=1
        export LD_PRELOAD=${LD_PRELOAD}:/usr/lib/force_bind.so
        # 1. Make sure you have a 'prio' qdisc attached to eth0, for example:
        tc qdisc add ev eth0 root handle 1: prio
        # 2. Assign applications to classed (bands):
        export FORCE_NET_PRIO=6 # interactive, band 0
        your_voip_program_here
        export FORCE_NET_PRIO=0 # best effort, band 1
        your_mail_program_here
        export FORCE_NET_PRIO=2 # bulk, band 2
        your_remote_backup_program_here
        # 3. Run tc statistics so you can see the classification:
        tc -s class show dev eth0

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

Каталин М. BOIE
источник
3
Спасибо за отказ от ответственности! В духе Super User было бы здорово, если бы вы могли привести пример здесь для всеобщего обозрения!
Slhck
1
Загрузка генерирует входящий трафик. QoS может определять исходящий трафик, но не может контролировать количество входящих данных. Чтобы это работало, необходимо управлять роутером между хостом и интернетом.
vtest
2
trickle(доступен по крайней мере , в убунту и Debian) будет делать это для вас , как хорошо, и может быть немного проще в использовании: trickle -d 1 -u 1 aptitude. Числа в килобайтах.
Танели
1
Что касается входящего трафика, возможно ли, чтобы некоторые типы входящего трафика имели более высокий приоритет над другими типами, даже если вы не можете управлять маршрутизатором? @vtest
CMCDragonkai
3
@taneli: trickleможет использоваться для установки ограничения полосы пропускания, но его нельзя использовать для определения приоритетов между процессами
a3nm