Subject: Re: NetBSD-3 NIS-compat getpwnam()/getpwuid iterate entire map [was Re: 3.0 YP lookup latency]
To: None <jonathan@dsg.stanford.edu>
From: Christos Zoulas <christos@zoulas.com>
List: tech-net
Date: 06/21/2006 22:06:58
On Jun 21,  3:36pm, jonathan@dsg.stanford.edu (jonathan@dsg.stanford.edu) wrote:
-- Subject: Re: NetBSD-3 NIS-compat getpwnam()/getpwuid iterate entire map [w

| In message <20060621201934.288DA56539@rebar.astron.com>Christos Zoulas writes
| 
| >| Oh... and I noticed a bug in clnt_generic(): for RPC-over-TCP, we
| >| disable RFC-896 (Nagle) processing for TCP over IPv4, but not for TCP
| >| over IPv6[1].  Makes a grown man cry.
| >
| >And something like this?
| 
| [...]
| 
| Thanks to Charles for observing that the strncmp() below acutally
| matches both "inet" and "inet6", so the bug I feared doesn't
| exist. Thus no pullups are needed.
| 
| I am still very peturbed by the XXX comment. If someone like fvdl
| doesn't grok why the setsockopt() is needed, we need a better
| explanation. And I'm worried by both the dependency on the strncmp()
| matching both "inet" and "inet6", when what's really meant is
| 	"are we running over TCP"?
| 
| So about something like this:
| 
| 
| Index: src/lib/libc/rpc/clnt_generic.c
| ===================================================================
| RCS file: /cvsroot/src/lib/libc/rpc/clnt_generic.c,v
| retrieving revision 1.25
| diff -u -r1.25 clnt_generic.c
| --- src/lib/libc/rpc/clnt_generic.c	2 Dec 2005 12:19:16 -0000	1.25
| +++ src/lib/libc/rpc/clnt_generic.c	21 Jun 2006 22:14:03 -0000
| @@ -333,8 +333,17 @@
|  		cl = clnt_vc_create(fd, svcaddr, prog, vers, sendsz, recvsz);
|  		if (!nconf || !cl)
|  			break;
| -		/* XXX fvdl - is this useful? */
| -		if (strncmp(nconf->nc_protofmly, "inet", (size_t)4) == 0)
| +		/*
| +		 * For TCP transport, Host Requirements RFCs mandate
| +		 * Nagle (RFC-896) processing.  But for RPC, Nagle
| +		 * processing adds adds unwanted latency to the last,
| +		 * partial TCP segment of each RPC message. See:
| +		 *   R. W. Scheifler and J. Gettys, The X Window System,
| +		 *   ACM Transactions on Graphics 16:8 (Aug. 1983), pp. 57-69. 
| +		 * So for TCP transport, disable Nagle via TCP_NODELAY.
| +		 * XXX: moral equivalent for non-TCP protocols?
| +		 */
| +		if (strcmp(nconf->nc_proto, "tcp", (size_t)3) == 0)
|  			setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &one,
|  			    (socklen_t)sizeof (one));
|  		break;
| 

And in svc_vc.c...

christos