From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GjhVv-0006df-JW for qemu-devel@nongnu.org; Mon, 13 Nov 2006 14:30:39 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GjhVq-0006Yq-Pr for qemu-devel@nongnu.org; Mon, 13 Nov 2006 14:30:39 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GjhVq-0006Ym-JA for qemu-devel@nongnu.org; Mon, 13 Nov 2006 14:30:34 -0500 Received: from [66.93.172.17] (helo=nevyn.them.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1GjhVq-0006Mf-G9 for qemu-devel@nongnu.org; Mon, 13 Nov 2006 14:30:34 -0500 Date: Mon, 13 Nov 2006 14:30:27 -0500 From: Daniel Jacobowitz Message-ID: <20061113193027.GA2729@nevyn.them.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Subject: [Qemu-devel] TCP_NODELAY for -redir Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paul Brook , qemu-devel@nongnu.org I was trying to run GDB remote debug tests through a -redir socket today. It crawled unbelievably. Paul guessed that slirp wasn't using TCP_NODELAY, and Nagle was to blame. He was even righter than usual. Adding TCP_NODELAY speeds up this particular workload by (very approximately) 54x. See trivial attached patch. Is this going to bite other things, i.e. does it need to be configurable? -- Daniel Jacobowitz CodeSourcery --- slirp/tcp.h | 2 +- slirp/tcp_subr.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) Index: qemu/slirp/tcp.h =================================================================== --- qemu.orig/slirp/tcp.h 2006-11-13 14:25:24.000000000 -0500 +++ qemu/slirp/tcp.h 2006-11-13 14:25:29.000000000 -0500 @@ -112,7 +112,7 @@ struct tcphdr { /* * User-settable options (used with setsockopt). */ -/* #define TCP_NODELAY 0x01 */ /* don't delay send to coalesce packets */ +#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ /* #define TCP_MAXSEG 0x02 */ /* set maximum segment size */ /* Index: qemu/slirp/tcp_subr.c =================================================================== --- qemu.orig/slirp/tcp_subr.c 2006-11-13 14:22:34.000000000 -0500 +++ qemu/slirp/tcp_subr.c 2006-11-13 14:23:31.000000000 -0500 @@ -499,6 +499,8 @@ tcp_connect(inso) setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&opt,sizeof(int)); opt = 1; setsockopt(s,SOL_SOCKET,SO_OOBINLINE,(char *)&opt,sizeof(int)); + opt = 1; + setsockopt(s,IPPROTO_TCP,TCP_NODELAY,(char *)&opt,sizeof(int)); so->so_fport = addr.sin_port; so->so_faddr = addr.sin_addr;