diff options
author | Ben Gamari <bgamari.foss@gmail.com> | 2016-01-22 16:22:13 +0100 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2016-01-22 18:50:27 +0100 |
commit | b01288d509b0f9e45f23ae48f2366f85f489089c (patch) | |
tree | ebadcb0038b79d135929e3e3e6f6fa4406b99b6f /rts/Timer.c | |
parent | 4d51bfc8975f9c6c3ab6d293c48f98da85210d5f (diff) | |
download | haskell-b01288d509b0f9e45f23ae48f2366f85f489089c.tar.gz |
rts: Disable tick timer unless really needed
Trac #9105 notes significant CPU usage by an otherwise idle process when
compiled with profiling. The reason for this is that we keep the tick
timer active in the profiling RTS even if profiling wasn't requested at
runtime.
If the user requests any sort of profiling then we need to keep the
timer active to ensure that samples are collected.
Test Plan: Validate, check CPU usage, ensure profiling still works
Reviewers: simonmar, austin
Reviewed By: simonmar, austin
Subscribers: thomie
Differential Revision: https://phabricator.haskell.org/D1822
GHC Trac Issues: #9105
Diffstat (limited to 'rts/Timer.c')
-rw-r--r-- | rts/Timer.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/rts/Timer.c b/rts/Timer.c index 99c09b03a3..bf7240b96a 100644 --- a/rts/Timer.c +++ b/rts/Timer.c @@ -72,10 +72,15 @@ handle_tick(int unused STG_UNUSED) #endif } else { recent_activity = ACTIVITY_DONE_GC; - // disable timer signals (see #1623, #5991) - // but only if we're not profiling + // disable timer signals (see #1623, #5991, #9105) + // but only if we're not profiling (e.g. passed -h or -p RTS + // flags). If we are profiling we need to keep the timer active + // so that samples continue to be collected. #ifndef PROFILING - stopTimer(); + if (!(RtsFlags.ProfFlags.doHeapProfile + || RtsFlags.CcFlags.doCostCentres)) { + stopTimer(); + } #endif } } else { |