[LARTC] CBQ only works 'bounded'

Linux Advanced Routing and Traffic Control

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

 



what i try to achieve with QoS is to divide my outgoing traffic in one high priority class and one low priority class. i have an asymetric connection with 768 kbit/s downstream and 128 kbit/s upstream and want to avoid ack-congestions by sending ack packets through the high priority class and normal outbound traffic through the low priority class. what i've done so far is the following:

#create the root class
tc qdisc add dev ppp0 root handle 1: cbq bandwidth 10Mbit avpkt 1000 mpu 64

#limit outbound traffic to 128kbit/s total
tc class add dev ppp0 parent 1: classid 1:1 cbq bandwidth 10Mbit rate 128kbit allot 1514 weight 12.8kbit prio 8 maxburst 20 avpkt 1000 bounded

#create a high priority class
tc class add dev ppp0 parent 1:1 classid 1:10 cbq bandwidth 10Mbit rate 20kbit allot 1514 weight 2.0kbit prio 1 maxburst 20 avpkt 1000

#create a low priority class
tc class add dev ppp0 parent 1:1 classid 1:20 cbq bandwidth 10Mbit rate 108kbit allot 1514 weight 10.8kbit prio 7 maxburst 20 avpkt 1000 bounded

#use sfq for both
tc qdisc add dev ppp0 parent 1:10 sfq quantum 1514b perturb 10
tc qdisc add dev ppp0 parent 1:20 sfq quantum 1514b perturb 10

#put everything in the low priority class
tc filter add dev ppp0 parent 1: protocol ip prio 20 u32 \
match u8 0x00 0x00 \
flowid 1:20

#except ack-packets (header length 0x05, total l. 0x34, ack set)
tc filter add dev ppp0 parent 1: protocol ip prio 10 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u8 0x34 0xff at 3 \
match u8 0x10 0xff at 33 \
flowid 1:10

the good thing is that this works. of course this doesn't mean its error-free, so please tell me if i've done something terribly wrong.

if i use this configurtion and upload with ~14.5kb/s (ack's not included) i can still download with ~84kb/s. but what i dont understand is that the whole thing stops working if i remove the 'bounded' from classid 1:20. i thought this would release the bandwidth of 1:10 to 1:20 _only_ if 1:10 doesn't need it. i set the prio of 1:10 to the highest value to ensure that if any ack-packets should be sent via 1:10 these packets get send first. but my download speed decreases to ~20kb/s if i upload at the same time. i think this indicates that ack packets have to wait behind some bigger data packets until they get sent. in numbers, i have with 1:20 set to 'bounded':

class cbq 1: root rate 10Mbit (bounded,isolated) prio no-transmit
 Sent 461859 bytes 1189 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 605 undertime 0
class cbq 1:10 parent 1:1 leaf 8146: rate 20Kbit prio 1
 Sent 33372 bytes 828 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 1.57292e+06 undertime 0
class cbq 1:1 parent 1: rate 128Kbit (bounded) prio no-transmit
 Sent 461859 bytes 1189 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 41470 undertime 0
class cbq 1:20 parent 1:1 leaf 8147: rate 108Kbit (bounded) prio 7
 Sent 428487 bytes 361 pkts (dropped 0, overlimits 1860)
 backlog 15p
  borrowed 0 overactions 197 avgidle -82792 undertime 84903

and without 'bounded'

class cbq 1: root rate 10Mbit (bounded,isolated) prio no-transmit
 Sent 1283284 bytes 1397 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 624 undertime 0
class cbq 1:10 parent 1:1 leaf 8148: rate 20Kbit prio 1
 Sent 18244 bytes 454 pkts (dropped 0, overlimits 0)
  borrowed 0 overactions 0 avgidle 2.66114e+06 undertime 0
class cbq 1:1 parent 1: rate 128Kbit (bounded) prio no-transmit
 Sent 1283284 bytes 1397 pkts (dropped 0, overlimits 0)
  borrowed 844 overactions 0 avgidle 219417 undertime 0
class cbq 1:20 parent 1:1 leaf 8149: rate 108Kbit prio 7
 Sent 1265040 bytes 943 pkts (dropped 0, overlimits 2564)
  borrowed 844 overactions 7 avgidle -186045 undertime 265135

now i'm curious what i have to do to make 1:10 share it's bandwidth in a way it doesn't ruin the whole mechanism.

also i would like to know what 'overactions' are and what it means (or at least if it is good or bad) if tc -s shows a 'backlog 15p' or similar in the statistic of e.g. class 1:20.

thanks for your help,

Patrick




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