[РЕШЕНО] Приоритеты приложений в выходном траффике

32reg
А что если просто понизить приоритет кубитторрента?
Круг замкнулся. В стартовом посте я как раз и спрашивал - как это сделать.

Но время прошло, и сейчас у меня как бы работает такое решение: при старте системы выполняю нижеприведённый скрипт, а qbittorrent запускаю от юзера с uid=1000 (1000 - это не я).
tc qdisc add dev eth1 root handle 1: prio priomap 0 1 2
# Эта команда создаёт полосы (классы):
#  1:1 (приоритетный), 1:2 (средний), 1:3 (низкоприоритетный)

iptables  -t mangle -A OUTPUT -m owner --uid-owner 1000  -j CLASSIFY --set-class 1:3
iptables  -t mangle -A OUTPUT -m owner --uid-owner 1000  -j RETURN
# устанавливать класс 1:3 для пакетов от uid 1000 (qbittorrent)

iptables  -t mangle -A OUTPUT -j CLASSIFY --set-class 1:2
# устанавливать класс 1:2 для всех остальных
Классификация идёт правильно, судя по тому, что показывает tc -d -s class show dev eth1 | grep Sent. Но со скоростями есть непонятки (а может, показалось). Наберу статистику, отпишусь.
Круг замкнулся. В стартовом посте я как раз и спрашивал - как это сделать
Я про обычый приоритет, для процессора который, не про приоритет в сети.
Думаю что если уменьшить приоритет процесса, то он и не сможет забирать весь трафик
www.linux32.ru - новости и статьи о Linux
32reg
Круг замкнулся. В стартовом посте я как раз и спрашивал - как это сделать
Я про обычый приоритет, для процессора который, не про приоритет в сети.
Думаю что если уменьшить приоритет процесса, то он и не сможет забирать весь трафик
То есть если я запустил сборку ядра, то торрент встанет колом на всё это время, а если я, находясь у заказчика, хочу скачать что-то с ftp домашнего компьютера (который простаивает, бо меня дома нет), то торрент будет мне вовсю мешать? О таком черезжопном управлении трафиком я даже думать не хочу.
akorop
Классификация идёт правильно, судя по тому, что показывает tc -d -s class show dev eth1 | grep Sent. Но со скоростями есть непонятки (а может, показалось). Наберу статистику, отпишусь.
Не показалось. Иногда отправка почты прекрасно давит торрент, практически до нуля, а иногда наличие этих приоритетов никак не сказывается.
А не может ли быть дело в использовании UDP? Насколько я знаю, торрент-клиент может использовать как TCP, так и UDP, в зависимости от обстоятельств. В частности, при работе через DHT нормой является именно UDP. Из манов я не понял, вся эта техника приоритетов вообще применима ли к UDP...
32reg
Думаю что если уменьшить приоритет процесса, то он и не сможет забирать весь трафик
Зря ві так думаете.
Я бы лучше порылся на nag.ru.
Вы классифицируете исходящий трафик для своей сетевухи, а где вы его ограничиваете по скорости до аплоад минус 5-10%? Как мне кажется, прежде всего необходимо ограничить скорость исходящего трафика, т.к. скорость вашей сетевухи выше скорости, к. разрешает вам провайдер. Где узко там и происходит регулирование, т.е. если вы не ограничили исходящую скорость, то трафик подчиняется правилам провайдера, а не вашим, по крайней мере исходящий.
Ситуация: вы купили 1Мбит исходящей скорости, ни кто ни чего от сети не хочет и торрент получил полный доступ к каналу и с низким приоритетом гадит в сторону интернета как может, а может со скоростью 100Мбит. В это время вы решили открыть страничку в браузере. Я не знаю точно, пусть запрос будет аж 10кБайт, т.е. ~1/1000 от объема торрента. Но вы купили 1Мбит, а это значит, что 9/10 от исходящего трафика вашей сетевухи провайдер просто игнорирует. Вероятность попадания вашего высокоприоритетного запроса на входе провайдера в мусор почти 100%.
anode
а где вы его ограничиваете по скорости до аплоад минус 5-10%?
Насколько я понял описание дисциплины prio, она не разделяет канал пропорционально чему-то, а полностью отдаёт её потоку с бОльшим приоритетом. Вот цитата с опеннета: "Когда необходимо извлечь пакет из очереди, то первым проверяется класс :1. Каждый последующий класс проверяется только в том случае, если в предыдущем нет ни одного пакета."
Распределение пакетов по классам-полосам у меня идёт правильно, я проверял. А вот собственно приоритизация происходит как-то странно. У меня есть три полосы (это по умолчанию) с приоритетами 0,1,2. Так что, по идее, если в буфере полосы 1 (приоритет 0) хоть что-то есть, на выход должно идти оно, а то, что лежит в буфере полосы 3 (а пакеты торрента ложатся именно туда) должно так и лежать, пока буфер полосы 1 не опустеет.
Что касается ограничения скорости с моей стороны, то совсем просто это сделать не получится. У меня выход в интернет - через ADSL-модем, который также работает и WiFi-роутером. В компьютере у меня есть ftp-сервер, и очень удобно пересылать файлы между компьютером и всякими смартфонами-планшетами через ftp - и скорость приличная, и кабели втыкать не надо. То есть трафик компьютера через ethernet-интерфейс может идти как к провайдеру (с низкой скоростью), так и куда-то рядом через WiFi (с гораздо большей скоростью). Я понимаю, что всё это можно описать фильтрами, но надеялся обойтись малой кровью.
C prio сдался, с htb, вроде, сделал.
Вводная.
Есть ADSL-модем, он же, роутер, он же WiFi точка доступа. По ethernet подключён один компьютер (его мы и настраиваем), по WiFi - как получится. Локальная сеть (ethernet и WiFi) - 192.168.2.0/24. Реальная скорость WiFi - 3 Mbit с чем-то. Ограничение провайдера по отдаче в интернет - 120kbit.
Требуется сделать так, чтобы отдача торрентов (qtbittorrent) могла занимать весь интернет-канал, если он свободен, но отдавал канал всем, кому он может понадобиться. С WiFi всё это не должно пресекаться никак.

Решение. Запускаем qbittorrent от специального пользователя с uid=1000. При загрузке системы выполняем такой скрипт:
#!/bin/bash
tc qdisc add dev eth1 root handle 1: htb default 12

  # 1:2 локальная сеть (WiFi)
  tc class add dev eth1 parent 1: classid 1:2 htb rate 4000kbps ceil 4000kbps
    tc filter add dev eth1 protocol ip parent 1: u32 match ip dst 192.168.2.0/24 flowid 1:2

  # интернет: канал 120 кбит
  tc class add dev eth1 parent 1: classid 1:1 htb rate 120kbps ceil 200kbps

    # 1:11 торрент: низкая гарантированная скорость
    tc class add dev eth1 parent 1:1 classid 1:11 htb rate 005kbps ceil 200kbps

    # 1:12 остальные: высокая гарантированная скорость
    tc class add dev eth1 parent 1:1 classid 1:12 htb rate 105kbps ceil 200kbps

iptables  -t mangle -A OUTPUT -m owner --uid-owner 1000  -j CLASSIFY --set-class 1:11
# устанавливать класс 1:11 для пакетов от uid 1000 (qbittorrent)
Иллюстрация (графики получены в conky, красные линии дорисовал руками):
Пояснения к вертикальным линиям (слева направо):
  1. запустил скачивание файла из компьютера в планшет;
  2. запустил заливку почты с большим вложением;
  3. прервал скачивание файла;
  4. прервал заливку почты
Почему ceil 200 если
akorop
Ограничение провайдера по отдаче в интернет - 120kbit.
Если вы расширяете полосу до 200, а провайдер разрешил вам 120, то действуют уже не ваши правила, а провайдера. Я думаю, что ceil 120 или даже 110.
anode
Если вы расширяете полосу до 200, а провайдер разрешил вам 120, то действуют уже не ваши правила, а провайдера. Я думаю, что ceil 120 или даже 110.
Тут не так всё просто. Иногда реальная скорость поднимается заметно выше, чем 120. Я предполагаю, что 120 - это ограничение на "далёкий" интернет, а с узлами, входящими в национальную сеть провайдера, скорость выше. Кстати, аналогичное явление наблюдается и по вводу.
А чисто практически результат меня вполне устраивает - см. графики.
 
Зарегистрироваться или войдите чтобы оставить сообщение.