Re: Improved performance on up/download even though only sip was prioritized - please explain

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Greetings Stefan,

>my wan connection is 7000kbit down and 800kbit up.
>
>If i setup a download and upload at the same time, speed drops to 
>60KB/s down and 70KB/s up. This is an expected behavior without any 
>shaping.
>
>As i only wanted to give my PBX (192.168.0.101) a fixed bandwidth 
>for sip, i came up with the following:
>
>tc qdisc add dev pppoe-wan root       handle 1:    htb default 30
>tc class add dev pppoe-wan parent 1:  classid 1:1  htb rate 800kbit
>tc class add dev pppoe-wan parent 1:1 classid 1:10 htb rate 120kbit # voip
>tc class add dev pppoe-wan parent 1:1 classid 1:30 htb rate 680kbit # default
> 
>iptables -t mangle -A FORWARD -s 192.168.0.101 -j CLASSIFY --set-class 1:10
>
>It does what i want, reserves 120kbit for traffic from 192.168.0.101. 
>
>However the nice side effect is, that this also boosts my download/uploads and i have no idea why. 
>
>Download is at 650KB/s and upload is around 65KB/s.
>
>Can anyone explain this behavior?

Without more information, I cannot identify the exact explanation, 
however, I can give you a partial answer.

Your HTB script does this:

   tc qdisc add dev pppoe-wan root       handle 1:    htb default 30

Point #1: (observation)
-----------------------
So, you say that you are classifying only traffic from your 
192.168.0.101, however, defining "default 30" on your HTB root qdisc 
means that packets otherwise not classified are going to show up in 
class 1:30.

You can see that this class is handling bytes/packets in your 'tc -s 
class show dev pppoe-wan' output.  Take a look at the dropped 
statistics that you posted in class 1:30.  In addition to limiting 
the dequeue rate, that class has even dropped 6548 packets.  
[Dropping isn't always bad.]

In short, you are shaping all traffic dequeued on this interface.


Point #2:
---------
Since you are shaping all traffic dequeued on this interface, you 
have reduced the number of packets in-flight passing through your 
modem (or lower-layer device).  The most congested link here is very 
probably the ATM (or ADSL? or something?) link between the modem and 
your provider's head end gear (a DSLAM or some other concentrator).

It is this link that is usually saturated.  Before you employed any 
shaping, the packets you were sending were getting queued in great 
big traffic jams (Stau!) in the modem headed up to the head end or 
(buffer bloat) queued in the head end gear to be sent to you.

Every queue has a size (or depth).  If the packet cannot be 
delivered, then it is dropped.  This goes for upload packets as well 
as download packets.  A small amount of packet dropping is routine 
for the Internet.  But, as congestion increases and packet-dropping, 
correspondingly, increases, then communication between endpoints can 
be significantly impaired.  You were experiencing this significant 
impairment when you were saturating your link without any HTB 
shaping.  I suspect that this was an example of buffer bloat (a term 
of art, widely publicized in 2009 and following).

Your success here is employing a shaper on your OpenWrt box.  You 
have effectively made your box the smallest link (setting the 
throughput to 800kbit/680kbit), you have effectively reduced the 
congestion at the upstream device, the modem or provider head end.


To get a more precise or exact explanation, you would need to be 
able to observe the queuing states of the devices immediately 
upstream of your OpenWrt box.

I hope this was a helpful explanation,

-Martin

>root@OpenWrt:~# tc -s class show dev pppoe-wan
>class htb 1:10 parent 1:1 prio 0 rate 120000bit ceil 120000bit burst 1599b cburst 1599b 
> Sent 140214 bytes 295 pkt (dropped 486, overlimits 0 requeues 0) 
> rate 7584bit 2pps backlog 0b 0p requeues 0 
> lended: 295 borrowed: 0 giants: 0
> tokens: -583208 ctokens: -583208
>
>class htb 1:1 root rate 800000bit ceil 800000bit burst 1600b cburst 1600b 
> Sent 12418167 bytes 25721 pkt (dropped 0, overlimits 0 requeues 0) 
> rate 535272bit 235pps backlog 0b 0p requeues 0 
> lended: 0 borrowed: 0 giants: 0
> tokens: -26351 ctokens: -26351
>
>class htb 1:30 parent 1:1 prio 0 rate 680000bit ceil 680000bit burst 1599b cburst 1599b 
> Sent 12280937 bytes 25428 pkt (dropped 6548, overlimits 0 requeues 0) 
> rate 527480bit 233pps backlog 0b 2p requeues 0 
> lended: 25426 borrowed: 0 giants: 0
> tokens: -274731 ctokens: -274731

-- 
Martin A. Brown
http://linux-ip.net/

[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux