Автор Тема: tc питане  (Прочетена 1043 пъти)

st_dimitrov

  • Напреднали
  • *****
  • Публикации: 102
    • Профил
    • WWW
tc питане
« -: Feb 21, 2006, 16:18 »
Здравейте.

Имам шейпър който чете от конф файл и разделя интернета между машини в локалната ми мрежа.
От няколко дни се наблюдава много странен факт - едни клиенти свалят със максимума, други със 0/1/2/3КБ/с.

Забелязвам, че при всяко пускане на шейпъра, в syslog-a излиза този ред
Feb 21 16:13:14 router kernel: HTB: quantum of class 200XX is small. Consider r2q change.
Feb 21 16:13:14 router kernel: HTB: quantum of class 100XX is small. Consider r2q change.

Ето извадка от шейпъра:


Примерен код


$IPTABLES -t mangle -A POSTROUTING -o eth0 -p tcp -m length --length :64 -j MARK --set-mark 10
$IPTABLES -t mangle -A POSTROUTING -o eth1 -p tcp -m length --length :64 -j MARK --set-mark 20
$IPTABLES -t mangle -A POSTROUTING -o eth0 -p tcp -m length --length :64 -j ACCEPT
$IPTABLES -t mangle -A POSTROUTING -o eth1 -p tcp -m length --length :64 -j ACCEPT

for currow in `cat /etc/shaper.conf | grep -v '^#'`
    do
        IP=`$ECHO $currow | cut -d \| -f 1`
        MAC=`$ECHO $currow | cut -d \| -f 2`
        DOWN=`$ECHO $currow | cut -d \| -f 3`
        DOWNMAX=`$ECHO $currow | cut -d \| -f 4`
        UP=`$ECHO $currow | cut -d \| -f 5`
        UPMAX=`$ECHO $currow | cut -d \| -f 6`
        ID=`$ECHO $currow | cut -d \| -f 7`
        STATUS=`$ECHO $currow | cut -d \| -f 8`
        NUM=`$ECHO $currow | cut -d \| -f 9`
        $ECHO "<$NUM> <$IP> Down:  $DOWN/$DOWNMAX; Up: $UP/$UPMAX;"
        if [ $STATUS = "1" ]; then
        $IPTABLES -t nat -A POSTROUTING -s $IP -o eth1 -j MASQUERADE
        $IPTABLES -A INPUT -s $IP -p tcp --dport 8080 -m state --state NEW,ESTABLISHED -j ACCEPT
        $IPTABLES -A FORWARD -s $IP -j ACCEPT
        $TC class add dev eth0 parent 1:1 classid 1:$ID htb rate $DOWN ceil $DOWNMAX burst 15k
        $TC qdisc add dev eth0 parent 1:$ID handle $ID: sfq
        $TC class add dev eth1 parent 2:1 classid 2:$ID htb rate $UP ceil $UPMAX burst 15k
        $TC qdisc add dev eth1 parent 2:$ID handle $ID: sfq
        $TC filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst $IP flowid 1:$ID
        $TC filter add dev eth1 parent 2:0 protocol ip prio 1 u32 match ip dst $IP flowid 1:$ID
        $ECHO "$IP $MAC" >> /etc/ethers
    fi
    if [ $STATUS = "0" ]; then
        $IPTABLES -t nat -A PREROUTING -p tcp -s $IP -j REDIRECT --to-port 81
    fi

done

$TC class add dev eth0 parent 1:1 classid 1:100 htb rate 100kbps prio 0
$TC class add dev eth1 parent 2:1 classid 2:100 htb rate 100kbps prio 0
$TC filter add dev eth0 parent 1:0 protocol ip handle 10 fw classid 1:100
$TC filter add dev eth1 parent 2:0 protocol ip handle 20 fw classid 2:100




самия конф файл представлява това:
Примерен код

# ip|mac|down|downmax|up|upmax|id|status|nomer

10.0.0.1|XX:XX:XX:XX:XX:XX|5kbps|6kbps|5kbps|6kbps|21|1|1
10.0.0.2|XX:XX:XX:XX:XX:XX|10kbps|11kbps|5kbps|6kbps|22|1|2
...........


Ако забележите нещо странно кажете моля ви.. търся грешки но няма ;/
Активен

st_dimitrov

  • Напреднали
  • *****
  • Публикации: 102
    • Профил
    • WWW
tc питане
« Отговор #1 -: Feb 22, 2006, 15:54 »
Добавих в края на дефинирането на класовете quantum 1500 и вече не плюе в сислог-а, остава да видя как това ще подейства върху скоростта на потребителите.

Кажете по какъв начин да определя quantum-а, и за какво служи най-общо.

Благодаря
Активен

bonbon

  • Напреднали
  • *****
  • Публикации: 112
  • Distribution: Debian
  • Window Manager: Gnome
    • Профил
    • WWW
tc питане
« Отговор #2 -: Feb 22, 2006, 19:12 »
http://www.docum.org/docum.org/faq/cache/31.html
Активен

alex_c

  • Напреднали
  • *****
  • Публикации: 122
    • Профил
tc питане
« Отговор #3 -: Feb 22, 2006, 20:27 »
Това, което веднага ми прави впечатление е, че използваш едновременно u32 и fw classifiers. Доколкото си спомням, това е възможно от ядра 2.6.14 нагоре (поправете ме, ако не съм точен). За по-старите не беше възможно да се използва микс от класификатори. Не знам как е в твоя случай, но моят съвет е не ги мешай - ако можеш, карай само с u32 classifier, ако пък искаш по-голяма гъвкавост - ползвай само fw classifier.

Best wishes!
Alex
Активен

st_dimitrov

  • Напреднали
  • *****
  • Публикации: 102
    • Профил
    • WWW
tc питане
« Отговор #4 -: Feb 23, 2006, 08:20 »
Здравей Алекс.

Ако става дума за тези редове:

$TC filter add dev eth0 parent 1:0 protocol ip handle 10 fw classid 1:100
$TC filter add dev eth1 parent 2:0 protocol ip handle 20 fw classid 2:100

С тях задавам по-висок приоритет на TCP ACK пакетите, тъй като ъплоад-а при тази машина често е зает и пречи на даунлоад-а...

Самото ограничение на информацията преминаваща към/от машините си е само със u32.
Активен