summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <bgamari.foss@gmail.com>2016-01-22 16:22:13 +0100
committerBen Gamari <ben@smart-cactus.org>2016-01-22 18:50:27 +0100
commitb01288d509b0f9e45f23ae48f2366f85f489089c (patch)
treeebadcb0038b79d135929e3e3e6f6fa4406b99b6f
parent4d51bfc8975f9c6c3ab6d293c48f98da85210d5f (diff)
downloadhaskell-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
-rw-r--r--rts/Timer.c11
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 {