From patchwork Wed Aug 25 11:42:29 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerrit Renker X-Patchwork-Id: 62673 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 9D3B7B70DC for ; Wed, 25 Aug 2010 21:42:53 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752969Ab0HYLmr (ORCPT ); Wed, 25 Aug 2010 07:42:47 -0400 Received: from dee.erg.abdn.ac.uk ([139.133.204.82]:61547 "EHLO erg.abdn.ac.uk" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752278Ab0HYLmq (ORCPT ); Wed, 25 Aug 2010 07:42:46 -0400 Received: from laptev.erg.abdn.ac.uk (Debian-exim@ra-gerrit.erg.abdn.ac.uk [139.133.204.38]) by erg.abdn.ac.uk (8.13.4/8.13.4) with ESMTP id o7PBgSMq026095 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Wed, 25 Aug 2010 12:42:29 +0100 (BST) Received: from gerrit by laptev.erg.abdn.ac.uk with local (Exim 4.69) (envelope-from ) id 1OoENB-00021Z-1B; Wed, 25 Aug 2010 13:42:29 +0200 Date: Wed, 25 Aug 2010 13:42:29 +0200 From: Gerrit Renker To: Ivo Calado Cc: Leandro , dccp@vger.kernel.org, netdev@vger.kernel.org Subject: Re: dccp test-tree [Patch 1/1] ccid-3: use per-route min-RTO and/or TCP default Message-ID: <20100825114228.GB4570@gerrit.erg.abdn.ac.uk> Mail-Followup-To: Gerrit Renker , Ivo Calado , Leandro , dccp@vger.kernel.org, netdev@vger.kernel.org References: <20100816051936.GD3571@gerrit.erg.abdn.ac.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) X-ERG-MailScanner: Found to be clean X-ERG-MailScanner-From: gerrit@erg.abdn.ac.uk X-Spam-Status: No Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Ivo,- | Acked-by: Ivo Calado for ccid4 subtree | | On Mon, Aug 16, 2010 at 02:19, Gerrit Renker wrote: | > This patch relates to the similar one submitted last week for CCID-2. | > | > It replaces the hardcoded (Kconfig) value of the minimum RTO value with | > a reconfigurable, per-route value which falls back to the TCP minimum | > RTO value. | > | > Leando, Ivo, can you please have a look and indicate whether you are ok | > with this? If yes I would like to also update the CCID-4 tree to make it | > consistent with the test tree - for this reason the test tree has not yet | > been updated. | > | >>>>>>>>>>>>>>>>>>>>>>>> Patch <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | > dccp ccid-3: use per-route RTO or TCP RTO as fallback | > Thank you for the (offline) review, I have revised the patch, uploaded the one for CCID-3 at 182be62cc2899ddf7adb0c7654792f7061373a8a of the test tree. The corresponding (revised) patch for CCID-4 has been integrated into http://eden-feed.erg.abdn.ac.uk/cgi-bin/gitweb.cgi?p=dccp_exp.git;a=commitdiff;h=57ebee26dc7125f5cff75f0153ef3cd2bfd03c1d Please find attached the "inter-diff" of the changes I applied to the CCID-4 subtree. --- a/net/dccp/ccids/Kconfig +++ b/net/dccp/ccids/Kconfig @@ -65,37 +65,6 @@ config IP_DCCP_CCID3_MEASURE_S_AS_MAX ---help--- An experimental method based on tracking the maximum packet size. endchoice - -config IP_DCCP_CCID3_RTO - int "Use higher bound for nofeedback timer" - default 100 - depends on IP_DCCP_CCID3 - ---help--- - Use higher lower bound for nofeedback timer expiration. - - The TFRC nofeedback timer normally expires after the maximum of 4 - RTTs and twice the current send interval (RFC 5348, 4.3). On LANs - with a small RTT this can mean a high processing load and reduced - performance, since then the nofeedback timer is triggered very - frequently. - - This option enables to set a higher lower bound for the nofeedback - value. Values in units of milliseconds can be set here. - - A value of 0 disables this feature by enforcing the value specified - in RFC 5348. The following values have been suggested as bounds for - experimental use: - * 16-20ms to match the typical multimedia inter-frame interval - * 100ms as a reasonable compromise [default] - * 1000ms corresponds to the lower TCP RTO bound (RFC 2988, 2.4) - - The default of 100ms is a compromise between a large value for - efficient DCCP implementations, and a small value to avoid disrupting - the network in times of congestion. - - The purpose of the nofeedback timer is to slow DCCP down when there - is serious network congestion: experimenting with larger values should - therefore not be performed on WANs. endif # IP_DCCP_CCID3 config IP_DCCP_CCID4 @@ -114,8 +83,7 @@ config IP_DCCP_CCID4 sending rate, possibly with Explicit Congestion Notification (ECN), while minimizing abrupt rate changes. - CCID-4 is based an (expired) Internet-Draft which can be found at: - http://tools.ietf.org/html/draft-ietf-dccp-ccid4 + CCID-4 is specified in RFC 5622. If in doubt, say N. @@ -150,13 +118,6 @@ config IP_DCCP_CCID4_MEASURE_S_AS_MAX ---help--- An experimental method based on tracking the maximum packet size. endchoice - -config IP_DCCP_CCID4_RTO - int "Use higher bound for nofeedback timer" - default 100 - ---help--- - This item does for CCID-3 as DCCP_CCID3_RTO does for CCID-3, please - see the help text there. endif # IP_DCCP_CCID4 config IP_DCCP_TFRC_LIB --- a/net/dccp/ccids/ccid4.c +++ b/net/dccp/ccids/ccid4.c @@ -445,12 +445,12 @@ done_computing_x: /* * Update timeout interval for the nofeedback timer. - * We use a configuration option to increase the lower bound. - * This can help avoid triggering the nofeedback timer too - * often ('spinning') on LANs with small RTTs. + * We use the current (per-route) value of the TCP RTO as lower bound + * to slow down rate-halving on networks with small RTTs (loopback, + * running DCCP in a virtual machine, Gbit ethernet, etc). */ - hc->tx_t_rto = max_t(u32, 4 * hc->tx_rtt, (CONFIG_IP_DCCP_CCID4_RTO * - (USEC_PER_SEC / 1000))); + hc->tx_t_rto = max_t(u32, 4 * hc->tx_rtt, + USEC_PER_SEC/HZ * tcp_rto_min(sk)); /* * Schedule no feedback timer to expire in * max(t_RTO, 2 * s/X) = max(t_RTO, 2 * t_ipi)