From owner-cvs-src-old@FreeBSD.ORG Mon Jun 22 23:08:24 2009 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 E6D6B10657B1 for ; Mon, 22 Jun 2009 23:08:24 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id CF5148FC16 for ; Mon, 22 Jun 2009 23:08:24 +0000 (UTC) (envelope-from andre@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5MN8OBh085518 for ; Mon, 22 Jun 2009 23:08:24 GMT (envelope-from andre@repoman.freebsd.org) Received: (from svn2cvs@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5MN8OpU085517 for cvs-src-old@freebsd.org; Mon, 22 Jun 2009 23:08:24 GMT (envelope-from andre@repoman.freebsd.org) Message-Id: <200906222308.n5MN8OpU085517@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: svn2cvs set sender to andre@repoman.freebsd.org using -f From: Andre Oppermann Date: Mon, 22 Jun 2009 23:08:05 +0000 (UTC) To: cvs-src-old@freebsd.org X-FreeBSD-CVS-Branch: HEAD Subject: cvs commit: src/sys/kern uipc_socket.c src/sys/netinet tcp_usrreq.c src/sys/sys socketvar.h 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: Mon, 22 Jun 2009 23:08:26 -0000 andre 2009-06-22 23:08:05 UTC FreeBSD src repository Modified files: sys/kern uipc_socket.c sys/netinet tcp_usrreq.c sys/sys socketvar.h Log: SVN rev 194672 on 2009-06-22 23:08:05Z by andre Add soreceive_stream(), an optimized version of soreceive() for stream (TCP) sockets. It is functionally identical to generic soreceive() but has a number stream specific optimizations: o does only one sockbuf unlock/lock per receive independent of the length of data to be moved into the uio compared to soreceive() which unlocks/locks per *mbuf*. o uses m_mbuftouio() instead of its own copy(out) variant. o much more compact code flow as a large number of special cases is removed. o much improved reability. It offers significantly reduced CPU usage and lock contention when receiving fast TCP streams. Additional gains are obtained when the receiving application is using SO_RCVLOWAT to batch up some data before a read (and wakeup) is done. This function was written by "reverse engineering" and is not just a stripped down variant of soreceive(). It is not yet enabled by default on TCP sockets. Instead it is commented out in the protocol initialization in tcp_usrreq.c until more widespread testing has been done. Testers, especially with 10GigE gear, are welcome. MFP4: r164817 //depot/user/andre/soreceive_stream/ Revision Changes Path 1.336 +196 -0 src/sys/kern/uipc_socket.c 1.189 +6 -0 src/sys/netinet/tcp_usrreq.c 1.170 +3 -0 src/sys/sys/socketvar.h