[Gllug] Bandwidth shaping

Rev Simon Rumble simon at rumble.net
Wed Apr 3 14:45:10 UTC 2002

Okay I followed through all those references and discovered why I'd
had problems before: you need to patch the kernel and use a patched
tc.  Once I started doing that, I started to get results.

Results for my 115k HomeChoice (ppp via set-top-box over ATM over
ADSL) are good.  Running at full tilt (kernel download from local
mirror) the latency of pings went from 400ms to 400ms.  A tenfold

400ms might not sound like much but it's WAY better than four seconds
when composing an email.  When I move to ADSL in two weeks, I suspect
it'll be a bit lower.

Yay.  Thanks for all the tips folks.  Now does anyone know how you can
monitor what's happening in real time?  i.e., how many packets are
coming through in each class and what is the shaper doing?

Inserted below, my hacked version.  The only changes from
are burst rate and link speed.


# The Ultimate Setup For Your Internet Connection At Home
# Set the following values to somewhat less than your actual download
# and uplink speed. In kilobits

# clean existing down- and uplink qdiscs, hide errors
tc-htb qdisc del dev $DEV root    2> /dev/null > /dev/null
tc-htb qdisc del dev $DEV ingress 2> /dev/null > /dev/null

###### uplink

# install root HTB, point default traffic to 1:20:

tc-htb qdisc add dev $DEV root handle 1: htb default 20

# shape everything at $UPLINK speed - this prevents huge queues in your
# DSL modem which destroy latency:

tc-htb class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 3k

# high prio class 1:10:

tc-htb class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
   burst 3k prio 1

# bulk & default class 1:20 - gets slightly less traffic, 
# and a lower priority:

tc-htb class add dev $DEV parent 1:1 classid 1:20 htb rate $[9*$UPLINK/10]kbit \
   burst 3k prio 2

# both get Stochastic Fairness:
tc-htb qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc-htb qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10

# TOS Minimum Delay (ssh, NOT scp) in 1:10:
tc-htb filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
      match ip tos 0x10 0xff  flowid 1:10

# ICMP (ip protocol 1) in the interactive class 1:10 so we 
# can do measurements & impress our friends:
tc-htb filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
        match ip protocol 1 0xff flowid 1:10

# To speed up downloads while an upload is going on, put ACK packets in
# the interactive class:

tc-htb filter add dev $DEV parent 1: protocol ip prio 10 u32 \
   match ip protocol 6 0xff \
   match u8 0x05 0x0f at 0 \
   match u16 0x0000 0xffc0 at 2 \
   match u8 0x10 0xff at 33 \
   flowid 1:10

# rest is 'non-interactive' ie 'bulk' and ends up in 1:20

########## downlink #############
# slow downloads down to somewhat less than the real speed  to prevent 
# queuing at our ISP. Tune to see how high you can set it.
# ISPs tend to have *huge* queues to make sure big downloads are fast
# attach ingress policer:

tc-htb qdisc add dev $DEV handle ffff: ingress

# filter *everything* to it (, drop everything that's
# coming in too fast:

tc-htb filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \ police rate ${DOWNLINK}kbit burst 5k drop flowid :1

Rev Simon Rumble <simon at rumble.net>
Send email with subject "send key pub" for public key.

A lifetime of listening to disco music is a high price to pay
for one's sexual preference

- Quentin Crisp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 240 bytes
Desc: not available
URL: <http://mailman.lug.org.uk/pipermail/gllug/attachments/20020403/627f9c44/attachment.pgp>

More information about the GLLUG mailing list