summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2022-06-07 11:28:04 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2022-06-09 19:07:01 -0400
commit69e72ecda720d10308516366044952ddd6290e7e (patch)
treea349edc6aadb872a34f44aa2f98ddb202d9bc01e
parent46d2fc65fd1eaf3284dc01a2fcebcef2cce4bee3 (diff)
downloadhaskell-69e72ecda720d10308516366044952ddd6290e7e.tar.gz
getProcessCPUTime: Fix the getrusage fallback to account for system CPU time
clock_gettime reports the combined total or user AND system time so in order to replicate it with getrusage we need to add both system and user time together. See https://stackoverflow.com/questions/7622371/getrusage-vs-clock-gettime Some sample measurements when building Cabal with this patch t1: rusage t2: clock_gettime t1: 62347518000; t2: 62347520873 t1: 62395687000; t2: 62395690171 t1: 62432435000; t2: 62432437313 t1: 62478489000; t2: 62478492465 t1: 62514990000; t2: 62514992534 t1: 62515479000; t2: 62515480327 t1: 62515485000; t2: 62515486344 Fixes #21656
-rw-r--r--rts/posix/GetTime.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/rts/posix/GetTime.c b/rts/posix/GetTime.c
index b2e522facc..7588236ce5 100644
--- a/rts/posix/GetTime.c
+++ b/rts/posix/GetTime.c
@@ -138,7 +138,8 @@ Time getProcessCPUTime(void)
{
struct rusage t;
getrusage(RUSAGE_SELF, &t);
- return SecondsToTime(t.ru_utime.tv_sec) + USToTime(t.ru_utime.tv_usec);
+ return SecondsToTime(t.ru_utime.tv_sec + t.ru_stime.tv_sec)
+ + USToTime(t.ru_utime.tv_usec + t.ru_stime.tv_usec);
}
}