Привет всем. Есть локальная сеть, выходящая в интернет через линукс, с каналом 512мб. Есть задача: обеспечить минимальную задержку для определенного трафика. Правила такие:
tc qdisc del dev eth0 root 2> /dev/null > /dev/nulltc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 90mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10kbit ceil 100kbit prio 50 #allanother
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 10kbit ceil 90mbit prio 50 #from local to lan
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 50kbit ceil 100kbit prio 50 #from local to ex
tc class add dev eth0 parent 1:1 classid 1:40 htb rate 30kbit ceil 100kbit prio 50 #from local to 405
tc class add dev eth0 parent 1:1 classid 1:50 htb rate 400kbit ceil 500kbit prio 1 #from spider
tc class add dev eth0 parent 1:1 classid 1:60 htb rate 10kbit ceil 100kbit prio 20 #from nikolaev1
tc class add dev eth0 parent 1:1 classid 1:70 htb rate 10kbit ceil 100kbit prio 20 #from nikolaev2
tc class add dev eth0 parent 1:1 classid 1:80 htb rate 1mbit ceil 90mbit prio 10 #from my
tc class add dev eth0 parent 1:1 classid 1:90 htb rate 1mbit ceil 90mbit prio 50 #from local
tc class add dev eth0 parent 1:1 classid 1:100 htb rate 10kbit ceil 32kbit prio 50 #from local to msq1
tc class add dev eth0 parent 1:1 classid 1:110 htb rate 10kbit ceil 32kbit prio 50 #from local to msq2
tc class add dev eth0 parent 1:1 classid 1:120 htb rate 10kbit ceil 32kbit prio 50 #from local to msq3
tc class add dev eth0 parent 1:1 classid 1:130 htb rate 10kbit ceil 32kbit prio 50 #from local to msq4
tc class add dev eth0 parent 1:1 classid 1:140 htb rate 10kbit ceil 32kbit prio 50 #from local to msq5
tc class add dev eth0 parent 1:1 classid 1:150 htb rate 10kbit ceil 32kbit prio 50 #from local to msq6
tc class add dev eth0 parent 1:1 classid 1:160 htb rate 10kbit ceil 32kbit prio 50 #from local to msq7
tc class add dev eth0 parent 1:1 classid 1:170 htb rate 10kbit ceil 32kbit prio 50 #from local to msq8
tc class add dev eth0 parent 1:1 classid 1:180 htb rate 10kbit ceil 32kbit prio 50 #from local to msq9
tc class add dev eth0 parent 1:1 classid 1:190 htb rate 10kbit ceil 32kbit prio 50 #from local to msq10
tc class add dev eth0 parent 1:1 classid 1:200 htb rate 10kbit ceil 32kbit prio 50 #from local to msq11
tc class add dev eth0 parent 1:1 classid 1:210 htb rate 50kbit ceil 300kbit prio 40 #to sync
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev eth0 parent 1:40 handle 40: sfq perturb 10
tc qdisc add dev eth0 parent 1:50 handle 50: tbf rate 256kbit latency 10ms burst 3000
tc qdisc add dev eth0 parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev eth0 parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev eth0 parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev eth0 parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev eth0 parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev eth0 parent 1:110 handle 110: sfq perturb 10
tc qdisc add dev eth0 parent 1:120 handle 120: sfq perturb 10
tc qdisc add dev eth0 parent 1:130 handle 130: sfq perturb 10
tc qdisc add dev eth0 parent 1:140 handle 140: sfq perturb 10
tc qdisc add dev eth0 parent 1:150 handle 150: sfq perturb 10
tc qdisc add dev eth0 parent 1:160 handle 160: sfq perturb 10
tc qdisc add dev eth0 parent 1:170 handle 170: sfq perturb 10
tc qdisc add dev eth0 parent 1:180 handle 180: sfq perturb 10
tc qdisc add dev eth0 parent 1:190 handle 190: sfq perturb 10
tc qdisc add dev eth0 parent 1:200 handle 200: sfq perturb 10
tc qdisc add dev eth0 parent 1:210 handle 210: sfq perturb 10U32="tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32"
$U32 match ip src $ON flowid 1:20
$U32 match ip dst $EX flowid 1:30
$U32 match ip dst $CHP flowid 1:40
$U32 match ip src $SPIDER flowid 1:50
$U32 match ip src $NIKOLAEV1 flowid 1:60
$U32 match ip src $NIKOLAEV2 flowid 1:70
$U32 match ip src $MY flowid 1:80
$U32 match ip src $LOCAL flowid 1:90
$U32 match ip dst $MSQ1 flowid 1:100
$U32 match ip dst $MSQ2 flowid 1:110
$U32 match ip dst $MSQ3 flowid 1:120
$U32 match ip dst $MSQ4 flowid 1:130
$U32 match ip dst $MSQ5 flowid 1:140
$U32 match ip dst $MSQ6 flowid 1:150
$U32 match ip dst $MSQ7 flowid 1:160
$U32 match ip dst $MSQ8 flowid 1:170
$U32 match ip dst $MSQ9 flowid 1:180
$U32 match ip dst $MSQ10 flowid 1:190
$U32 match ip dst $MSQ11 flowid 1:200
$U32 match ip src $SYNC flowid 1:210
#OUTtc qdisc del dev eth1 root 2> /dev/null > /dev/null
tc qdisc add dev eth1 root handle 1: htb default 10
tc class add dev eth1 parent 1: classid 1:1 htb rate 90mbit
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 10kbit ceil 100kbit prio 50 #allanother
tc class add dev eth1 parent 1:1 classid 1:20 htb rate 10kbit ceil 120kbit prio 50 #from localhost to inet
tc class add dev eth1 parent 1:1 classid 1:30 htb rate 60kbit ceil 200kbit prio 30 #mail from localhost to inet
tc class add dev eth1 parent 1:1 classid 1:40 htb rate 400kbit ceil 500kbit prio 1 #from voip to spider
tc class add dev eth1 parent 1:1 classid 1:50 htb rate 50kbit ceil 150kbit prio 20 #to nikolaev1
tc class add dev eth1 parent 1:1 classid 1:60 htb rate 50kbit ceil 150kbit prio 20 #to nikolaev2
tc class add dev eth1 parent 1:1 classid 1:70 htb rate 2mbit ceil 3mbit prio 10 #to my
tc class add dev eth1 parent 1:1 classid 1:80 htb rate 10kbit ceil 100kbit prio 40 #to sync
tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev eth1 parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev eth1 parent 1:40 handle 40: tbf rate 256kbit latency 10ms burst 3000
tc qdisc add dev eth1 parent 1:50 handle 50: sfq perturb 10
tc qdisc add dev eth1 parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev eth1 parent 1:70 handle 70: tbf rate 1mbit latency 30ms burst 15000
tc qdisc add dev eth1 parent 1:80 handle 80: sfq perturb 10U32="tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32"
$U32 match ip src $MY flowid 1:20
$U32 match ip dport 25 0xffff flowid 1:30
$U32 match ip dst $SPIDER flowid 1:40
$U32 match ip dst $NIKOLAEV1 flowid 1:50
$U32 match ip dst $NIKOLAEV2 flowid 1:60
$U32 match ip dst $MY flowid 1:70
$U32 match ip dst $SYNC flowid 1:80Грубо говоря самое важное здесь, это при возникновении траффика от spider или к нему, отдать ему весь канал, обеспечив минимальную задержку.
Проблема в следующем: При стандартных дисциплинах, без навешивания этого добра, пинг на нужный хост на не нагруженном канале около 10~15мс, это приемлемо. При загруженном канале могут быть задержки до 5 секунд. Эту задержку я и пытаюсь убрать. Когда все эти правила работают наблюдается такая ситуация, даже на не нагруженном канале, непонятно почему, задержки на нужный хост прыгают до тех же 5 секунд.
Что я делаю не так? В какую сторону смотреть?
я тебе полностью эту хрень расписывать не буду, но смысл примерно такойinterface_speed=512kbit
tc qdisc add dev eth0 root handle 1: hfsc default 20
tc class add dev eth0 parent 1:0 classid 1:1 hfsc sc rate 512kbit ul rate 512kbit
tc class add dev eth0 parent 1:1 classid 1:10 hfsc rt rate 512kbit
tc class add dev eth0 parent 1:1 classid 1:20 hfsc ls m2 512kbit ul m2 512kbit
#
# а затем добавляй свой htb, хотя в принципе иерархию классов можно нагородить
# и при помощи hfsc, но там нет приоритетов. в общем объяснять долго.
#
tc qdisc add dev eth0 parent 1:20 htb default xxxx
.......
>я тебе полностью эту хрень расписывать не буду, но смысл примерно такой
>
>
>interface_speed=512kbit
>
>tc qdisc add dev eth0 root handle 1: hfsc default 20
>tc class add dev eth0 parent 1:0 classid 1:1 hfsc sc rate
>512kbit ul rate 512kbit
>tc class add dev eth0 parent 1:1 classid 1:10 hfsc rt rate
>512kbit
>tc class add dev eth0 parent 1:1 classid 1:20 hfsc ls m2
>512kbit ul m2 512kbit
>#
># а затем добавляй свой htb, хотя в принципе иерархию классов можно
>нагородить
># и при помощи hfsc, но там нет приоритетов. в общем объяснять
>долго.
>#
>tc qdisc add dev eth0 parent 1:20 htb default xxxx
>.......Пока я далек от того, что ты предложил, ничего не понял. Не мог бы ты раскрыть подробнее, если есть время? А я пока почитаю про hfsc.
что происходит при чистом канале если слать ping -s 1500 (ставь свое MTU), если большие задержки 3-5 секунд либо вообще потери выше 10% - это уже несколько не твоя проблема, а проблема прова которого надо пинать.
В общем на мой взгляд проблема не в фаере, который надо конечно настроить, а в самом канале, так как 5 сек на незагруженном канале - это ненормально. И скорее всего вас кидают без особонго шейпа вместе со всеми клиентами в кучу, а там куда кривая судьбы выведет.
>что происходит при чистом канале если слать ping -s 1500 (ставь свое
>MTU), если большие задержки 3-5 секунд либо вообще потери выше 10%
>- это уже несколько не твоя проблема, а проблема прова которого
>надо пинать.
>В общем на мой взгляд проблема не в фаере, который надо конечно
>настроить, а в самом канале, так как 5 сек на незагруженном
>канале - это ненормально. И скорее всего вас кидают без особонго
>шейпа вместе со всеми клиентами в кучу, а там куда
>кривая судьбы выведет.Нет. Потому что когда мы выгребаем, без шейпа на нашем роутере, наш лимит у прова, пинги 5 секунд, но это понятно. При это когда лимит не выгребаем, они нормальные. Если же включен шейп у нас, правила которого приведены выше, даже при не нагруженном канале...пинги периодически по 10секунд. Я думаю что какаято лажа в моих правилах, но у меня мало опыта в таких делах, не могу найти ошибки.
>
>Пока я далек от того, что ты предложил, ничего не понял. Не
>мог бы ты раскрыть подробнее, если есть время? А я пока
>почитаю про hfsc.hfsc единственная дисциплина, которая позволяет обрабатывать трафик реального времени,
в примере создана корневая дисциплина hfsc (скрорость интерфейса 512 кбит взял от балды).класс 1:10 занимается обработкой трафика реального времени и отдает под него всю полосу
пропускания,
класс 1:20 обрабатывает обычный трафик и ты можешь к нему подцепить htb, хотя смысла
особого такой бутерброд городить нет, т.к. тоже самое можно сделать и при помощи hfsc.
я опустил подробности того, как пакеты будут попадпть в эти классы.