Nefunkcny QOS pre upload
Robert Cernansky
hslists2 na zoznam.sk
Sobota Únor 4 21:00:51 CET 2006
On Sat, 4 Feb 2006 20:05:46 +0100 Dalibor Straka <dast na panelnet.cz> wrote:
DS> On Sat, Feb 04, 2006 at 12:13:11PM +0100, Robert Cernansky wrote:
DS> > Zdravim,
DS> >
DS> > uz dlhsi cas riesim shaping/QOS na nasej sieti. Mam problem s
DS> > prioritizacoiu sluzieb pri uploade. Ako je zname, pri zatazenom uploade
DS> > dost trpi aj download, pretoze neodchadzaju SYN pakety. Neviem vsak
DS> > dosiahnut aby SYN pakety odchadzali prioritne.
DS> >
DS> Podle me by se meli prioritizovat prichazejici ACK packety.
Ked mam shaping "zaveseny" na eth0, tak velky upload nepokazi
interaktivitu. Az ked zatazim upload sa pokazi odozva aj download. Z toho
usudzujem, ze je problem prave z odchadzajucimi paketmi pre signalizaciu.
V mojom povodnom skripte mam rovnaky shaping aj na eth0 aj ppp0. Cize
prioritizujem aj odchadzajuce aj prichadzajuce SYN/ACK pakety.
Pastujem (konecne) zostrucneny prepis mojho skriptu (je odlahceny od
triedenia pre jednotlive pocitace). Este pripomeniem, ze co sa tyka uploadu
sa sprava viacmenej rovnako ako wondershaper.
#!/bin/sh
# CONSTANTS
ifaceIn=eth0
rateIn=900
ifaceOut=ppp0
rateOut=200
bands=3
# clear mangle table
/sbin/iptables -t mangle -F
/sbin/iptables -t mangle -X
# in
iface=${ifaceIn}
rate=${rateIn}
# >default - najnizsia priorita
iptables -t mangle -A FORWARD -j MARK --set-mark 3
# >ostatne priority
iptables -t mangle -A FORWARD -p ! tcp -j MARK --set-mark 2
iptables -t mangle -A FORWARD -p tcp -m tcp \
--tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 1
iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark 1
# clear
tc qdisc del dev ${iface} root
# attach qdisc htb to iface
tc qdisc add dev ${iface} root handle 1: htb
# root class
tc class add dev ${iface} parent 1: classid 1:1 htb rate ${rate}kbit \
ceil ${rate}kbit
# >prio qdisc zaveseny na classe 1:1 (vytvori classy 2:1-bands)
tc qdisc add dev ${iface} parent 1:1 handle 2: prio bands ${bands}
# >obsluha classov vytvorenych qdiscom prio
# >>filter na qdiscu htb - oznacene pakety (1) pojdu do classu 1:1
tc filter add dev ${iface} parent 1: protocol ip handle 1 fw flowid 1:1
# >>filter na qdiscu prio - oznacene pakety (1) pojdu do classu 2:1
tc filter add dev ${iface} parent 2: protocol ip handle 1 fw \
flowid 2:1
# >>sfq qdisc zaveseny na classe 2:1
tc qdisc add dev ${iface} parent 2:1 handle 10: sfq perturb 5
# >>filter na qdiscu htb - oznacene pakety (2) pojdu do classu 1:1
tc filter add dev ${iface} parent 1: protocol ip handle 2 fw flowid 1:1
# >>filter na qdiscu prio - oznacene pakety (2) pojdu do classu 2:2
tc filter add dev ${iface} parent 2: protocol ip handle 2 fw \
flowid 2:2
# >>sfq qdisc zaveseny na classe 2:2
tc qdisc add dev ${iface} parent 2:2 handle 20: sfq perturb 5
# >>filter na qdiscu htb - oznacene pakety (3) pojdu do classu 1:1
tc filter add dev ${iface} parent 1: protocol ip handle 3 fw flowid 1:1
# >>filter na qdiscu prio - oznacene pakety (3) pojdu do classu 2:3
tc filter add dev ${iface} parent 2: protocol ip handle 3 fw \
flowid 2:3
# >>sfq qdisc zaveseny na classe 2:3
tc qdisc add dev ${iface} parent 2:3 handle 30: sfq perturb 5
# out
iface=${ifaceOut}
rate=${rateOut}
# clear
tc qdisc del dev ${iface} root
# attach qdisc htb to iface
tc qdisc add dev ${iface} root handle 1: htb
# root class
tc class add dev ${iface} parent 1: classid 1:1 htb rate ${rate}kbit \
ceil ${rate}kbit
# >prio qdisc zaveseny na classe 1:1 (vytvori classy 2:1-bands)
tc qdisc add dev ${iface} parent 1:1 handle 2: prio bands ${bands}
# >obsluha classov vytvorenych qdiscom prio
# >>filter na qdiscu htb - oznacene pakety (1) pojdu do classu 1:1
tc filter add dev ${iface} parent 1: protocol ip handle 1 fw flowid 1:1
# >>filter na qdiscu prio - oznacene pakety (1) pojdu do classu 2:1
tc filter add dev ${iface} parent 2: protocol ip handle 1 fw \
flowid 2:1
# >>sfq qdisc zaveseny na classe 2:1
tc qdisc add dev ${iface} parent 2:1 handle 10: sfq perturb 5
# >>filter na qdiscu htb - oznacene pakety (2) pojdu do classu 1:1
tc filter add dev ${iface} parent 1: protocol ip handle 2 fw flowid 1:1
# >>filter na qdiscu prio - oznacene pakety (2) pojdu do classu 2:2
tc filter add dev ${iface} parent 2: protocol ip handle 2 fw \
flowid 2:2
# >>sfq qdisc zaveseny na classe 2:2
tc qdisc add dev ${iface} parent 2:2 handle 20: sfq perturb 5
# >>filter na qdiscu htb - oznacene pakety (3) pojdu do classu 1:1
tc filter add dev ${iface} parent 1: protocol ip handle 3 fw flowid 1:1
# >>filter na qdiscu prio - oznacene pakety (3) pojdu do classu 2:3
tc filter add dev ${iface} parent 2: protocol ip handle 3 fw \
flowid 2:3
# >>sfq qdisc zaveseny na classe 2:3
tc qdisc add dev ${iface} parent 2:3 handle 30: sfq perturb 5
Robo
--
Robert Cernansky
E-mail: hslists2 na zoznam.sk
Jabber: HS na jabber.sk
Další informace o konferenci Linux