On Mon, Nov 13, 2006 at 02:30:27PM -0500, Daniel Jacobowitz wrote:
> 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.

Ping.  I still think this patch is a good idea for the reasons
previously explained.

> 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;
> 
> 

-- 
Daniel Jacobowitz
CodeSourcery


_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel

Reply via email to