[LARTC] Help with traffic control (HTB ESFQ RED)

Andy Furniss lists at andyfurniss.entadsl.com
Tue Jul 17 04:06:48 CEST 2007


Edgar wrote:
> Hello, there's a problem I've had for several months now, and I've never 
> been able to find an answer to it. I'll try to explain as quick as 
> possible:
> 
>    I have a server that controlls my home network, it provides internet 
> to them also (NAT) and I would like to provide QoS by shaping traffic. I 
> have a p2p server here (running mldonkey), since only that machine is 
> serving p2p and anyone can connect to it to download linux distros ( :) 
> ) my attemp here was to limit bandwidth for that machine. I've partially 
> done this, I've written some HTB rules and I've nested ESFQ leafs within 
> htb classes. At first it seems like it works, but then two problems 
> arise: 1) Web latency (partially solved by increasing burst size, but 
> still happens)

Possibly too close to egress rate or need to shape/police ingress or 
maybe prio dns lookups aswell.


  and 2) download seems affected a lot in the p2p server.

You need to prio acks/small packets for P2P aswell or they may get 
delayed too much in the queue. You could also raise it's ceil a bit.

>      I believe HTB is doing it's work, but the one that is failing to do 
> so correctly is ESFQ, since I see upload limitted to the rate I specify. 
> I'm using ESFQ since it can control traffic by ip, instead of doing it 
> by flows (like classic sfq). I tried using RED too, but I haven't been 
> able to find much documentation for it, so I guess I might be doing RED 
> stuff wrong (I'll include my RED rule too, in case anyone can help with 
> it). So I'll post the script I'm using to shape traffic, hope you ppl 
> can help me out.
> 
> #!/bin/sh
> 
> ### Upload Link ###
> DEV=eth0
> 
> ### Modify $DEV's queue and MTU ###
> ip link set dev $DEV qlen 50

*sfq still defaults to 128 I think - use limit parameter to reduce

> ip link set dev $DEV mtu 1500
> 
> ### iptables mangle table cleanup ###
> iptables -t mangle -F
> iptables -t mangle -X
> 
> ## ROOT QDISC cleanup in $DEV
> tc qdisc del dev $DEV root 2> /dev/null > /dev/null
> tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
> #tc qdisc del dev $HDEV root 2> /dev/null > /dev/null
> 
> P2P_IP=192.168.0.100
> SSH_PORT=9000
> 
> ### CLASSES ###
> SSH=1:10
> P2P=1:20
> DEF=1:30
> HTTP=1:40
> 
> iptables -t mangle -A POSTROUTING -s $P2P_IP -o $DEV -j CLASSIFY 
> --set-class $P2P
> iptables -t mangle -A OUTPUT -o $DEV -p tcp --sport $SSH_PORT -j MARK 
> --set-mark 1
> iptables -t mangle -A POSTROUTING -o $DEV -s ! $P2P_IP -p tcp -m length 
> --length :64 -j MARK --set-mark 1
> iptables -t mangle -A OUTPUT -o $DEV -m mark --mark 1 -j CLASSIFY 
> --set-class $SSH
> iptables -t mangle -A OUTPUT -o $DEV -m mark --mark 1 -j TOS --set-tos 
> Minimize-Delay
> iptables -t mangle -A POSTROUTING -o $DEV -s ! $P2P_IP -p tcp -m 
> multiport --destination-ports 80,445,7777,7778,8080 -j MARK --set-mark 2
> iptables -t mangle -A POSTROUTING -o $DEV -m mark --mark 2 -j CLASSIFY 
> --set-class $HTTP
> iptables -t mangle -A POSTROUTING -o $DEV -m mark --mark 2 -j TOS 
> --set-tos Maximize-Throughput

The tos won't make any difference

> 
> MAX_RATE=30kbps
> P2P_UP=10kbps
> ## HTB CLASSES ##
> 
> tc qdisc add dev $DEV root handle 1: htb default 30

Arp will go to default - it's better to use iptables/a filter to catch 
other ip traffic.

> tc class add dev $DEV parent 1: classid 1:1 htb rate $MAX_RATE burst 15k 
> tc class add dev $DEV parent 1:1 classid $P2P htb rate 3kbps ceil 
> $P2P_UP burst 0 prio 2 quantum 1600

 From memory burst 10 gave a smaller burst than 0 when I tested.

tc -s -d class ls $DEV will show bursts used.

> tc class add dev $DEV parent 1:1 classid $SSH htb rate 5kbps ceil 
> $MAX_RATE burst 0 prio 0 quantum 1600

I would give ssh some burst

> tc class add dev $DEV parent 1:1 classid $HTTP htb rate 10kbps ceil 
> $MAX_RATE burst 15k prio 0 quantum 1600
> tc class add dev $DEV parent 1:1 classid $DEF htb rate 5kbps ceil 
> $MAX_RATE burst 0 prio 1 quantum 1600
> 
> ### ESFQ LEAFS ###
> tc qdisc add dev $DEV parent $SSH handle 10: esfq perturb 10 hash ctorigdst
> tc qdisc add dev $DEV parent $DEF handle 30: esfq perturb 10 hash classic
> tc qdisc add dev $DEV parent $P2P handle 20: esfq perturb 10 hash 
> ctorigdst depth 256
> tc qdisc add dev $DEV parent $HTTP handle 40: esfq perturb 10 hash classic
> 
> 
> ## RED rule used instead of ESFQ one for $P2P class ##
> #tc qdisc add dev $DEV parent $P2P handle 20: red min 1600 max 6400 
> burst 5 limit 6k avpkt 1000
> 
> 
> 
> _______________________________________________
> LARTC mailing list
> LARTC at mailman.ds9a.nl
> http://mailman.ds9a.nl/cgi-bin/mailman/listinfo/lartc
> 



More information about the LARTC mailing list