<font face="arial" size="2"><p style="margin:0;padding:0;">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.</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">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 making the contended queue maximized in capacity.  The goal is that it should drain 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.</p>
<p style="margin:0;padding:0;"> </p>
<p style="margin:0;padding:0;">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.</p>
<p style="margin:0;padding:0;">-----Original Message-----<br />From: "Dave Täht" <dave.taht@bufferbloat.net><br />Sent: Thursday, August 23, 2012 9:58am<br />To: cerowrt-devel@lists.bufferbloat.net<br />Subject: [Cerowrt-devel] [PATCH 2/2] codel: reduce count after exiting dropping state after one maxpacket<br /><br /></p>
<div id="SafeStyles1345749003">
<p style="margin:0;padding:0;">From: Dave Taht <dave.taht@bufferbloat.net><br /><br />At a knife's edge, where we are rapidly entering and existing<br />a dropping state, seek lower to find the optimimum.<br />---<br /> include/net/codel.h |    3 +++<br /> 1 file changed, 3 insertions(+)<br /><br />diff --git a/include/net/codel.h b/include/net/codel.h<br />index dbfccb7..5e85632 100644<br />--- a/include/net/codel.h<br />+++ b/include/net/codel.h<br />@@ -342,6 +342,9 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch,<br /> vars->drop_next = codel_control_law(vars->drop_next,<br /> params->interval,<br /> vars->rec_inv_sqrt);<br />+             } else { /* we dropped out of the dropping state in 1 pkt */<br />+                       vars->count = vars->count > 1 ? vars->count - 1 : 1;        <br />+                   codel_Newton_step(vars);<br /> }<br /> }<br /> end:<br />-- <br />1.7.9.5<br /><br />_______________________________________________<br />Cerowrt-devel mailing list<br />Cerowrt-devel@lists.bufferbloat.net<br />https://lists.bufferbloat.net/listinfo/cerowrt-devel</p>
</div></font>