[shaping][rate][ceil] p2p-трафик "ест" больше положенного (класс для p2p-трафика, имея prio 90, отнимает! у классов с высшим )

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
cac2s
Сообщения: 8
ОС: Debian GNU/Linux

[shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение cac2s »

доброго времени суток.

нужно: зажать входящий торрент-трафик.
для этого выделил ему 5% гарантированной ширины с возможностью заимствования до 100%. hi-prio пакеты выделяю посредством анализа source port, всё остальное - low-prio.

проблема: при старте закачки торрент-клиентом скорость high-prio класса начинает падать ниже rate. так например если rate у high-prio класса 2048КБит, а у low-prio - 150Кбит, то максимум, что получает high-prio класс - порядка 400-500Кбит

методы тестирования: на одном компьютере стартую торрент-клиент, на другом - начинаю качать файл по http с сервера, способного отдавать на скорости, бОльшей чем моя гарантированная. результат смотрю как на самих клиентских компьютерах, так и на шлюзе, так что ошибки не может быть.

странность/закономерность (нужное подчеркнуть): если в high-prio классе количество соединений увеличивается - low-prio класс начинает "раскошеливаться", уменьшая свою скорость до числа, близкого к rate

схема:

Код: Выделить всё

+---------+
| root 1: |
+---------+
|
|  +---------------------------------------------+
+--| class 1:1 (нетранзитный трафик)             |
|  +---------------------------------------------+
|
|  +---------------------------------------------+
+--| class 1:2 (транзитный трафик)               | rate 100%
   +---------------------------------------------+
       |
       |  +-----------------------------------------+
       +--| class 1:5 (hi-prio)                     | ceil 95% rate 100% prio 5
       |  +-----------------------------------------+
       |       |      |      |      |      |
       |    +----+ +----+ +----+ +----+ +----+
       |    |1:10| |1:20| |1:30| |1:40| |1:50|
       |    +----+ +----+ +----+ +----+ +----+
       |
       |  +-----------------------------------------+
       +--| class 1:90 (low-prio)                   | ceil 5% rate 100% prio 90
          +-----------------------------------------+

скрипт:

Код: Выделить всё

#!/bin/bash

IPT="/sbin/iptables"
TC="/sbin/tc"
IP="/bin/ip"

DEV_IN="eth0"
RATE_IN="2750" # 90% от гарантированной провайдером

RATE_LOCAL="1gbit"
IP_LOCAL1="192.168.0.254"
IP_LOCAL2="192.168.0.253"
IP_LOCAL3="192.168.0.252"

$TC qdisc del dev $DEV_IN root >/dev/null 2>&1
$TC qdisc del dev $DEV_IN ingress >/dev/null 2>&1

$IP link set dev $DEV_IN qlen 32
$TC qdisc add dev $DEV_IN root handle 1: htb r2q 3

# Нетранзитный трафик
$TC class add dev $DEV_IN parent 1: classid 1:1 htb rate $RATE_LOCAL quantum 60000 prio 99
    $TC qdisc add dev $DEV_IN parent 1:1 pfifo

    $TC filter add dev $DEV_IN parent 1: prio 1 protocol ip u32 match ip src $IP_LOCAL1 flowid 1:1
    $TC filter add dev $DEV_IN parent 1: prio 1 protocol ip u32 match ip src $IP_LOCAL2 flowid 1:1
    $TC filter add dev $DEV_IN parent 1: prio 1 protocol ip u32 match ip src $IP_LOCAL3 flowid 1:1

# Транзитный трафик
$TC class add dev $DEV_IN parent 1: classid 1:2 htb rate ${RATE_IN}kbit prio 2

    # high-prio
    $TC class add dev $DEV_IN parent 1:2 classid 1:5 htb rate $[95*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 5
        $TC class add dev $DEV_IN parent 1:5 classid 1:10 htb rate $[5*$RATE_IN/100]kbit  ceil ${RATE_IN}kbit prio 10
        $TC class add dev $DEV_IN parent 1:5 classid 1:20 htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 20
        $TC class add dev $DEV_IN parent 1:5 classid 1:30 htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 30
        $TC class add dev $DEV_IN parent 1:5 classid 1:40 htb rate $[45*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 40
        $TC class add dev $DEV_IN parent 1:5 classid 1:50 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 50

        $TC qdisc add dev $DEV_IN parent 1:10 handle 10: sfq perturb 10
        $TC qdisc add dev $DEV_IN parent 1:20 handle 20: sfq perturb 10
        $TC qdisc add dev $DEV_IN parent 1:30 handle 30: sfq perturb 10
        $TC qdisc add dev $DEV_IN parent 1:40 handle 40: sfq perturb 10
        $TC qdisc add dev $DEV_IN parent 1:50 handle 50: sfq perturb 10

            $TC filter add dev $DEV_IN parent 10: prio 10 protocol ip handle 10 flow hash keys dst divisor 512
            $TC filter add dev $DEV_IN parent 20: prio 20 protocol ip handle 20 flow hash keys dst divisor 512
            $TC filter add dev $DEV_IN parent 30: prio 30 protocol ip handle 30 flow hash keys dst divisor 512
            $TC filter add dev $DEV_IN parent 40: prio 40 protocol ip handle 40 flow hash keys dst divisor 512
            $TC filter add dev $DEV_IN parent 50: prio 50 protocol ip handle 50 flow hash keys dst divisor 512

    # low-prio
    $TC class add dev $DEV_IN parent 1:2 classid 1:90 htb rate $[5*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 10 prio 90
        $TC qdisc add dev $DEV_IN parent 1:90 handle 90: sfq perturb 30
            $TC filter add dev $DEV_IN parent 90: prio 90 protocol ip handle 90 flow hash keys dst divisor 512

$IPT -t mangle -D POSTROUTING -o $DEV_IN -j SHAPER-IN >/dev/null 2>&1
$IPT -t mangle -F SHAPER-IN >/dev/null 2>&1
$IPT -t mangle -X SHAPER-IN >/dev/null 2>&1

$IPT -t mangle -N SHAPER-IN
$IPT -t mangle -I POSTROUTING -o $DEV_IN -j SHAPER-IN

# icmp, dns
$IPT -t mangle -A SHAPER-IN -p icmp -j CLASSIFY --set-class 1:10
$IPT -t mangle -A SHAPER-IN -p icmp -j RETURN
$IPT -t mangle -A SHAPER-IN -p udp --sport 53 -j CLASSIFY --set-class 1:10
$IPT -t mangle -A SHAPER-IN -p udp --sport 53 -j RETURN

# icecast
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 7000,8000 -j CLASSIFY --set-class 1:20
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 7000,8000 -j RETURN

# ssh, rdp
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 22,11122,3389 -j CLASSIFY --set-class 1:30
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 22,11122,3389 -j RETURN

# imap, imaps, pop3, pop3s
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 143,993,110,995 -j CLASSIFY --set-class 1:40
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 143,993,110,995 -j RETURN

# http, https; ftp(20,21) < 512KB
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 80,8080,443,20,21 -m connbytes --connbytes :524288 \n
    --connbytes-dir both --connbytes-mode bytes -j CLASSIFY --set-class 1:40
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 80,8080,443,20,21 -m connbytes --connbytes :524288 \n
    --connbytes-dir both --connbytes-mode bytes -j RETURN

# http, https; ftp(20,21)
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 80,8080,443,20,21,1935 -j CLASSIFY --set-class 1:50
$IPT -t mangle -A SHAPER-IN -p tcp -m multiport --sports 80,8080,443,20,21,1935 -j RETURN

# low priority
$IPT -t mangle -A SHAPER-IN -j CLASSIFY --set-class 1:90


подскажите, пожалуйста, что не так? уже все голову себе сломал!
неужели проблема в количестве соединений торрент-клиента? они ведь "ложаться" в класс с самым низким приоритетом, соответственно и отдаваться должны в последнюю очередь. ЧЯДНТ?
Спасибо сказали:
Tokra
Сообщения: 399

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение Tokra »

Для начала, как Вы из всего трафика собираетесь вычленять именно p2p трафик?
Спасибо сказали:
Аватара пользователя
cac2s
Сообщения: 8
ОС: Debian GNU/Linux

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение cac2s »

Tokra писал(а):
17.03.2011 14:51
Для начала, как Вы из всего трафика собираетесь вычленять именно p2p трафик?

блин, ну описАл ведь всё:
hi-prio пакеты выделяю посредством анализа source port, всё остальное - low-prio.

ну, и код скрипта посмотреть тоже не помешает :)
Спасибо сказали:
Tokra
Сообщения: 399

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение Tokra »

cac2s писал(а):
17.03.2011 14:56
Tokra писал(а):
17.03.2011 14:51
Для начала, как Вы из всего трафика собираетесь вычленять именно p2p трафик?

блин, ну описАл ведь всё:
hi-prio пакеты выделяю посредством анализа source port, всё остальное - low-prio.

ну, и код скрипта посмотреть тоже не помешает :)

Выделять торренты только анализируя сорц порт не получится. Посмотрите в сторону OpenDPI. и еще советую заглянуть вот сюда.
Спасибо сказали:
Аватара пользователя
cac2s
Сообщения: 8
ОС: Debian GNU/Linux

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение cac2s »

Tokra писал(а):
17.03.2011 15:02
советую заглянуть вот сюда.

наследил уже и там. пока ничего внятного

Tokra писал(а):
17.03.2011 15:02
Выделять торренты только анализируя сорц порт не получится.

возможно, но делал и такой эксперимент: у класса 1:90 закручивал ceil до 50% от общей ширины. результат - торрент-клиент качает на выделенных ему 50%.

ещё предположения? :)
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение Alex2ndr »

Хммм.... Если я правильно понимаю скрипт, то здесь шейпится трафик в одну сторону(вроде бы входящий). А во вторую что творится? Кроме того хочется знать какой тип канала - адсл, волокно и тд... т е хочется понимать его латентность. Ну и тарифы входящей исходящей озвучьте пожалуйста.

Ну и да - я согласен с Tokra - несмотря на ваш эксперимент с зажимание трафика торрент не ограничивается парой портов. Он использует их штук 5-6 минимум. Об этом говорят мои собственные эксперименты + долгие исследования структуры трафика в wireshark.

И еще а скажите - куда девается трафик, не попавший в фильтры? У вас фаером все режется? или как? Организуйте дефолтный класс и посмотрите попадает ли туда чего-либо.

И зарежте намертво UDP, кроме dns конечно. А то тут можно долго на кофейной гуще гадать.
Спасибо сказали:
Аватара пользователя
cac2s
Сообщения: 8
ОС: Debian GNU/Linux

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение cac2s »

в общем есть просветления/затемнения, но обо всём по порядку:
Alex2ndr писал(а):
17.03.2011 18:05
Хммм.... Если я правильно понимаю скрипт, то здесь шейпится трафик в одну сторону(вроде бы входящий). А во вторую что творится? Кроме того хочется знать какой тип канала - адсл, волокно и тд... т е хочется понимать его латентность. Ну и тарифы входящей исходящей озвучьте пожалуйста.
1. на отдачу тоже шейпится (аналочично входящему). с этим всё нормально, тем более исходящая ширина не забивается - проверенно.
2. адслl 3072/800

Alex2ndr писал(а):
17.03.2011 18:05
Ну и да - я согласен с Tokra - несмотря на ваш эксперимент с зажимание трафика торрент не ограничивается парой портов. Он использует их штук 5-6 минимум. Об этом говорят мои собственные эксперименты + долгие исследования структуры трафика в wireshark.
а в high-prio класс попадает только! перечисленный во второй части скрипта трафик, т.е. тот, который идет с 80,443,110,... портов. всё остальное - low-prio трафик, и ложится он в 1:90

Alex2ndr писал(а):
17.03.2011 18:05
И еще а скажите - куда девается трафик, не попавший в фильтры? У вас фаером все режется? или как? Организуйте дефолтный класс и посмотрите попадает ли туда чего-либо.
см. выше

теперь по поводу просветления:
с какого-то перепугу в вохлопе # tc -s class show dev eth0 prio у классов не те, что прописаны в скрипте:

Код: Выделить всё

# tc -s class show dev eth0
class htb 1:10 parent 1:5 leaf 10: [b]prio 7[/b] rate 137000bit ceil 2750Kbit burst 1599b cburst 1599b
Sent 387 bytes 3 pkt (dropped 0, overlimits 0 requeues 0)
rate 24bit 0pps backlog 0b 0p requeues 0
lended: 3 borrowed: 0 giants: 0
tokens: 1335765 ctokens: 66547

class htb 1:1 root leaf 8011: [b]prio 7[/b] rate 1000Mbit ceil 1000Mbit burst 1375b cburst 1375b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 187 ctokens: 187

class htb 1:2 root rate 2750Kbit ceil 2750Kbit burst 1599b cburst 1599b
Sent 14223498 bytes 11566 pkt (dropped 0, overlimits 0 requeues 0)
rate 2562Kbit 262pps backlog 0b 0p requeues 0
lended: 10865 borrowed: 0 giants: 0
tokens: -68428 ctokens: -68428

class htb 1:20 parent 1:5 leaf 20: [b]prio 7[/b] rate 275000bit ceil 2750Kbit burst 1599b cburst 1599b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 727265 ctokens: 72718

class htb 1:30 parent 1:5 leaf 30: [b]prio 7[/b] rate 275000bit ceil 2750Kbit burst 1599b cburst 1599b
Sent 8016 bytes 48 pkt (dropped 0, overlimits 0 requeues 0)
rate 864bit 1pps backlog 0b 0p requeues 0
lended: 48 borrowed: 0 giants: 0
tokens: 643640 ctokens: 64359

class htb 1:40 parent 1:5 leaf 40: [b]prio 7[/b] rate 1237Kbit ceil 2750Kbit burst 1599b cburst 1599b
Sent 37945 bytes 74 pkt (dropped 0, overlimits 0 requeues 0)
rate 2912bit 2pps backlog 0b 0p requeues 0
lended: 66 borrowed: 4 giants: 0
tokens: 144453 ctokens: 67064

class htb 1:50 parent 1:5 leaf 50: [b]prio 7[/b] rate 687000bit ceil 2750Kbit burst 1599b cburst 1599b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 291109 ctokens: 72718

class htb 1:5 parent 1:2 rate 2612Kbit ceil 2750Kbit burst 1599b cburst 1599b
Sent 46348 bytes 125 pkt (dropped 0, overlimits 0 requeues 0)
rate 3800bit 3pps backlog 0b 0p requeues 0
lended: 4 borrowed: 0 giants: 0
tokens: 67766 ctokens: 64359

class htb 1:90 parent 1:2 leaf 90: [b]prio 7 [/b]rate 137000bit ceil 2750Kbit burst 1599b cburst 1599b
Sent 14196562 bytes 11457 pkt (dropped 0, overlimits 0 requeues 0)
rate 2542Kbit 258pps backlog 0b 16p requeues 0
lended: 576 borrowed: 10865 giants: 0
tokens: -449479 ctokens: 4000

class sfq 90:101 parent 90:
(dropped 0, overlimits 0 requeues 0)
backlog 0b 16p requeues 0
allot 1432
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение Alex2ndr »

Твердой уверенности в чем дело у меня нет, поэтому буды выкладывать свои сомнения по порядку. Надеюсь применять вы их тоже по порядку будете.
1. 90% от скорости провайдера, да еще на торрентах... - имхо чересчур оптимистично. Поставьте эксперимента ради 60%. В принципе должно и на 80-85 быть нормально, но чтоб наверняка.

2. Я конечно не очень большой знаток, но мне кажется, что у вас странный синтаксис правил. В моем man tc это выглядит так:

Код: Выделить всё

       tc qdisc ... dev dev ( parent classid | root) [ handle major: ] htb [ default minor-id ]

       tc class ... dev dev parent major:[minor] [ classid major:minor ] htb rate rate [ ceil rate ] burst bytes [ cburst bytes ] [ prio priority ]

и никаких quantum и r2q я тут не вижу. Я конечно понимаю, что man странички за девелоперами угнаться не могут, но хотелось бы знать откуда дровишки...

3. Сделайте нормальный default класс, вместо текущей фильтрации всего оставшегося в 90 очередь. Т е переделайте одну строку вот так:

Код: Выделить всё

$TC qdisc add dev $DEV_IN root handle 1: htb default 90

и выкинте фильтрацию для этого класса.

4. Дайте вывод по очередям

Код: Выделить всё

tc -s qdisc show dev eth0
кроме того проверяйте, чтобы кол-во пакетов прошеших через конкретные класс/очередь совпадало с тем, что вы планировали. В данном случае у вас должно быть преобладание 1:90

5. prio 7 это вроде дефолтное значение... попробуйте давать приоритет не выходя за значение 7 - может на приоритет оставили всего один бит... но тут я конечно сомневаюсь... хотя попробовать никто не мешает.

6. И я надеюсь, что входящий трафик вашего шлюза == 0 (т е приложений шлюза). Иначе они будут жрать его невозбранно, т к таким как у вас способом входящий трафик самого сервера не ограничить. Это, кстати говоря, и может вносить ту самую погрешность.

7. Также надеюсь, что eth0 это интерфейс смотрящий в локалку, а в мир смотри что-нить иное - например eth1.
Спасибо сказали:
Аватара пользователя
cac2s
Сообщения: 8
ОС: Debian GNU/Linux

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение cac2s »

Alex2ndr писал(а):
18.03.2011 10:57
1. 90% от скорости провайдера, да еще на торрентах... - имхо чересчур оптимистично. Поставьте эксперимента ради 60%. В принципе должно и на 80-85 быть нормально, но чтоб наверняка.

согласен. с процентами экспериментировать нужно, но логично это делать после того, как разберусь с приоритетами классов/подклассов, которые сейчас не те, что нужно

Alex2ndr писал(а):
18.03.2011 10:57
2. Я конечно не очень большой знаток, но мне кажется, что у вас странный синтаксис правил. В моем man tc это выглядит так:

Код: Выделить всё

       tc qdisc ... dev dev ( parent classid | root) [ handle major: ] htb [ default minor-id ]

и никаких quantum и r2q я тут не вижу. Я конечно понимаю, что man странички за девелоперами угнаться не могут, но хотелось бы знать откуда дровишки...

это из-за вываливавшихся в syslog предупреждений:
HTB: quantum of class 10001 is big. Consider r2q change.

покапав в тырнете выяснил, что r2q и quantum высчитываются автоматически, но не всегда правильно/оптимально, поэтому при слишком больших/малых скоростях их нужно менять руками.
только что попробовал убрать r2q и запустить скрипт - предупреждение не вывалилось, но, убрав quantum у класса для транзитного класса, словил его опять (rate у этого класса 1Гбит). вернул quantum на место

Alex2ndr писал(а):
18.03.2011 10:57
3. Сделайте нормальный default класс, вместо текущей фильтрации всего оставшегося в 90 очередь. Т е переделайте одну строку вот так:

Код: Выделить всё

$TC qdisc add dev $DEV_IN root handle 1: htb default 90

и выкинте фильтрацию для этого класса.

дефолтный клас я убрал специально из-за добавленных фильтров к краевым дисциплинам, которые гарантируют деление ширины между dst, а не src,dst,proto,proto-src,proto-dst (по умолчанию), а в связи с этим указывая дефолтный класс, входящий трафик пропадал. если не ошибаюсь - это как-то связано с arp-пакетами. большего сказать не могу, ибо не такой большой спец.
но: выставить дефолтный класс и убрать фильтры краевых дисциплин - не проблема, пробовал и не раз. не меняло ничего.

Alex2ndr писал(а):
18.03.2011 10:57
4. Дайте вывод по очередям

Код: Выделить всё

tc -s qdisc show dev eth0
кроме того проверяйте, чтобы кол-во пакетов прошеших через конкретные класс/очередь совпадало с тем, что вы планировали. В данном случае у вас должно быть преобладание 1:90

оставлю на попозже - пока не разберусь с приоритетами классов

Alex2ndr писал(а):
18.03.2011 10:57
5. prio 7 это вроде дефолтное значение... попробуйте давать приоритет не выходя за значение 7 - может на приоритет оставили всего один бит... но тут я конечно сомневаюсь... хотя попробовать никто не мешает.

вот это дельные для меня слова. сутра занимаюсь этим. действительно: получается, что на приоритет выделен 1 бит, т.к. если prio выставить хотя бы 8, то в выхлопе # tc -s class show dev eth0 видно, что значение сбрасывается до 7
Спасибо сказали:
Аватара пользователя
cac2s
Сообщения: 8
ОС: Debian GNU/Linux

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение cac2s »

Alex2ndr писал(а):
18.03.2011 10:57
6. И я надеюсь, что входящий трафик вашего шлюза == 0 (т е приложений шлюза). Иначе они будут жрать его невозбранно, т к таким как у вас способом входящий трафик самого сервера не ограничить. Это, кстати говоря, и может вносить ту самую погрешность.
йес

Alex2ndr писал(а):
18.03.2011 10:57
7. Также надеюсь, что eth0 это интерфейс смотрящий в локалку, а в мир смотри что-нить иное - например eth1.
нууу, обижаете =)

упростил скрипт практически до нЕльзя + поменял prio:

Код: Выделить всё

#!/bin/bash

IPT="/sbin/iptables"
TC="/sbin/tc"
IP="/bin/ip"

DEV_IN="eth0"
RATE_IN="2750"

RATE_LOCAL="1gbit"
IP_LOCAL="192.168.0.100"

$TC qdisc del dev $DEV_IN root

$IP link set dev $DEV_IN qlen 32

$TC qdisc add dev $DEV_IN root handle 1: htb r2q 3

# Главный класс
$TC class add dev $DEV_IN parent 1: classid 1:1 htb rate $RATE_LOCAL

    # Транзитный трафик
    $TC class add dev $DEV_IN parent 1:1 classid 1:2 htb rate ${RATE_IN}kbit prio 0

        # high-prio
        $TC class add dev $DEV_IN parent 1:2 classid 1:5 htb rate $[95[quot]$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 0

        # low-prio
        $TC class add dev $DEV_IN parent 1:2 classid 1:90 htb rate $[5[/quot]$RATE_IN/100]kbit ceil $[75*$RATE_IN/100]kbit prio 1

    # Нетранзитный трафик
    $TC class add dev $DEV_IN parent 1:1 classid 1:99 htb rate $RATE_LOCAL quantum 60000 prio 1

ситуация изменилась, но все же есть косяки. вывод tc -s class show dev eth0 (упорядочил для более удобного сравнения с добавлением классов в скрипте):

class htb 1:1 root rate 1000Mbit ceil 1000Mbit burst 1375b cburst 1375b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 187 ctokens: 187

class htb 1:2 parent 1:1 rate 2750Kbit ceil 2750Kbit burst 1599b cburst 1599b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 72718 ctokens: 72718

class htb 1:5 parent 1:2 prio 0 rate 2612Kbit ceil 2750Kbit burst 1599b cburst 1599b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 76562 ctokens: 72718

class htb 1:90 parent 1:2 prio 1 rate 137000bit ceil 2062Kbit burst 1599b cburst 1599b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 1459843 ctokens: 96984

class htb 1:99 parent 1:1 prio 1 rate 1000Mbit ceil 1000Mbit burst 1375b cburst 1375b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 187 ctokens: 187

приоритеты стали нормальными, НО у 1:2 prio нет! (пробовал менять prio на 1,2,...) - ситуация не поменялась. почему так?
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение Alex2ndr »

cac2s писал(а):
18.03.2011 11:42
согласен. с процентами экспериментировать нужно, но логично это делать после того, как разберусь с приоритетами классов/подклассов, которые сейчас не те, что нужно

Раз уж вы проверяете шейпер, то выставите минимальный процент, т к вам не приходит мысль, что распределение трафика вполне может уехать к провайдеру из-за того, что более узкое место окажется у него? Это вполне может давать тот результат, который вы видите. А потом, когда все отладите - определите максимальный.

приоритеты стали нормальными, НО у 1:2 prio нет! (пробовал менять prio на 1,2,...) - ситуация не поменялась. почему так?

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

упростил скрипт практически до нЕльзя

Я надеюсь вы на самом деле очереди и фильтры из него не выкинули, а только здесь так показали? а то как оно работать то будет...
Спасибо сказали:
Аватара пользователя
cac2s
Сообщения: 8
ОС: Debian GNU/Linux

Re: [shaping][rate][ceil] p2p-трафик "ест" больше положенного

Сообщение cac2s »

Alex2ndr писал(а):
18.03.2011 13:41
Раз уж вы проверяете шейпер, то выставите минимальный процент, т к вам не приходит мысль, что распределение трафика вполне может уехать к провайдеру из-за того, что более узкое место окажется у него? Это вполне может давать тот результат, который вы видите. А потом, когда все отладите - определите максимальный.
на боевом сервере так и есть: гарантированная 3072, в скрипте - 2500

Alex2ndr писал(а):
18.03.2011 13:41
Возможно потому, что этот класс целиком наследует от родителя и является единственным наследником(т е не с кем приоритет делить) - все остальные наследуют от него. Пожалуй это единственное объяснение, которое приходит мне в голову. Попробуйте организовать еще один класс с rate 0(или очень маленьким), но тем, же родителем
в том-то и дело, что у 1:1 дочерних классов два: 1:2 и 1:90, т.е. конкуренция на лицо. и, исходя из этого, prio должен быть у обоих дочерних классов

Alex2ndr писал(а):
18.03.2011 13:41
Я надеюсь вы на самом деле очереди и фильтры из него не выкинули, а только здесь так показали? а то как оно работать то будет...
скрипт упростил, предварительно скинув его себе на ноут, чтобы разобраться с этими злосчастными prio классов. на боевом сервере всё как нужно: и дисциплины, и раскидывание трафика по классам.
Спасибо сказали: