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