>ваша проблема, что вы хотите сделать из говна конфетку. Сначала разберитесь с
>L2, а потом крутите софтовые решения по управлению трафика. Проведите аналогичные
>измерения в среде ethernet или atm. измерения на eth проводились и упомянуты выше.
но, возможно, вы и правы, говно хоть крась, хоть бели...
тем не менее, все же удалось слегка улучшить картину времени реакции.
при экспериментах приоритетным являлся http и ssh, тесты проводились при двух одновременных ftp-сессиях, параллельно с которыми прорубалась http-закачка файла и ssh-подключение.
все это в "почти модемном" соединении 100kbit.
если кому интересно, выглядит это так:
#!/bin/sh
SPD="100"
MSR="kbit"
CADD="tc class add dev eth0 parent"
QADD="tc qdisc add dev eth0 parent"
shape_on() {
tc qdisc add dev eth0 root handle 1: htb default 12
$CADD 1: classid 1:1 htb rate $SPD$MSR ceil $SPD$MSR
#$CADD 1:1 classid 1:10 htb rate $[$SPD/2]$MSR ceil $SPD$MSR
#$CADD 1:1 classid 1:11 htb rate $[$SPD/4]$MSR ceil $SPD$MSR
#$CADD 1:1 classid 1:12 htb rate $[$SPD/5]$MSR ceil $SPD$MSR
$CADD 1:1 classid 1:10 htb rate 1$MSR ceil $SPD$MSR
$CADD 1:1 classid 1:11 htb rate 1$MSR ceil $SPD$MSR
$CADD 1:1 classid 1:12 htb rate 1$MSR ceil $SPD$MSR
echo " Adding filters for port 80"
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 80 0xffff flowid 1:10
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip sport 80 0xffff flowid 1:10
echo " Adding filters for ports 22 and 2223"
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 22 0xffff flowid 1:11
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip sport 22 0xffff flowid 1:11
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 2223 0xffff flowid 1:11
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip sport 2223 0xffff flowid 1:11
$QADD 1:10 handle 20: pfifo limit 50
$QADD 1:11 handle 30: pfifo limit 50
$QADD 1:12 handle 40: sfq perturb 10
}
shape_off(){
tc qdisc del dev eth0 root > /dev/null 2>&1
if [ x$? != x0 ]; then
echo "Nothing to remove"
else
echo "Removed"
fi
}
case $1 in
"start"|"restart")
shape_off
shape_on
;;
"stop")
shape_off
;;
*)
echo "Usage: $0 start|stop|restart"
;;
esac
echo " Done"