[LARTC] Weighted packet shaping?
Mark Williams (MWP)
mwp@internode.on.net
Thu, 23 Dec 2004 21:24:18 +1030
> Mark Williams (MWP) wrote:
> >Ok.
> >
> >My Linux (which is connected to the ADLS modem) box runs HTTP, FTP, etc
> >services and also runs bittorrent, edonkey,
> >etc.
> >I have two other PCs (both windows) which connect to the internet via the
> >Linux
> >box (MASQ).
> >
> >Now, i want data like SSH, ICMP, DNS from any source to ppp0 to get top
> >priority.
> >I want the two windows PCs to get 2nd priority.
> >I want services to get 3rd, and the rest (torrents, etc) to get the lowest
> >priority.
> >
> >I have this setup atm using HTB and SFQ.
> >
> >Now this is what happens:
> >I have bittorrent going as fast as possible outbound.
> >I then use my linux box to send FTP data over the same link.
> >
> >Im finding that packet shaping is splitting the outbound bandwidth
> >(256kbit)
> >equally between the two.
> >
> >This is not what im after... want the windows box to take more bandwidth
> >off
> >bittorrent than 50% like it is atm.
> >
> >Does this explain my problem better?
>
> Yes, you can do this with htb.
>
> You'll need to back off a bit from 256kbit to allow for overheads - this
> is tweakable with patch Ed posted to the list - you could also shape
> incoming, but you would need IMQ which involves patching/doing new kernel.
>
> For now try making a parent with rate and ceil 220kbit.
> Have 4 child/leaf classes like - (assuming 1 is highest priority)
>
> class 1 rate 120 ceil 220 prio 0
> class 2 rate 50 ceil 220 prio 1
> class 3 rate 25 ceil 220 prio 2
> class 4 rate 25 ceil 220 prio 3
>
> There are other tweaks you can try, it depends how much you care about
> latency. You could also share the windows boxes bandwidth by IP.
>
> I don't do it quite like the above - so if it doesn't work, say and I'll
> think again.
Well im currently using:
#root device
$TC qdisc add dev $INTERFACE root handle 1: htb default 25
#root class
$TC class add dev $INTERFACE parent 1: classid 1:1 htb rate 256kbit
#20 - ICMP, DNS, SYN, SSH
$TC class add dev $INTERFACE parent 1:1 classid 1:20 htb rate 128kbit ceil 256kbit prio 1
$TC qdisc add dev $INTERFACE parent 1:20 handle 20: sfq perturb 10
$TC filter add dev $INTERFACE parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
#21 - HTTP/FTP out
$TC class add dev $INTERFACE parent 1:1 classid 1:21 htb rate 128kbit ceil 256kbit prio 2
$TC qdisc add dev $INTERFACE parent 1:21 handle 21: sfq perturb 10
$TC filter add dev $INTERFACE parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
#22 - All cool.comp traffic
$TC class add dev $INTERFACE parent 1:1 classid 1:22 htb rate 128kbit ceil 256kbit prio 3
$TC qdisc add dev $INTERFACE parent 1:22 handle 22: sfq perturb 10
$TC filter add dev $INTERFACE parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
#23 - All ian.comp traffic
$TC class add dev $INTERFACE parent 1:1 classid 1:23 htb rate 64kbit ceil 256kbit prio 4
$TC qdisc add dev $INTERFACE parent 1:23 handle 23: sfq perturb 10
$TC filter add dev $INTERFACE parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
#24 - HTTP/FTP in
$TC class add dev $INTERFACE parent 1:1 classid 1:24 htb rate 64kbit ceil 256kbit prio 5
$TC qdisc add dev $INTERFACE parent 1:24 handle 24: sfq perturb 10
$TC filter add dev $INTERFACE parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
#25 - Everything else
$TC class add dev $INTERFACE parent 1:1 classid 1:25 htb rate 20kbit ceil 64kbit prio 8
$TC qdisc add dev $INTERFACE parent 1:25 handle 25: sfq perturb 10
$TC filter add dev $INTERFACE parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25
Ill do some more tests and link to a rates graph when done.
It should illustrate the problem.
Thanks again,
Mark.