Привет всем. Есть локальная сеть, выходящая в интернет через линукс, с каналом 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 10
U32="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
#OUT
tc 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 10
U32="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 секунд.
Что я делаю не так? В какую сторону смотреть?