icecc / icecream

Distributed compiler with a central scheduler to share build load
GNU General Public License v2.0
1.58k stars 250 forks source link

Tools for Profiling and Tuning Build Clusters #513

Closed timblaktu closed 4 years ago

timblaktu commented 4 years ago

To make decisions about how to tune an icecc cluster, one needs real information about what happened during a distributed build scenario. We've set up a small icecc build cluster, are having trouble identifying bottlenecks, and are looking for suggestions for how to systematically collect build profiling information to help with the tuning effort. We currently have:

While these do provide useful information for post-analysis and real-time monitoring, I'm looking for tools for measuring all of the details of a build scenario. We can post-process the console output to collect per-compile job information, but I'm also interested in gathering snapshots of the cluster state before, during and after a build scenario. We would use these snapshots as my barometer while tuning the system parameters. Looks like icemon and icecream-sundae don't have the ability to take "one shot" snapshots of the metrics that they're displaying.

I'm coming from distcc, which had a little-known feature that would serve build cluster statistics on a TCP port, by enabling these daemon options:

--stats
Turn on the statistics HTTP server. By default it is off. (Daemon mode only.)
--stats-port PORT
Set the TCP port to listen on for HTTP requests, rather than the default of 3633. (Daemon mode only.)

Is there any designed-in way to collect this info with these (or other) tools? I am now inspecting the source code of icemon and icecream-sundae to learn more about how they collect stats from schedulers and/or iceccd. Thanks.

tekknolagi commented 1 year ago

@timblaktu did you close this because you found equivalent functionality? I am trying to see if I can stand up an icecream web server for monitoring.