Jump to content

[tc][htb] два варианта реализации, но ни одного корректно работающего


Recommended Posts

Posted (edited)

нужно: зажать входящий p2p-трафик. для этого выделил ему 5% гарантированной ширины с возможностью заимствовать до 100%.

 

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

 

первый вариант:

 

+---------+
| root 1: |
+---------+
|
|  +-----------------------------------------+
+--| class 1:1 нетранзитный трафик           |
|  +-----------------------------------------+
|
|  +-----------------------------------------+
+--| class 1:2 транзитный трафик (hi-prio)   |
|  +-----------------------------------------+
|       |       |       |       |       |
|    +-----+ +-----+ +-----+ +-----+ +-----+
|    | 1:5 | | 1:8 | |1:10 | |1:20 | |1:30 |
|    +-----+ +-----+ +-----+ +-----+ +-----+
|
|  +-----------------------------------------+
+--| class 1:90 транзитный трафик (low-prio) |
   +-----------------------------------------+

 

$TC qdisc add dev $DEV_IN root handle 1:0 htb r2q 3
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL1 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL2 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL3 classid 1:1

    $TC filter add dev $DEV_IN parent 1:0 prio 5 handle 5  protocol ip fw flowid 1:5
    $TC filter add dev $DEV_IN parent 1:0 prio 8 handle 8  protocol ip fw flowid 1:8
    $TC filter add dev $DEV_IN parent 1:0 prio 10 handle 10 protocol ip fw flowid 1:10
    $TC filter add dev $DEV_IN parent 1:0 prio 20 handle 20 protocol ip fw flowid 1:20
    $TC filter add dev $DEV_IN parent 1:0 prio 30 handle 30 protocol ip fw flowid 1:30
    $TC filter add dev $DEV_IN parent 1:0 prio 90 handle 90 protocol ip fw flowid 1:90

    $TC class add dev $DEV_IN parent 1:0 classid 1:1 htb rate $RATE_LOCAL quantum 60000 prio 99
        $TC qdisc add dev $DEV_IN parent 1:1 pfifo

    $TC class add dev $DEV_IN parent 1:0 classid 1:2 htb rate $[90*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 1
        $TC class add dev $DEV_IN parent 1:2 classid 1:5  htb rate $[5*$RATE_IN/100]kbit  ceil ${RATE_IN}kbit prio 5
        $TC class add dev $DEV_IN parent 1:2 classid 1:8  htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 8
        $TC class add dev $DEV_IN parent 1:2 classid 1:10 htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 10
        $TC class add dev $DEV_IN parent 1:2 classid 1:20 htb rate $[45*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 20
        $TC class add dev $DEV_IN parent 1:2 classid 1:30 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 30

        $TC filter add dev $DEV_IN parent 5:  prio 5 protocol ip handle 8  flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 8:  prio 8 protocol ip handle 8  flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 10: prio 10 protocol ip handle 10 flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 20: prio 20 protocol ip handle 20 flow hash keys dst divisor 256
        $TC filter add dev $DEV_IN parent 30: prio 30 protocol ip handle 30 flow hash keys dst divisor 256

    $TC class add dev $DEV_IN parent 1:0 classid 1:90 htb rate $[5*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 10
        $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

 

при таком варианте игнорируются ceil классов 1:2 и 1:90, т.е. ни 1:2, ни 1:90 не могут "разгонятся" до 100%

 

второй вариант:

 

+---------+
| root 1: |
+---------+
|
|  +---------------------------------------------+
+--| class 1:1 нетранзитный трафик               |
|  +---------------------------------------------+
|
|  +---------------------------------------------+
+--| class 1:2 транзитный трафик                 |
    +---------------------------------------------+
       |
       |  +-----------------------------------------+
       +--| class 1:3 (hi-prio)                     |
       |  +-----------------------------------------+
       |       |       |       |       |       |
       |    +-----+ +-----+ +-----+ +-----+ +-----+
       |    | 1:5 | | 1:8 | |1:10 | |1:20 | |1:30 |
       |    +-----+ +-----+ +-----+ +-----+ +-----+
       |
       |  +-----------------------------------------+
       +--| class 1:90 (low-prio)                   |
          +-----------------------------------------+

 

$TC qdisc add dev $DEV_IN root handle 1:0 htb r2q 3
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL1 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL2 classid 1:1
    $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip u32 match ip src $IP_LOCAL3 classid 1:1

    $TC filter add dev $DEV_IN parent 1:0 prio 5 handle 5  protocol ip fw flowid 1:5
    $TC filter add dev $DEV_IN parent 1:0 prio 8 handle 8  protocol ip fw flowid 1:8
    $TC filter add dev $DEV_IN parent 1:0 prio 10 handle 10 protocol ip fw flowid 1:10
    $TC filter add dev $DEV_IN parent 1:0 prio 20 handle 20 protocol ip fw flowid 1:20
    $TC filter add dev $DEV_IN parent 1:0 prio 30 handle 30 protocol ip fw flowid 1:30
    $TC filter add dev $DEV_IN parent 1:0 prio 90 handle 90 protocol ip fw flowid 1:90

    $TC class add dev $DEV_IN parent 1:0 classid 1:1 htb rate $RATE_LOCAL quantum 60000 prio 99
        $TC qdisc add dev $DEV_IN parent 1:1 pfifo

    $TC class add dev $DEV_IN parent 1:0 classid 1:2 htb rate ${RATE_IN}kbit ceil ${RATE_IN}kbit prio 1
        $TC class add dev $DEV_IN parent 1:2 classid 1:3 htb rate $[90*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 1
            $TC class add dev $DEV_IN parent 1:3 classid 1:5  htb rate $[5*$RATE_IN/100]kbit  ceil ${RATE_IN}kbit prio 5
            $TC class add dev $DEV_IN parent 1:3 classid 1:8  htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 8
            $TC class add dev $DEV_IN parent 1:3 classid 1:10 htb rate $[10*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 10
            $TC class add dev $DEV_IN parent 1:3 classid 1:20 htb rate $[45*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 20
            $TC class add dev $DEV_IN parent 1:3 classid 1:30 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit prio 30

            $TC qdisc add dev $DEV_IN parent 1:5  handle 5:  sfq perturb 10
            $TC qdisc add dev $DEV_IN parent 1:8  handle 8:  sfq perturb 10
            $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 filter add dev $DEV_IN parent 5:  prio 5  protocol ip handle 8  flow hash keys dst divisor 256
            $TC filter add dev $DEV_IN parent 8:  prio 8  protocol ip handle 8  flow hash keys dst divisor 256
            $TC filter add dev $DEV_IN parent 10: prio 10 protocol ip handle 10 flow hash keys dst divisor 256
            $TC filter add dev $DEV_IN parent 20: prio 20 protocol ip handle 20 flow hash keys dst divisor 256
            $TC filter add dev $DEV_IN parent 30: prio 30 protocol ip handle 30 flow hash keys dst divisor 256

        $TC class add dev $DEV_IN parent 1:2 classid 1:90 htb rate $[5*$RATE_IN/100]kbit ceil ${RATE_IN}kbit 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

 

при таком варианте 1:90 съедает около 70% от допустимого rate родительского класса (1:2), оставляя с носом класс 1:3

 

подскажите, пожалуйста, ЧЯДНТ!

Edited by cac2s
Posted (edited)
при таком варианте 1:90 съедает около 70% от допустимого rate родительского класса (1:2), оставляя с носом класс 1:3
А вы уверены, что именно в тот момент когда 70% съедает 1:90. 1:3 требует больше чем ему предоставляется?

Да, и шейпера накрутить % на 5-10 меньше реально доступного внешнего канала. Т.к. шейпят не совсем точно.

Edited by NiTr0
Posted
А вы уверены, что именно в тот момент когда 70% съедает 1:90. 1:3 требует больше чем ему предоставляется?
уверен, т.к. проводил эксперимент след. образом - на одной машине ставил закачку файла по http с внешнего сервера (отдача до 90Мбит), на другом - запускал torrent-закачку, а на шлюзе смотрел iftop'ом кому какая ширина выделяется.

з.ы.: http ложится в 1:3, а p2p в 1:90, т.к. является неклассифицируемым трафиком.

 

Да, и шейпера накрутить % на 5-10 меньше реально доступного внешнего канала. Т.к. шейпят не совсем точно.
так и сделал: доступная скорость - 3072Кбит, в шейпере выставлено - 2750
Posted
У вас для обоих случаев RATE 1:3 < SUM(RATES) от лифов. 90 < 95.
  1. 1:3 присутствует только во втором варианте
  2. с сумой 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

 

заметил ещё такую особенность: если в классе 1:2 количество соединений увеличивается - 1:90 начинает отдавать незаконно отобранное. так при 10 коннектах/закачках 1:90 "скукоживается" практически до своего rate

Posted (edited)

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

Edited by Dark_Angel
Posted
А можете показать статистику по корзинам в корневых классах для одного потока ( когда работает не правильно ). Ведь, если у класса ниже рейт, то и корзина должна быть поменьше, со всеми вытекающими.
не совсем понял про корзины, поэтому сделаю предположение, что интересует вывод # tc -s qdisc:

 

qdisc htb 1: dev eth0 root refcnt 2 r2q 3 default 0 direct_packets_stat 14
Sent 5569475 bytes 4900 pkt (dropped 0, overlimits 2293 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0 
qdisc pfifo 800b: dev eth0 parent 1:1 limit 32p
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0 
qdisc sfq 10: dev eth0 parent 1:10 limit 127p quantum 1514b perturb 10sec 
Sent 4772 bytes 21 pkt (dropped 0, overlimits 0 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0 
qdisc sfq 20: dev eth0 parent 1:20 limit 127p quantum 1514b perturb 10sec 
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0 
qdisc sfq 30: dev eth0 parent 1:30 limit 127p quantum 1514b perturb 10sec 
Sent 24714 bytes 181 pkt (dropped 0, overlimits 0 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0 
qdisc sfq 40: dev eth0 parent 1:40 limit 127p quantum 1514b perturb 10sec 
Sent 1226957 bytes 1534 pkt (dropped 0, overlimits 0 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0 
qdisc sfq 50: dev eth0 parent 1:50 limit 127p quantum 1514b perturb 10sec 
Sent 4271974 bytes 2855 pkt (dropped 0, overlimits 0 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0 
qdisc sfq 90: dev eth0 parent 1:90 limit 127p quantum 1514b perturb 30sec 
Sent 33110 bytes 288 pkt (dropped 0, overlimits 0 requeues 0) 
rate 0bit 0pps backlog 0b 0p requeues 0

 

особенно если полосы измеряются в единицах Мбит.
везде прописано kbit
Posted (edited)

Интересует вывод tc -s class show .... во время нагрузки и не правильной работы.

 

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

Edited by Dark_Angel
Posted
Интересует вывод tc -s class show .... во время нагрузки и не правильной работы.

 

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

прошу прощение. вот интересующий Вас вывод:

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

class htb 1:1 root leaf 800b: prio 7 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 60991406 bytes 48903 pkt (dropped 0, overlimits 0 requeues 0) 
rate 2721Kbit 251pps backlog 0b 0p requeues 0 
lended: 13370 borrowed: 0 giants: 0
tokens: -64237 ctokens: -64237

class htb 1:20 parent 1:5 leaf 20: prio 7 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: prio 7 rate 275000bit ceil 2750Kbit burst 1599b cburst 1599b 
Sent 112178 bytes 673 pkt (dropped 0, overlimits 0 requeues 0) 
rate 1968bit 2pps backlog 0b 0p requeues 0 
lended: 673 borrowed: 0 giants: 0
tokens: 629094 ctokens: 62906

class htb 1:40 parent 1:5 leaf 40: prio 7 rate 1237Kbit ceil 2750Kbit burst 1599b cburst 1599b 
Sent 7148209 bytes 8549 pkt (dropped 0, overlimits 0 requeues 0) 
rate 45040bit 5pps backlog 0b 0p requeues 0 
lended: 6668 borrowed: 1681 giants: 0
tokens: 154406 ctokens: 69453

class htb 1:50 parent 1:5 leaf 50: prio 7 rate 687000bit ceil 2750Kbit burst 1599b cburst 1599b 
Sent 36803917 bytes 25167 pkt (dropped 0, overlimits 0 requeues 0) 
rate 1597Kbit 136pps backlog 0b 0p requeues 0 
lended: 9545 borrowed: 15622 giants: 0
tokens: -90655 ctokens: 6187

class htb 1:5 parent 1:2 rate 2612Kbit ceil 2750Kbit burst 1599b cburst 1599b 
Sent 44164808 bytes 34838 pkt (dropped 0, overlimits 0 requeues 0) 
rate 1656Kbit 144pps backlog 0b 0p requeues 0 
lended: 15746 borrowed: 1566 giants: 0
tokens: 6516 ctokens: 6187

class htb 1:90 parent 1:2 leaf 90: prio 7 rate 137000bit ceil 2750Kbit burst 1599b cburst 1599b 
Sent 16870700 bytes 14098 pkt (dropped 40, overlimits 0 requeues 0) 
rate 1028Kbit 102pps backlog 0b 33p requeues 0 
lended: 2261 borrowed: 11804 giants: 0
tokens: -770432 ctokens: 8313

class sfq 90:74 parent 90: 
(dropped 0, overlimits 0 requeues 0) 
backlog 0b 33p requeues 0 
allot 1498

Posted

Что-то я не понимаю:

1. Почему у класса 1:90 prio 7?

2. Почему у класса 1:5 прио вообще нет?

 

Далее анализ:

Судя по статистике в корзине у 1:5 токены есть, а дропов нет. Если в этом классе работает TCP, то наверняка он пожал размер окна, как только пинг вырос. Попробуйте качать в 2-3 потока, либо грузить по UDP.

Posted
Что-то я не понимаю:

1. Почему у класса 1:90 prio 7?

2. Почему у класса 1:5 прио вообще нет?

тоже обратил внимание,когда выложил вывод. причем prio 7 не только у 1:90... но ведь в скрипте prio прописаны! всё! остатки мозга закипают
Далее анализ:

Судя по статистике в корзине у 1:5 токены есть, а дропов нет. Если в этом классе работает TCP, то наверняка он пожал размер окна, как только пинг вырос. Попробуйте качать в 2-3 потока, либо грузить по UDP.

с запущенным торрентом на одной машине и тремя закачками с http на другой:

# tc -s class show dev eth0
class htb 1:10 parent 1:5 leaf 10: prio 7 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: prio 7 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: prio 7 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: prio 7 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: prio 7 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: prio 7 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: prio 7 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

Posted (edited)

burst неплохо бы увеличить ИМХО.

пробовал. не помогло. возможно не там пробовал, но сейчас очень сильно заело откуда для основной массы классов берётся prio 7, а для некоторых вообще его нет?! что-то подсказывает, что от сюда и растут ноги...

Edited by cac2s
Posted (edited)

Бурсты автоматом - ок. Крутить их надо для спецеффектов пользователям. На сколько я понимаю, сейчас проблема не в них, поэтому лучше оставить как есть.

 

Судя по тому , что я вижу 1:90 назанимал токенов у родителя, что нормально, а класс 1:40, который, как я понимаю, должен менеджить закачки с http ничего и не пытается сделать. Вы размер окна посмотрите для закачек. Если вы начали качать после того, как торрент выжрал свой класс, то TCP не разгонится. Хотя, я думаю, что торрент вынесет TCP при таком балансинге. Начнет увеличиваться джиттер и TCP на закачках начнет сдуваться, а торрент пиров добавит.

 

Лучше для упрощения ситуации проверьте на предсказуемых передачах, тем более для вашей скорости можно спокойно сделать и в одном и в другом классе просто http закачки.

 

UPD. Я вам сразу секрет открою: если вы всё это затеяли, чтобы пользователи с торрентами, могли не выключая торренты сайтики открывать, то вам надо торренту давать 80-90% полосы максмум, чтобы второму классу хоть что-то оставалось, чтоб начать выдавливать торрент. Но тогда нучнуться возмущения, "где мои 2 Мбита", "почему я могу качать только на 1.5". А если делать с полным перекрытием, как у Вас, да еще и на таком канале, то оно работать не будет, особенно где торрент UDP. Он просто тупо всё вынесет. Работать это будет только при одинаково агресивных потоках, либо, когда высокоприоритетный трафик в агресивном потоке ( он правда тогда и сам всё сделает ).

Edited by Dark_Angel
Posted (edited)
Судя по тому , что я вижу 1:90 назанимал токенов у родителя, что нормально, а класс 1:40, который, как я понимаю, должен менеджить закачки с http ничего и не пытается сделать.
закачки после 512К закаченного сползают в 1:50 (см. вторую часть скрипта, где классифицируются пакеты). сделано, чтобы http-закачки не мешали сёрфить.

 

Лучше для упрощения ситуации проверьте на предсказуемых передачах, тем более для вашей скорости можно спокойно сделать и в одном и в другом классе просто http закачки.
cделал. ( .0.100 - мой ip)

$IPT -t mangle -A SHAPER-IN -d 192.168.0.100 -p tcp -m multiport --sports 80,8080,443,20,21 -j CLASSIFY --set-class 1:90
$IPT -t mangle -A SHAPER-IN -d 192.168.0.100 -p tcp -m multiport --sports 80,8080,443,20,21 -j RETURN

т.е. теперь все пакеты, идущие на мой ноут ложаться в 1:90. поставил у себя одну закачку (1 поток)

поставил 1 закачку (1 поток) на другом компьютере - пакеты ложаться в 1:40, а после 512KB в счетчике соединения - в 1:50.

в общем, в любом случае на чужом компьютере качаться должно быстрее, НО на шлюзе iftop показывает одинаковое потребление ширины.

 

почти уверен, что дело в тех долбаных prio 7 из выхлопа tc -s class show dev eth0

Edited by cac2s
Posted (edited)
UPD. Я вам сразу секрет открою: если вы всё это затеяли, чтобы пользователи с торрентами, могли не выключая торренты сайтики открывать, то вам надо торренту давать 80-90% полосы максмум, чтобы второму классу хоть что-то оставалось, чтоб начать выдавливать торрент.
я в курсе :) просто как ни пробовал крутить (в т.ч. и уменьшением ceil у 1:90 до 75%) - результата не было, поэтому многое вернул в первоначальный вид.

но все равно спасибо :) Вы подтвердили необходимость такого хода. подправлю...

Edited by cac2s
Posted

Если пользователи сами научатся регулировать скорость в своем торрент-клиенте, будет еще лучше. burst лучше действительно не трогать, надо поставить quantum, так чтобы он был не меньше MTU.

Posted (edited)

2cac2s: У вас какая-то мутная схема с определением трафика в другой класс после 512КB. Уберите его пока, чтобы было легче понять как классифицируется трафик. С prio надо однозначно разобраться, т.к. он однозначно влияет на распределение токенов.

 

На практике, если есть 2 закачки, они относятся к разным классам, классы организованы как у вас ( то есть есть высокий приоритет и низкий, rate, ceil правильно ), то всё работает как надо. По крайней мере работало когда я проверял. Даже с перекритием ceil на 100%.

 

2photon: Если пользователи научаться регулировать скорость сами, то хуже от введеной схемы не будет. Звонят в ТП же те, кто как раз скорость регулировать не умеет, потому что "интернет не работает", так что ТС всё правильно хочет, другой вопрос, что против торрента нет приема - он самый агресивный поток.

 

Как вариант, можно давать клиенту полосу шире, чем пакет. Скажем у него 2Мбита, вы даете 2+1. Скажем 2 отдаете на торрент, а 2 отдаете на веб, при этом 1 Мбит будет гуляющим то в один, то в другой класс. Одновременно занять 3 Мбита пользователь не сможет, потому что торрент.

 

Но для того чтобы так поступить надо всёравно разобраться с проблемой выше.

Edited by Dark_Angel
Posted (edited)
2cac2s: У вас какая-то мутная схема с определением трафика в другой класс после 512КB. Уберите его пока, чтобы было легче понять как классифицируется трафик. С prio надо однозначно разобраться, т.к. он однозначно влияет на распределение токенов.

 

На практике, если есть 2 закачки, они относятся к разным классам, классы организованы как у вас ( то есть есть высокий приоритет и низкий, rate, ceil правильно ), то всё работает как надо. По крайней мере работало когда я проверял. Даже с перекритием ceil на 100%.

так, решил бороться с проблемами по порядку, поэтому на повестке дня - проблема с prio.

 

скопировал скрипт себе на ноут (чтобы разобраться с prio, а на боевом сервере буду отлаживать) и упростил скрипт практически до нЕльзя + поменял prio (проблема с семёрками заключалась в том, чта на 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*$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*$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 -d class show dev eth0 (упорядочил для более удобного сравнения с добавлением классов в скрипте):

 

class htb 1:1 root rate 1000Mbit ceil 1000Mbit burst 1375b/8 mpu 0b overhead 0b cburst 1375b/8 mpu 0b overhead 0b level 7

class htb 1:2 parent 1:1 rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6

class htb 1:5 parent 1:2 prio 0 quantum 108833 rate 2612Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0

class htb 1:90 parent 1:2 prio 1 quantum 5708 rate 137000bit ceil 2062Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0

class htb 1:99 parent 1:1 prio 1 quantum 60000 rate 1000Mbit ceil 1000Mbit burst 1375b/8 mpu 0b overhead 0b cburst 1375b/8 mpu 0b overhead 0b level 0

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

Edited by cac2s
Posted

Если явных ошибок команда не выводит ни сюда, ни в dmesg, то надо гуглить. Приоритет должен быть. Попробуйте как вариант вручить квантум для 1:2 тоже.

Posted (edited)
Если явных ошибок команда не выводит ни сюда, ни в dmesg, то надо гуглить. Приоритет должен быть. Попробуйте как вариант вручить квантум для 1:2 тоже.
выставил - ничего не поменялось :(

#!/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:2 htb rate ${RATE_IN}kbit quantum 60000 prio 0

        # 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 0

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

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

выхлоп # tc -d class show dev eth0:

class htb 1:99 root prio 1 quantum 60000 rate 1000Mbit ceil 1000Mbit burst 1375b/8 mpu 0b overhead 0b cburst 1375b/8 mpu 0b overhead 0b level 0 
class htb 1:90 parent 1:2 prio 1 quantum 5708 rate 137000bit ceil 2062Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:2 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 
class htb 1:5 parent 1:2 prio 0 quantum 108833 rate 2612Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0

мало того, в выхлопе у 1:2 нет явно прописанного quantum. баг?

 

UPD: немного подправил и упростил (удалил классы 1:10-1:90)

Edited by cac2s
Posted

Явно упускается какая-то мелочь. Попробуйте поменять номер класса. 1:90 же вон нормально создается, а он по конфигурации такой же.

 

Попробуйте еще создавать классы по очереди, может после какого-то дочернего класса всё плывет. И запаситесь спиртным. Там не то что с поллитрой не разобраться, там миниум дня 3 пить надо.

Posted (edited)
Явно упускается какая-то мелочь. Попробуйте поменять номер класса. 1:90 же вон нормально создается, а он по конфигурации такой же.

 

Попробуйте еще создавать классы по очереди, может после какого-то дочернего класса всё плывет. И запаситесь спиртным. Там не то что с поллитрой не разобраться, там миниум дня 3 пить надо.

1. в общем, отписал письмо автору HTB... бросив небольшой скрипт для примера. если ответит - отпишу

2. на opennet.ru один человек натолкнул на правильную идею: выводить tc -d class show dev eth0 после каждого выполнения команды tc class add...

скрипт:

#!/bin/bash
IPT="/sbin/iptables"
TC="/sbin/tc"
IP="/bin/ip"
DEV_IN="eth0"
RATE_IN="2750"

$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_IN}kbit
echo 1:1; $TC -d class show dev eth0; echo

    $TC class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[50*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 60000 prio 0
    echo 1:10; $TC -d class show dev eth0; echo

        $TC class add dev $DEV_IN parent 1:10 classid 1:11 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 30000 prio 0
        echo 1:11; $TC -d class show dev eth0; echo
        $TC class add dev $DEV_IN parent 1:10 classid 1:12 htb rate $[25*$RATE_IN/100]kbit ceil $[50*$RATE_IN/100]kbit quantum 30000 prio 1
        echo 1:12; $TC -d class show dev eth0; echo

    $TC class add dev $DEV_IN parent 1:1 classid 1:20 htb rate $[50*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 25000 prio 1
    echo 1:20; $TC -d class show dev eth0; echo
        $TC class add dev $DEV_IN parent 1:20 classid 1:21 htb rate $[25*$RATE_IN/100]kbit ceil ${RATE_IN}kbit quantum 25000 prio 0
        echo 1:21; $TC -d class show dev eth0

выхлоп:

1:1
class htb 1:1 root prio 0 quantum 114583 rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 

1:10
class htb 1:10 parent 1:1 prio 0 quantum 60000 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 

1:11
class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 
class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 

1:12
class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 
class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 
class htb 1:12 parent 1:10 prio 1 quantum 30000 rate 687000bit ceil 1375Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 

1:20
class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 
class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 
class htb 1:20 parent 1:1 prio 1 quantum 25000 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:12 parent 1:10 prio 1 quantum 30000 rate 687000bit ceil 1375Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 

1:21
class htb 1:11 parent 1:10 prio 0 quantum 30000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:1 root rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7 
class htb 1:10 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 
class htb 1:20 parent 1:1 rate 1375Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6 
class htb 1:21 parent 1:20 prio 0 quantum 25000 rate 687000bit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0 
class htb 1:12 parent 1:10 prio 1 quantum 30000 rate 687000bit ceil 1375Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0

имеет место закономерность: quantum и prio класса удаляются/пропадают_из_выхлопа при добавлении к этому классу дочернего класса

вот такая вот петрушка... уж и не знаю: так_и_должно_быть/баг/что-то_упущенно...

Edited by cac2s
Posted

Ну я Вам вообще-то тоже самое посоветовал намеками: "Попробуйте еще создавать классы по очереди, может после какого-то дочернего класса всё плывет". Но тут может быть, что это не баг, т.к. приоритет определяется лифами, и играет роль только для них - токены же они получают от родителя. Соответственно после класификации трафика, родитель либо даст, либо не даст токен для пакета, в зависимости от прио.

 

Вы сказали, что после правок у вас всё изменилось, но всёравно не так как надо. А как стало?

Posted
Ну я Вам вообще-то тоже самое посоветовал намеками: "Попробуйте еще создавать классы по очереди, может после какого-то дочернего класса всё плывет".
да. точно. припоминаю. просто голова уже квадратная, поэтому неудивительно, что ни как не отреагировал на совет. прошу прощения :)

 

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

 

class htb 1:1 root rate 1000Mbit ceil 1000Mbit burst 1375b/8 mpu 0b overhead 0b cburst 1375b/8 mpu 0b overhead 0b level 7

class htb 1:2 parent 1:1 rate 2750Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 6

class htb 1:5 parent 1:2 prio 0 quantum 108833 rate 2612Kbit ceil 2750Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0

class htb 1:90 parent 1:2 prio 1 quantum 5708 rate 137000bit ceil 2062Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0

class htb 1:99 parent 1:1 prio 1 quantum 60000 rate 1000Mbit ceil 1000Mbit burst 1375b/8 mpu 0b overhead 0b cburst 1375b/8 mpu 0b overhead 0b level 0

 

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

это и имел ввиду. т.е. моя ошибка заключалась в использовании prio>7

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.