From: Andy Furniss <andy.furniss@dsl.pipex.com>
To: lartc@vger.kernel.org
Subject: Re: [LARTC] HTB: Problem with excess bandwidth distribution
Date: Thu, 28 Oct 2004 22:04:56 +0000 [thread overview]
Message-ID: <41816D08.7000809@dsl.pipex.com> (raw)
In-Reply-To: <41812464.8010207@gmx.net>
Leslie Patrick Polzer wrote:
> Hello,
>
> I have a serious problem with HTB which I wasn't able to solve myself.
>
> I run a masquerading router with ppp0 as interface to the Internet.
> Three clients need to share a downstream of 1 MBit, which I want
> to divide with tc.
> When I see a packet being forwarded to one of these clients, I give
> it the appropriate unique mark:
>
> iptables -t mangle -A FORWARD -d 192.168.34.141 -j MARK --set-mark 1
> iptables -t mangle -A FORWARD -d 192.168.34.140 -j MARK --set-mark 2
> iptables -t mangle -A FORWARD -d 192.168.1.2 -j MARK --set-mark 3
>
> Because it might be of interest: 192.168.34.0/24 is on network A
> with 10 MBit, 192.168.1.0/24 is on network B with 100 MBit.
>
> I then attach an IMQ device imq0 to the FORWARD table:
You can't use IMQ in forward AFAIK, see
http://www.docum.org/docum.org/kptd/
You can use it in prerouting, but because you are doing NAT you will
need to select for after NAT in the new IMQ from www.linuximq.net or
patch for NAT if you want to use an older IMQ. You can't mark on de
natted IPs in prerouting so you need to use u32.
Shaping from the narrow end of the bottleneck is a bit of a kludge, you
have to set your rates/ceils lower than link speed or you won't have a
queue to shape with.
If you don't want to have a more complicated script to mark interactive
packets/use prio etc. I would add 30K bfifos to each class - or if you
don't mind patching/tweaking use esfq/sfq with a queue length of about
20, not that these figures are set in stone - but the defaults for htb
with no queue added or untweaked sfq are alot longer.
Andy.
>
> # delegate all incoming on ppp+ to imq0
> iptables -t mangle -A FORWARD -i ppp+ -j IMQ --todev 0
>
> After all this I create the actual tc setup:
>
> # --- snip ---
> # clear root qdisc
> tc qdisc del dev imq0 root
>
> # add root qdisc (htb)
> tc qdisc add dev imq0 root handle 1: htb default 40
>
> # add root class (needed for bandwidth borrowing)
> tc class add dev imq0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit
>
> # set classes for users
> tc class add dev imq0 parent 1:1 classid 1:10 htb rate 333kbit ceil 1mbit \
> burst 15k
> tc class add dev imq0 parent 1:1 classid 1:20 htb rate 333kbit ceil 1mbit \
> burst 15k
> tc class add dev imq0 parent 1:1 classid 1:30 htb rate 333kbit ceil 1mbit \
> burst 15k
> tc class add dev imq0 parent 1:1 classid 1:40 htb rate 5kbps
>
> # set filters to direct ips to their classes
> tc filter add dev imq0 protocol ip parent 1: prio 1 handle 1 fw flowid 1:10
> tc filter add dev imq0 protocol ip parent 1: prio 1 handle 2 fw flowid 1:20
> tc filter add dev imq0 protocol ip parent 1: prio 1 handle 3 fw flowid 1:30
>
> # --- snap ---
>
> 1:40 is just for testing.
>
> The 'rate'-argument gets applied correctly if I don't use ceil - but I
> do, of
> course, want to let the classes borrow free bandwidth, so I use a ceiling
> of 1 MBit. And herein lies the problem:
>
> If 1:10 and 1:30 both download a file with full speed, 1:10 gets about
> 20kb/s (which is under its guaranteed bandwidth!) and 1:30 gets
> 90 kb/s. What is going wrong here? The shortened output of tc:
>
> class htb 1:1 root rate 1Mbit ceil 1Mbit burst 2909b/8 mpu 0b cburst
> 2909b/8 mpu 0b level 7
> class htb 1:10 parent 1:1 prio 0 quantum 4262 rate 333Kbit ceil 1Mbit
> burst 15Kb/8 mpu 0b cburst
> class htb 1:20 parent 1:1 prio 0 quantum 4262 rate 333Kbit ceil 1Mbit
> burst 15Kb/8 mpu 0b cburst
> class htb 1:30 parent 1:1 prio 0 quantum 4262 rate 333Kbit ceil 1Mbit
> burst 15Kb/8 mpu 0b cburst
> class htb 1:40 parent 1:1 prio 0 quantum 1000 rate 40Kbit ceil 40Kbit
> burst 1650b/8 mpu 0b cburst
>
> ...shows that each class is configured equal.
>
> Any clues? I'd be very, very grateful if anyone could point out errors.
> If more output is needed, just tell me.
>
>
> Kind regards,
>
> Leslie
>
> _______________________________________________
> LARTC mailing list / LARTC@mailman.ds9a.nl
> http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
>
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
next prev parent reply other threads:[~2004-10-28 22:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-28 16:55 [LARTC] HTB: Problem with excess bandwidth distribution Leslie Patrick Polzer
2004-10-28 17:20 ` Saad S. B. Faruque
2004-10-28 17:45 ` Zviad O. Giorgadze
2004-10-28 22:04 ` Andy Furniss [this message]
2004-10-29 6:11 ` Leslie Patrick Polzer
2004-10-29 11:17 ` Leslie Patrick Polzer
2004-10-29 15:29 ` Andy Furniss
2004-10-29 15:36 ` Leslie Patrick Polzer
2004-10-29 16:19 ` Jason Boxman
2004-10-29 17:40 ` Francisco Pereira
2004-10-29 22:03 ` Andy Furniss
2004-10-29 23:24 ` Andy Furniss
2004-10-31 12:03 ` Andy Furniss
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=41816D08.7000809@dsl.pipex.com \
--to=andy.furniss@dsl.pipex.com \
--cc=lartc@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.