[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