From owner-cvs-src-old@FreeBSD.ORG Fri Jan 21 05:20:11 2011 Return-Path: Delivered-To: cvs-src-old@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6E9E3106564A for ; Fri, 21 Jan 2011 05:20:11 +0000 (UTC) (envelope-from lstewart@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 5C9E88FC13 for ; Fri, 21 Jan 2011 05:20:11 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.4/8.14.4) with ESMTP id p0L5KBDu002512 for ; Fri, 21 Jan 2011 05:20:11 GMT (envelope-from lstewart@repoman.freebsd.org) Received: (from svn2cvs@localhost) by repoman.freebsd.org (8.14.4/8.14.4/Submit) id p0L5KBAa002511 for cvs-src-old@freebsd.org; Fri, 21 Jan 2011 05:20:11 GMT (envelope-from lstewart@repoman.freebsd.org) Message-Id: <201101210520.p0L5KBAa002511@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: svn2cvs set sender to lstewart@repoman.freebsd.org using -f From: Lawrence Stewart Date: Fri, 21 Jan 2011 05:19:47 +0000 (UTC) To: cvs-src-old@freebsd.org X-FreeBSD-CVS-Branch: HEAD Subject: cvs commit: src/sys/netinet/cc cc_cubic.c X-BeenThere: cvs-src-old@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: **OBSOLETE** CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Jan 2011 05:20:11 -0000 lstewart 2011-01-21 05:19:47 UTC FreeBSD src repository Modified files: sys/netinet/cc cc_cubic.c Log: SVN rev 217683 on 2011-01-21 05:19:47Z by lstewart Some correctness and robustness fixes related to CUBIC's mean RTT estimate: - The mean RTT is updated at the end of each congestion epoch, but if we switch to congestion avoidance within the first epoch (e.g. if ssthresh was primed from the hostcache), we'll trigger a divide by zero panic in cubic_ack_received(). Set the mean to the min in cubic_record_rtt() if the mean is less than the min to ensure we have a sane mean for use in this situation. This fixes the panic reported by Nick Hibma. - Adjust conditions under which we update the mean RTT in cubic_post_recovery() to ensure a low latency path won't yield an RTT of less than 1. This avoids another potential divide by zero panic when running CUBIC in networks with sub-millisecond latencies. - Remove the "safety" assignment of min into mean when we don't update the mean because of failed conditions. The above change to the conditions for updating the mean ensures the safety issue is addressed and I feel it is better to keep our previous mean estimate around if we can't update than to revert to the min. - Initialise the mean RTT to 1 on connection startup to act as a safety belt if a situation we haven't considered and addressed with the above changes were to crop up in the wild. Sponsored by: FreeBSD Foundation Reported and tested by: Nick Hibma Discussed with: David Hayes MFC after: 5 weeks X-MFC with: r216114 Revision Changes Path 1.2 +17 -6 src/sys/netinet/cc/cc_cubic.c