1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-29 05:31:00 +01:00

Get CPU stats from the cgroup

This commit is contained in:
Eelco Dolstra 2022-11-18 13:40:59 +01:00
parent 20f66c6889
commit fa68eb367e
6 changed files with 71 additions and 11 deletions

View file

@ -869,6 +869,14 @@ void DerivationGoal::buildDone()
cleanupPostChildKill();
if (buildResult.cpuUser && buildResult.cpuSystem) {
debug("builder for '%s' terminated with status %d, user CPU %.3fs, system CPU %.3fs",
worker.store.printStorePath(drvPath),
status,
((double) buildResult.cpuUser->count()) / 1000000,
((double) buildResult.cpuSystem->count()) / 1000000);
}
bool diskFull = false;
try {

View file

@ -137,7 +137,7 @@ void LocalDerivationGoal::killChild()
also send a conventional kill to the child. */
::kill(-pid, SIGKILL); /* ignore the result */
killSandbox();
killSandbox(true);
pid.wait();
}
@ -146,10 +146,14 @@ void LocalDerivationGoal::killChild()
}
void LocalDerivationGoal::killSandbox()
void LocalDerivationGoal::killSandbox(bool getStats)
{
if (cgroup) {
destroyCgroup(*cgroup);
auto stats = destroyCgroup(*cgroup);
if (getStats) {
buildResult.cpuUser = stats.cpuUser;
buildResult.cpuSystem = stats.cpuSystem;
}
}
else if (buildUser) {
@ -270,7 +274,7 @@ void LocalDerivationGoal::cleanupPostChildKill()
malicious user from leaving behind a process that keeps files
open and modifies them after they have been chown'ed to
root. */
killSandbox();
killSandbox(true);
/* Terminate the recursive Nix daemon. */
stopDaemon();
@ -410,7 +414,7 @@ void LocalDerivationGoal::startBuilder()
/* Make sure that no other processes are executing under the
sandbox uids. This must be done before any chownToBuilder()
calls. */
killSandbox();
killSandbox(false);
/* Right platform? */
if (!parsedDrv->canBuildLocally(worker.store))

View file

@ -202,7 +202,7 @@ struct LocalDerivationGoal : public DerivationGoal
/* Kill any processes running under the build user UID or in the
cgroup of the build. */
void killSandbox();
void killSandbox(bool getStats);
/* Create alternative path calculated from but distinct from the
input, so we can avoid overwriting outputs (or other store paths)