From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f181.google.com (mail-wi0-f181.google.com [209.85.212.181]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority" (verified OK)) by huchra.bufferbloat.net (Postfix) with ESMTPS id 8E4AE21F123; Fri, 24 Aug 2012 01:08:38 -0700 (PDT) Received: by wibhm2 with SMTP id hm2so401558wib.10 for ; Fri, 24 Aug 2012 01:08:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=0v4taKjj3IAXkmZqpt94Zmn7ZKkFDvSM3P3IyPmF8BQ=; b=d4k2xMLRL/KiVR6e/T7FsPNEDhW4jm324SB0fjaxJr2IQrv7i/qk/F9dq78fHyEE0j sRnaUJRIKsIinYq7KHVGrMOn0K9z4UVxeRaB7J5FP1P5Q9fSH9Vs76U87vpO9B/FsQhL 2stravsCGQmIDCNIEdxjJDcJPcy5ltACG8qxQ9MdiuT7DhsqzkHhKmw4Gou7UBCKoxaV aBnA57Muc7IvxpU7c11NhtQOgtFUAGs4maPxHUUDDR8nNoBWrLn70cqd/sEXgTlV4uyP UnCKc6X89o8EaWBiY+2F2DTOQtuPhlQgV+UUTuKCp4Q7H35O59VwVocVOIEvLTf2t1m2 FWdw== MIME-Version: 1.0 Received: by 10.180.95.193 with SMTP id dm1mr3529142wib.10.1345795716306; Fri, 24 Aug 2012 01:08:36 -0700 (PDT) Received: by 10.227.68.135 with HTTP; Fri, 24 Aug 2012 01:08:35 -0700 (PDT) In-Reply-To: <1345749433.571112868@apps.rackspace.com> References: <1345730322-6255-1-git-send-email-dave.taht@bufferbloat.net> <1345730322-6255-3-git-send-email-dave.taht@bufferbloat.net> <1345749433.571112868@apps.rackspace.com> Date: Fri, 24 Aug 2012 01:08:35 -0700 Message-ID: From: Dave Taht To: dpreed@reed.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: codel@lists.bufferbloat.net, cerowrt-devel@lists.bufferbloat.net Subject: Re: [Cerowrt-devel] [PATCH 2/2] codel: reduce count after exiting dropping state after one maxpacket X-BeenThere: cerowrt-devel@lists.bufferbloat.net X-Mailman-Version: 2.1.13 Precedence: list List-Id: Development issues regarding the cerowrt test router project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Aug 2012 08:08:39 -0000 On Thu, Aug 23, 2012 at 12:17 PM, wrote: > I would be cautious about cutting down the information rate to TCP. > Remember the collection of TCP pairs are already seeking this information= . > You risk driving TCP's control loop crazy, especially if you end up > "resonating" with it with positive feedback. We have been wrestling what we call s3 (re-entering dropping state) for a very long time. From k&v's current test ns2 code: https://github.com/dtaht/ns2/blob/master/queue/codel.cc ... r =3D dodeque(); dropping_ =3D 1; // mdt: thought was to to change this to r.ok // and do something mildly different below // If min went above target close to when it last went below, // assume that the drop rate that controlled the queue on the // last cycle is a good starting point to control it now. // Unfortunately, this is not easy to get at. "n*interval" is // used to indicate "close to" and values from 2 - 16 have been // used. A value of 8 has worked well. The count value doesn't // decay well enough with this control law. Until a better one // is devised, the below is a hack that appears to improve things. if(count_ > 2 && now- drop_next_ < 8*interval_) { count_ =3D count_ - 2; // kmn decay tests // mdt - floating point is not an option! if(count_ > 126) count_ =3D 0.9844 * (count_ + 2); } else count_ =3D 1; drop_next_ =3D control_law(now); } return (r.p); > > > > Rather than focus on "precision" or "stability" at the contended resource= , > remember the point is to minimize latency on an end-to-end basis so that = all > the TCP's can have tight control loops. Thus there is no "goal" to makin= g > the contended queue maximized in capacity. The goal is that it should dr= ain > quickly, which means keeping it small! The goal is (as the codel paper > says) to use the *minimum* latency as the estimator, not the "average" or > weighted (delayed) average. > > > > Keep focused on the control theory principles, NOT on throughput > maximization. If you push toward maximizing throughput at any cost, even > with codel, you will end up with *large* excursions in latency that stick > for a long time. I.e. bufferbloat. I might argue from a control theory perspective that we're not banging on or observing all the right things. I was dubious about the value of the 2nd patch, given the more aggressive decline in drop probability I already had vs a vs the ns2 code, (which was admittedly far less aggressive than the original linux code). Might retain the idea, flip it around some more, certainly plan to scratch head a lot... was glad to figure out newton didn't run in reverse that well, tho. Anyway, in my limited testing today the 3rd version of the patches worked fine at short RTTs and at a range of bandwidths from 1Mbit to 100Mbit, but that's the easy part and plenty more fiddling remains with more streams and longer RTTs. http://snapon.lab.bufferbloat.net/~d/fq_codel/rtts.png (It's also somewhat weird getting used to nearly perfect bi-directional utilization all the time in fq_codel - no matter what underlying version of codel is there) Incidentally there is this 10 second periodicity to my captures that bother= s me http://snapon.lab.bufferbloat.net/~d/fq_codel/alwaysthoughtthese10secondint= ervalswereaflawofthecapturetoolbut.png Anyway > > -----Original Message----- > From: "Dave T=E4ht" > Sent: Thursday, August 23, 2012 9:58am > To: cerowrt-devel@lists.bufferbloat.net > Subject: [Cerowrt-devel] [PATCH 2/2] codel: reduce count after exiting > dropping state after one maxpacket > > From: Dave Taht > > At a knife's edge, where we are rapidly entering and existing > a dropping state, seek lower to find the optimimum. > --- > include/net/codel.h | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/include/net/codel.h b/include/net/codel.h > index dbfccb7..5e85632 100644 > --- a/include/net/codel.h > +++ b/include/net/codel.h > @@ -342,6 +342,9 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sc= h, > vars->drop_next =3D codel_control_law(vars->drop_next, > params->interval, > vars->rec_inv_sqrt); > + } else { /* we dropped out of the dropping state in 1 pkt */ > + vars->count =3D vars->count > 1 ? vars->count - 1 : 1; > + codel_Newton_step(vars); > } > } > end: > -- > 1.7.9.5 > > _______________________________________________ > Cerowrt-devel mailing list > Cerowrt-devel@lists.bufferbloat.net > https://lists.bufferbloat.net/listinfo/cerowrt-devel > > > _______________________________________________ > Cerowrt-devel mailing list > Cerowrt-devel@lists.bufferbloat.net > https://lists.bufferbloat.net/listinfo/cerowrt-devel > --=20 Dave T=E4ht http://www.bufferbloat.net/projects/cerowrt/wiki - "3.3.8-17 is out with fq_codel!"