hi all, while trying red inplace of sfq/pfifo i go the follwing error tc qdisc add dev eth0 parent 1:470 red max 12288 min 6100 limit 12288 avpkt 1514 burst 2 RED : failed to calculate EWMA constant i have the scheduling as modules, so i did insmod & tried again but the result was same ! pls can anyone tell me whats the mistake thanx in anticipation arindam haldar
On Tue, Jan 01, 2002 at 10:33:06PM +0530, Arindam Haldar wrote:> hi all, > > while trying red inplace of sfq/pfifo i go the follwing error > > tc qdisc add dev eth0 parent 1:470 red max 12288 min 6100 limit 12288 > avpkt 1514 burst 2This returns -1: int tc_red_eval_ewma(unsigned qmin, unsigned burst, unsigned avpkt) { int wlog = 1; double W = 0.5; double a = (double)burst + 1 - (double)qmin/avpkt; if (a < 1.0) return -1; for (wlog=1; wlog<32; wlog++, W /= 2) { if (a <= (1 - pow(1-W, burst))/W) return wlog; } return -1; } You can use this to calculate what is wrong. Either burst+1-qmin/avpkt is smaller than 1, or a is too high to be matched by a time constant. Regards, bert -- http://www.PowerDNS.com Versatile DNS Software & Services http://www.tk the dot in .tk Netherlabs BV / Rent-a-Nerd.nl - Nerd Available - Linux Advanced Routing & Traffic Control: http://ds9a.nl/lartc
Or from my law for implement RED you can go with # /sbin/tc qdisc add dev <eth0> parent 10:<2000> red max <64000> min 1500 \ limit <64kb> avpkt 1000 burst 20 here, parameters in <> are variable and leave rest as it is I assume you wana shapping of 64kb 2000 is id parameter to max is (64 * 1000) -----Original Message----- From: bert hubert <ahu@ds9a.nl> To: Arindam Haldar <ahiam@yahoo.com> Cc: lartc@mailman.ds9a.nl Subject: Re: [LARTC] RED problem ! On Tue, Jan 01, 2002 at 10:33:06PM +0530, Arindam Haldar wrote:> hi all, > > while trying red inplace of sfq/pfifo i go the follwing error > > tc qdisc add dev eth0 parent 1:470 red max 12288 min 6100 limit 12288 > avpkt 1514 burst 2This returns -1: int tc_red_eval_ewma(unsigned qmin, unsigned burst, unsigned avpkt) { int wlog = 1; double W = 0.5; double a = (double)burst + 1 - (double)qmin/avpkt; if (a < 1.0) return -1; for (wlog=1; wlog<32; wlog++, W /= 2) { if (a <= (1 - pow(1-W, burst))/W) return wlog; } return -1; } You can use this to calculate what is wrong. Either burst+1-qmin/avpkt is smaller than 1, or a is too high to be matched by a time constant.