Victor Norman wrote:
o Goals for the system:
  o to pick best servers available, whether 1 engineer is compiling or 20 are.
>   o to degrade gracefully under heavy loads.
>   o fairness when heavily loaded.
>   o to work with compiles dispatched from multiple
> machines simultaneously (i.e., multiple "clients").

How 'bout as a first cut, just picking a random server?
That should meet the above requirements a little better than the current scheme,
especially when the server farm is uniform, and it's cheap.
I've implemented it; the patch is at

http://kegel.com/crosstool/crosstool-0.28-rc34/patches/distcc-2.16/randomhost.patch

  o to work with our heterogeneous network of servers
-- some very fast, some
    multiprocessor, some very slow, some conditionally
available.

Ixnay on the slow servers. Best way to run a distcc cluster in my experience is to never use slow machines as servers.

As for hetrogenous servers, I've run clusters that contain linux, MacOSX, and Cygwin
boxes.   I did patch distccd a bit, but only because I wanted the
compilers for all three build systems to be visible from all systems,
so I needed distccd to ignore the first couple components of the compiler path.
This is up and running, and is part of the devel version of http://kegel.com/crosstool

o an "availability server daemon" will run on a
single machine and will
write to the hosts file, adding machines that
become available, and removing machines that are not
available anymore. And it will write the
load-averages into the new hosts config file. It
gets this informationi by periodically receiving
messages from each machine that is configured to
participate in the compilation system. o All machines in the compilation farm will run a
small client daemon to
communicate with this server daemon, so that the
machine's load-average and availability status is updated periodically. A machine's
availability may be determined by its
load-average, or when its
screensaver is running or not, etc.
o we have a prototype for this already -- it is
basic socket programming,
mostly.

IMHO that's overkill. However, go ahead and post your code, it might be interesting. I keep trying to figure out a way to do something like that with it being useful. Maybe you succeeded.

- Dan
__ distcc mailing list http://distcc.samba.org/
To unsubscribe or change options: http://lists.samba.org/mailman/listinfo/distcc

Reply via email to