Як я можу визначити пріоритетність пропускної здатності мережі на основі програми за кожну програму?


20

Чи існує спосіб в Linux надати конкретній програмі більше / менше пріоритету для пропускної здатності мережі? Щось на кшталт того, як niceробить пріоритет процесора.

Контекст: Зараз я перебуваю на дуже низькій смузі пропускання (3G донгл). Хоча я виконую досить велике оновлення за допомогою aptitude, переглядати Інтернет стає практично неможливо, оскільки завантаження оновлення перетягує моє підключення до Інтернету.

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


Чи використовує aptitude певний порт для своїх з'єднань? Якщо так, ви можете встановити пріоритет цього порту нижче, використовуючи QoS у своєму маршрутизаторі (якщо ваш маршрутизатор має таку можливість).
MaQleod

@MaQleod: 1) Ні, для завантаження використовується HTTP. 2) Оскільки я в мережі 3G, у мене немає маршрутизатора (ну, жодного, до якого я не можу отримати доступ).
Робота

Я б просто обмежив швидкість завантаження здатності / 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.


3
Дякуємо за відмову! У дусі Супер Користувача, було б чудово, якби ви могли надати приклад тут, щоб усі бачили!
slhck

1
Завантаження генерує вхідний трафік. QoS може політикувати вихідний трафік, він не може контролювати кількість вхідних даних. Для цього потрібно керувати маршрутизатором між хостом та Інтернетом.
vtest

2
trickle(Доступний по крайней мере , в Убунту і Debian) буде робити це для вас , як добре, і може бути трохи простіше у використанні: trickle -d 1 -u 1 aptitude. Числа - кілобайти.
taneli

1
Що стосується вхідного трафіку, чи можна зробити, щоб певні типи вхідного трафіку мали більший пріоритет перед іншими типами, навіть якщо ви не можете керувати маршрутизатором? @vtest
CMCDragonkai

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