LINUX.ORG.RU

Ubuntu 8.10

eugrus ★★★★★
() автор топика

Вот мой скрипт для tc:

#!/bin/sh
TC=/sbin/tc
IP=/sbin/ip
IF=ppp0
IFB_IF=ifb0

RATE=900kbit
/sbin/modprobe ifb
$IP link set $IFB_IF up

# set interface qlen
$IP link set dev $IF qlen 32
$IP link set dev $IFB_IF qlen 32

# reset all qdisc
$TC qdisc del dev $IF root
$TC qdisc del dev $IF ingress
$TC qdisc del dev $IFB_IF root

# reset all qdisc
$TC qdisc add dev $IF ingress
$TC qdisc add dev $IF root sfq  perturb 10
$TC qdisc add dev $IFB_IF root handle 1: htb default 30
$TC class add dev $IFB_IF parent 1: classid 1:1 htb rate $RATE burst 10k
$TC class add dev $IFB_IF parent 1:1 classid 1:10 htb rate 64kbit ceil $RATE burst 10k prio 2
$TC class add dev $IFB_IF parent 1:1 classid 1:20 htb rate 64kbit ceil $RATE burst 10k prio 2
$TC class add dev $IFB_IF parent 1:1 classid 1:30 htb rate 100kbit ceil $RATE burst 10k prio 2
#game
$TC class add dev $IFB_IF parent 1:1 classid 1:40 htb rate 200kbit ceil $RATE burst 10k prio 1

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


#game
$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 1 u32 match ip sport 29000 0xffff flowid 1:40

$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 1 u32 match ip dport 5190 0xffff flowid 1:40
$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 1 u32 match ip sport 53   0xffff flowid 1:40
#http
$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip sport 80 0xffff flowid 1:20

$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip sport 5222 0xffff flowid 1:20
$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip sport 7012 0xffff flowid 1:10
$TC filter add dev $IFB_IF protocol ip parent 1:0 prio 2 u32 match ip dport 6886 0xffff flowid 1:20
$TC filter add dev $IFB_IF parent 1:0 prio 2 u32 match ip protocol 6 0xff\
     match u8 0x05 0x0f at 0\
     match u16 0x0000 0xffc0 at 2\
     match u8 0x10 0x10 at 33 flowid 1:10
$TC filter add dev $IF  parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $IFB_IF 

Для каждого типа трафика выделана мин гарантированная полоса и макс достуная. 
Некоторым типам трафитка назначен повышенный приоритет. 
Всё прекрасно работает во время закачки через torrent. И http и MMORPG на соседнем компе, и online радио. 
RATE - скорость канала -10%

platerx
()
Ответ на: комментарий от eugrus

IF - тот интерфейс, через которыый работает интернет. У меня ppp0 поскольку мой провайдер предоставляет интернет через pppoe. IFB_IF трогать не нужно. Вместо RATE=900kbit нужно написать вашу скорость интернета, уменьшенную на ~ 10%

platerx
()

Попробовал вот так:

sudo iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Minimize-Delay
sudo iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-Throughput
sudo iptables -A OUTPUT -t mangle -p tcp --dport http -j TOS --set-tos Minimize-Delay
sudo iptables -A OUTPUT -t mangle -p tcp --dport http -j TOS --set-tos Maximize-Throughput

но пока не пойму: есть ли разница?

eugrus ★★★★★
() автор топика
Ответ на: комментарий от platerx

OK, спасибо. Есть неуверенное субъективное ощущение, что с tc сработало, правда даёт кое-какие ошибки:

sudo ./tc.sh RTNETLINK answers: Invalid argument We have an error talking to the kernel Action 4 device ifb0 ifindex 4

eugrus ★★★★★
() автор топика
Ответ на: комментарий от vilfred

Вообщем, большое спасибо platerx'у: я совершенно не понимаю этот скрипт, но он работает! :)))

eugrus ★★★★★
() автор топика
Ответ на: комментарий от vilfred

Я так понимаю, что приоритет должен касаться не только скорости, но и установления соединений!?

eugrus ★★★★★
() автор топика
Ответ на: комментарий от eugrus

Вроде ваша ошибка убирается загрузкой модуля "modprobe act_mirred".

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

Отдельно приоретизируются ACK-пакеты (пакеты подтверждения), они появляются, когда передаете данные по TCP-соединению.

mky ★★★★★
()
Ответ на: комментарий от mky

Отличный скрипт, но у вас видимо, симметричный канал. (download/upload) У меня не работает эффективно, 
так как торрент-клиент полностью занимает всю полосу на раздачу (1 мбит)
 и хотя закачек нет и канал свободен (4 Мбит) всё тормозит.

nachtigall
()
Ответ на: комментарий от nachtigall

+1

Неплохо бы подогнать скрипт по этой части :(

eugrus ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.