For the particular case of talking to distccd, we could arrange for distccd to keep listening on the socket after a job is complete, which avoids the need to run fshd. We just need something on the client to hold open the fd and pass it to distcc client processes as they need it. Perhaps this would be a good place for a client daemon using a unix socket, though I'm pretty sure it should be per-user.
Hey, I know where to put the local daemon: inside the make process. That solves the issue of how to tell distcc where to connect (just put the address in an environment variable, or heck, open up an fd before forking).
The next step, of course, is to turn distcc into a library, and build it into make as well, to get rid of one fork+exec. And then you might want to turn the gcc front end into a library, to get rid of one more fork+exec, and merge argument processing with distcc's, perhaps. And then you might want to turn the c preprocessor into a library, to get rid of one more fork+exec.
Maybe Per Bothner's compile server (http://per.bothner.com/papers/GccSummit03/gcc-server.pdf) went about things the wrong way; it assumed the world consisted of a single workstation. If the world is really that one workstation plus a bunch of idle workstations waiting to run compile jobs for you, maybe an easier place to start is by sucking the toolchain into 'make' bit by bit...
I'd like to go for a world record time compiling e.g. the linux kernel, so I'm a bit more worried about silly little performance issues than is reasonable or healthy :-)
http://lwn.net/2002/0321/a/7.5-second-compile.php3
Hard to beat. :-) But it might be fun to try.
Nooo, I doubt we'll ever beat that in absolute time, but we can probably trounce it in compiles-per-second-per-dollar.
On the other hand, my dual 650 MHz workstation at home takes 86 seconds just to do time find linux-2.6.5 -type f | xargs cat > /dev/null so I suppose I'll have to find me a faster box if I actually want any speed out of all this :-)
OK, I'll go take my medication now. - Dan
--
My technical stuff: http://kegel.com
My politics: see http://www.misleader.org for examples of why I'm for regime change
__ distcc mailing list http://distcc.samba.org/
To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/distcc