Description

"QoS Transmit-rate" does not work when the total of all transmit-rate is set to more than 100% of a scheduler (the sum of all queues configured stays at less than 100%). 

CoS is working as designed; the issue is due to a documentation error.  See below for details.

Symptoms

During the investigation, observed that "QoS Transmit-rate" doesn't work when the total of transmit-rate is set to more than 100 a scheduler.  For an example, please refer to the following log.

lab@LCC1_RE0> show configuration
## Last commit: 2009-11-20 19:11:04 JST by lab
version 9.1S1.1;

<---skip--->

class-of-service {
   forwarding-classes {
   class class1 queue-num 3;
   class mig_class1 queue-num 4;
   class class2 queue-num 2;
   class class3 queue-num 1;
   class class4 queue-num 0; <---refer to same a quene
   class mig_class4 queue-num 0; <---refer to same a quene
   }
interfaces {
   ge-7/0/0 {
      scheduler-map mig_westmap;
      }
   }
scheduler-maps {
   mig_westmap {
      forwarding-class class1 scheduler class1;
      forwarding-class mig_class1 scheduler mig_class1;
      forwarding-class class2 scheduler class2;
      forwarding-class class3 scheduler class3;
      forwarding-class class4 scheduler class4;
      forwarding-class mig_class4 scheduler class4;  <<<<<<<<* If you delete this then it will work*/
      }
   }
schedulers {
   class1 {
      priority strict-high;
      }
   mig_class1 {
      transmit-rate percent 2;
      priority high;
      }
   class2 {
      transmit-rate percent 36;
      priority low;
      }
   class3 {
      transmit-rate percent 36;
      priority low;
      }
   class4 {
      transmit-rate percent 13;  
      priority low;
      }
   mig_class4 {
      transmit-rate percent 13;
      priority low;
      }
   }
}


*******The sum of all queues configured is 87%.************
*******The sum of all schedulers configured is 100%.***********


<---skip--->

lab@LCC1_RE0> start shell pfe network fpc7
GFPC platform (300Mhz MPC 755 processor, 1024MB memory, 512KB flash)
EGFPC7(LCC1_RE0 vty)# show cos scheduling-policy

scheduler binding to final streams
==================================
ifd   phy   Q     tx-BW delay-BW   sched    rate tcp/plp tcp/plp tcp/plp tcp/plp
index strem num   (%)   (%)        priority cntl (0/0)   (0/1)   (1/0)   (1/1)
----- ----- ---   ----- --------   -------- ---- ------- ------- ------- -------
137   64    0     13.0 <--16.6     0        off  1       1       1       1
1                 36.0    16.6     0        off  1       1       1       1
2                 36.0    16.6     0        off  1       1       1       1
3                255.0    16.6     4        off  1       1       1       1
4                  2.0    16.6     3        off  1       1       1       1
0                 13.0 <--16.6     0        off  1       1       1       1

138   0     0     95.0    95.0     0        off  1       1       1       1
3                  5.0     5.0     0        off  1       1       1       1

scheduler binding to chassis streams
====================================
- No scheduling policy attached -

EGFPC7(LCC1_RE0 vty)# show mqchip 0 wan cos
                 Pkt Mem Alloc   WRR delta     WRR threshold
                 -------------   ---------     -------------
[Stream 64] Q 0: 136048 Cells    8559 <--*1   34236
            Q 1: 174421 Cells    23704        94816 
            Q 2: 174421 Cells    23703        94812
            Q 3: 174421 Cells    65535        262140
            Q 4: 20930 Cells     1317         5268
            Q 5: 256 Cells       0            0
            Q 6: 256 Cells       0            0
            Q 7: 256 Cells       0            0

EGFPC7(LCC1_RE0 vty)#

**************** *1 8559=13% ****************


lab@LCC1_RE0> configure
Entering configuration mode

[edit]
lab@LCC1_RE0# edit class-of-service scheduler

[edit class-of-service schedulers]
lab@LCC1_RE0# replace pattern 13 with 26

[edit class-of-service schedulers]
lab@LCC1_RE0# show
class1 {
   priority strict-high;
   }
mig_class1 {
   transmit-rate percent 2;
   priority high;
   }
class2 {
   transmit-rate percent 36;
   priority low;
   }
class3 {
   transmit-rate percent 36;
   priority low;
   }
class4 {
   transmit-rate percent 26;
   priority low;
   }
mig_class4 {
   transmit-rate percent 26;
   priority low;
   }

*******The sum of all queues configured is 100%.************
*******The sum of all schedulers configured is 113%.***********


[edit]
lab@LCC1_RE0# commit
commit complete

[edit]
lab@LCC1_RE0# exit
Exiting configuration mode

lab@LCC1_RE0> start shell pfe network fpc7


GFPC platform (300Mhz MPC 755 processor, 1024MB memory, 512KB flash)

EGFPC7(LCC1_RE0 vty)# show cos scheduling-policy

scheduler binding to final streams
==================================
ifd   phy   Q     tx-BW delay-BW   sched    rate tcp/plp tcp/plp tcp/plp tcp/plp
index strem num   (%)   (%)        priority cntl (0/0)   (0/1)   (1/0)   (1/1)
----- ----- ---   ----- --------   -------- ---- ------- ------- ------- -------
137   64    0     26.0<--255.0     0        off  1       1       1       1
1                 36.0   255.0     0        off  1       1       1       1
2                 36.0   255.0     0        off  1       1       1       1
3                255.0   255.0     4        off  1       1       1       1
4                  2.0   255.0     3        off  1       1       1       1
0                 26.0<--255.0     0        off  1       1       1       1

138  0      0     95.0    95.0     0        off  1       1       1       1
3                  5.0     5.0     0        off  1       1       1       1


scheduler binding to chassis streams
====================================
- No scheduling policy attached -

EGFPC7(LCC1_RE0 vty)#
EGFPC7(LCC1_RE0 vty)# show mqchip 0 wan cos
                 Pkt Mem Alloc  WRR delta   WRR threshold
                 -------------  ---------   -------------
[Stream 64] Q 0: 136048 Cells   8559  <--*2 34236 
            Q 1: 174421 Cells   23704       94816 
            Q 2: 174421 Cells   23703       94812
            Q 3: 174421 Cells   65535       262140
            Q 4: 20930 Cells    1317        5268
            Q 5: 256 Cells      0           0
            Q 6: 256 Cells      0           0
            Q 7: 256 Cells      0           0

**************** *1 8559=13% It is not 26% ****************


Also noted the following log message.

Nov 20 19:15:47.805 LCC1_RE0 fpc7 COSMAN: Wrr underflow, for ge-7/0/0
Nov 20 19:15:47.805 LCC1_RE0 fpc7 COSMAN: policy update failed


In short you cannot assign the same scheduler to Multiple Forwarding classes.  Scheduler task is to service a QUEUE, in this case Q0, which could get a packet classified by the forwarding class "class4" or "mig_class4".   You should not assign the scheduler named "class4", in this example, to both forwarding class "class4" and "mig_class4" . Only assigning one of them will work.   In the case where it is assigned to both then "transmit rate is counted double".

  Recommendation: Configure on scheduler to a QUEUE and NOT a forwarding class. It is a one to one mapping.

Solution

CoS is working as designed.  This is a Documentation Error.

The documentation currently states:

"You can configure up 16 different forwarding-class names. The corresponding output queue number can be from 0 through 7. Therefore, you can map multiple forwarding classes to a single queue. If you map multiple forwarding classes to a queue , the multiple forwarding classes must refer to the same scheduler (at the [edit class-of-service scheduler-maps map-name forwarding-class class-name scheduler scheduler-name] hierarchy level)."

This  should be changed to:
"You can configure up 16 different forwarding-class names. The corresponding output queue number can be from 0 through 7. Therefore, you can map multiple forwarding classes to a single queue. If you map multiple forwarding classes to a queue, only one of those classes can have scheduler (at the [edit class-of-service scheduler-maps map-name forwarding-class class-name scheduler scheduler-name] hierarchy level)."