I am planning to start working on adding load management enhancements to distcc for use at our company, but wanted to make sure that no one was almost done fixing the problem and also make sure that I didn't spend a bunch of time making my changes and have them rejected.

A brief summary of my proposal:

1) have distccd listen on a UDP port for "status requests"
a) when distccd gets a request on this port, send back status info to the requester
1) number of active compilation requests
2) "server weight"
3) maximum connections
4) other status information TBD
b) forking client
1) just look at dcc_nkids variable
c) preforking client
1) have each child lock/unlock a file when it starts/finishes compilation
2) distccd tries to lock each file; number of locked files = number of active connections
3) on startup, distcc determines appropriate server to send request to
a) poll all servers in host list - wait until all respond or 0.1 seconds, whichever comes first
b) multiply connection count by weight, take minimum result, send request to that server


"least connection" loadbalancing actually does a very good job of spreading the load around - faster machines process connections faster and so end up getting more of the work. Weighting is more or less optional, but can be used if you want some machines in the cluster to be dedicated compilation boxes and others are also used for other things.

Thoughts? I'll probably get to this next week or maybe later this week.

-jake

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

Reply via email to