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

[altq 21] Re: When a class is delayed




Fulvio,

	[ This discussion is about the detail of the CBQ mechanism.
	  Fulvio pointed out that, though the class gets its share
	  of the bandwidth, it is burstier than expected. ]

The orginal CBQ algorithm was changed when LBL CBQ went to v2.0.
In v1.0 (and in Sally's paper):
	- avgidle never becomes negative
	- the delay is always set to "offtime"
In v2.0:
	- avgidle can be negative (minidle sets the lower bound)
	- the delay is set to "offtime + undertime"

The changes break the original intention of "minburst".

More details about ALTQ/CBQ:
update_class_util() sets the undertime to the target idle time that
makes avgidle equal to 0.
That is, agvidle is calculated as
	avgilde = idle + 31/32*avgidle
So, to make the next avgidle to be 0, the next idle should be
	0 = idle + 31/32*avgidle
	idle = - 31/32*avgidle

This target idle time is used to set the undertime.

  --+-----------+---------+-------------+-------------------> time
   now        ifnow                undertime
                <-pkttime-><-targetidle->

rmc_delay_action() tries to set the idle time to be offtime.

	delay = undertime - target_idle + offtime

  ------------------+----------+--------+--------+--------->
                   now       ifnow  undertime
                <-pkttime-><------ offtime ------>

Does this answer your questions?

I think that larger burst is caused by a negative avgidle.
(I guess minidle should not be used)
What happens when you set minidle to 0?  

-Kenjiro