CBWFQ on DSL not allocating bw correctly

Unanswered Question
Jan 22nd, 2009

Have found a strange problem with 837 and 877 dsl routers. We have configured Scavenger and Net Management classes, with Scavenger configured for 10% bandwidth and Management 20%. So when the link is congested, we should see the default class getting 70%.

What we are seeing when we test by performing simultaneous file transfers from a "scavenger" pc, and from another that would go into the default class is that both are getting the same amount of bandwidth. See attached.

I would expect scavenger to be dropped more aggressively when the link is filled.

Has anyone else seen this?

I have this problem too.
0 votes
  • 1
  • 2
  • 3
  • 4
  • 5
Overall Rating: 4 (1 ratings)
Rupesh Kashyap Fri, 01/23/2009 - 01:16


I have gone through ur configuration. Can you give me detail of packet with source and destination IP so that I can work on this problem. One thing more, pls run Clear Counters, and then give me the output of Policy map and Policy map Interface..I am waiting.

Rupesh Kashyap Fri, 01/23/2009 - 01:29

Hi, You policy is right. You have 512 Kbs, but you are using only Default 75 %. So QOS will apply only on 384 Kbs.

As per your Output(NET_MGMT_SERVICES - 102 K,

SCAVENGER- 51K,Class-default - 157 K) so

Total QOS Bandwidth--310 K. So this is right. If you want to use 70 % for Default, then run, max-reserved-bandwidth 100 Command in ATM Interface.

milan.kulik Fri, 01/23/2009 - 02:31

Hi Rupesh,

I'm afraid you are wrong.

The default max-reserved-bandwidth value75% applies only to the bandwidth sum which can be reserved for particular classes, not the traffic passing the interface.

Also the class-default offered rate 157000 bps means the rate of packets coming in to the class, not the bandwidth available for the class.


IMHO, your config reserved 51 and 102 kbps for SCAVENGER and NET_MGMT_SERVICES classes, but nothing is reserved for the class-default.

I.e., in congestion time SCAVENGER and NET_MGMT_SERVICES traffic must get 51 and 102 kbps at least, the rest of bandwidth is shared between all classes in a ratio proportional to their bandwidth reserved.

It's not clear to me how is the class-default counted here (nothing reseved).

According to your output, there is no real congestion, nothing has been dropped yet.

(You are sending 286kbps in SCAVENGER and 157kbps in class-default).

But you can see there are 28 packets in the class-default queue, so it's being delayed.

It could be a good lab to reserve some bandwidth for the class-default and observe how the behaviour changes.

Last comment:

You should never show your passwords in config presented anywhere. The 7-encrypted passwords can be decrypted easily.



col.murray Sun, 01/25/2009 - 12:28

Hi Milan,

Thanks for the suggestion, we will try it with the default bandwidth defined.

The idea is this: Traffic marked as going into Scavenger class is restricted if congestion occurs. Net_Mgmt (specifically SSH) gets dedicated bandwidth. This is because certain applications on the DSL sites are occasionally swamping the bandwidth.

What we are finding instead, is that Scavenger and Default classes appear to be sharing the bandwidth! The traffic is essentially Windows File Transfer, but as you can see from the output, there are packets queued, but none dropped.

Am I missing something fundamental?



milan.kulik Mon, 01/26/2009 - 00:13

Hi Colin,

IMHO, what you are missing is the fact the Scavenger class is NOT restricted if congestion occurs.

You config resevers a minimal bandidth for it (51kbps).

In a congestiion time, if there is no NET_MGMT_SERVICES traffic running, the rest of bandwidth is shared between Scavenger and Default classes - this is what expected.

If you follow my discussin with Joseph, there are questions open HOW EXACTLY is the bandidth shared.

If you want to restrict the Scavenger to use ONLY a limited badwidth in a congestion time, you need to add a shaper or policer for Scavenger to your config.



Joseph W. Doherty Fri, 01/23/2009 - 05:20

"We have configured Scavenger and Net Management classes, with Scavenger configured for 10% bandwidth and Management 20%. So when the link is congested, we should see the default class getting 70%. "

You've defined a minimum bandwidth of 20 and 10 percent, with 70 percent left undefined. I.e., it's not been reserved for default class as you assume. My understanding of undefined bandwidth it's proportionally available to the other classes relative to their bandwidth allocations.

To accomplish what you think your configuration should do, you'll need to explicitly define class-default at 70 percent.


policy-map WAN


bandwidth percent 20

set dscp cs4


bandwidth percent 10

set dscp 1

class class-default

bandwidth percent 70

set dscp cs1


NB: The above will change class-default from FQ to FIFO. Except for some platforms, mixing class-default FQ with non-LLQ, I believe, upsets explict class bandwidth reservations.

What you might try if you want to retain FQ, set your scavenger class to 1 percent, allow your NET_MGMT_SERVICES in class default but tag such traffic with CS4 on ingress. (Believe class-default's FQ is actually WFQ.) Also note, SSH can be used by SCP which can use bandwidth like FTP.

milan.kulik Fri, 01/23/2009 - 05:42

Hi Joseph,

I agree with you.

(Only max-reserved-bandwidth 100 would be necessary in your config, too.)

But in a case of nothing reserved for the class-default, what happens if only NET_MGMT_SERVICES traffic (say a stream exceeding the interface bandwidth) plus some default-class traffic compete for the bandwidth?

"undefined bandwidth it's proportionally available to the other classes relative to their bandwidth allocations" - but class-default has nothing allocated, so NET_MGMT_SERVICES traffic will consume all the bandidth in this case?

I read somewhere this was the reason why the max-reserved-bandwidth=75% by default and 25% was reserved for the default-class then.

But I'm not able to find any document proving this.

What's your opinion?



Joseph W. Doherty Fri, 01/23/2009 - 09:45

"(Only max-reserved-bandwidth 100 would be necessary in your config, too.)"

Correct; good catch! Otherwise assuming the default 75% for defining CBWFQ bandwidth reservations, the class-default bandwidth statement should be 45%. In such case, the default 25% set aside would be available to the defined classes, if not otherwise used for other stuff.

The default of max-reserved-bandwidth of 75%, guarantees 25% of the link's bandwidth for other stuff; class-default w/o an explict bandwidth, whether undefined as a class as in implicit, or explicity defined with FQ, is able to obtain its bandwidth from this set aside bandwidth in addition to other bandwidth left non-reserved.

The 25% set aside by default is not the same as class class-default, although again, such a class-default will use the set aside bandwidth (as can other classes). If other other explict classes have reserved the max reserved, then class-default would implicitly get part of the 25% default set aside.

With default max reserved:

policies that should be "legal":

policy-map x

class x

bandwidth percent 75


policy-map x

class x

bandwidth percent 75

class class-default


policy-map x

class x

bandwidth percent 75

class class-default



policy-map x

class x

bandwidth percent 74

class class-default

bandwidth percent 1

Joseph W. Doherty Fri, 01/23/2009 - 10:26

Guess I might add:

policy-map x

class class-default

bandwidth percent 75


policy-map x

class x

bandwidth percent 1

class class-default

bandwidth percent 74

To demostrate the difference between class bandwidth reservations and the reserve bandwidth set aside.

milan.kulik Sat, 01/24/2009 - 04:41

Hi Joseph,

the core of my question is:

Let's say I've left the max-reserved-bandwidth=75

and configured:

policy-map x

class x

bandwidth percent 50

class class-default

bandwidth percent 25

In a case of congestion, class x will get 50%, class-default will get 25% as reserved.

The remaining 25% should be shared between class x and class-default in 2:1 ratio, so class x should get 66,7% and class-default should get 33,3% totally.


What if I configure only

policy-map x

class x

bandwidth percent 50

class class-default


In a case of congestion class x should get 50% as reserved. The remaining 50% should be shared between class x and class-default.

But what will be the sharing ratio?



Joseph W. Doherty Sat, 01/24/2009 - 05:59

I too think there's 2:1 bandwidth split, as you believe in your first example. Although, I recall I may have read some Cisco documentation that noted available bandwidth is split between classes equally, not proportionally. Again, I believe it's proportional and also recall reading Cisco documentation to that effect too.

With your second example, I believe the answer is "none of the above". Without an explict bandwidth statement in class-default there should be an implicit FQ.

From my reading of "Understand Platform Differences" within http://www.cisco.com/en/US/tech/tk39/tk48/technologies_tech_note09186a00800fe2c1.shtml (although it discusses ATM interfaces, I believe the CBWFQ class-default FQ scheduling logic is likely independent of interface type), disrupts class guaranteed bandwidth percentages because of X number of FQ flows. In other words, in your second example, don't believe we can count on class x will always obtain at least 50% when there's congestion, or that it will obtain some predicted amount of available bandwidth, when there's class-default FQ. I don't think the question can be answered without knowing number of FQ flows, and if it's actually WFQ, you would also need to know IP Precedence for all the FQ flows too.

milan.kulik Sat, 01/24/2009 - 13:29

Hi Joseph,

I see I'll have to investigate the second case deeper in documenation and maybe build a lab.

Anyway, partial conclusion is:

I'll always us bandwidth settings for my class-default. It makes the behaviour predictable.

Thanks for your ideas,


Mohamed Sobair Sat, 01/24/2009 - 07:46


following are absolute causes:

1st: You should have 2 Policy Maps in your QoS config, One for Marking classified class, the second one for applying your QoS policy (Queing method).

2nd: You can Only reserve 75% out of the Total Bandwidth of the Interface or the configured Bandwidth of the Interface, so based on your config, a total 30% percent of 384Kb (75% of 512Kb) is reserved By CBWFQ which can be up to 115.2Kb.




This Discussion