[commit: ghc] master: Detect overly long GC sync (2f46387)
git at git.haskell.org
git at git.haskell.org
Thu Nov 16 13:49:25 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/2f4638735ad1526d6502a4706bffafffb93e24da/ghc
>---------------------------------------------------------------
commit 2f4638735ad1526d6502a4706bffafffb93e24da
Author: Simon Marlow <marlowsd at gmail.com>
Date: Wed Feb 11 14:19:21 2015 +0000
Detect overly long GC sync
Summary:
GC sync is the time between a GC being intiated and all the mutator
threads finally stopping so that the GC can start. Problems that cause
the GC sync to be delayed are hard to find and can cause dramatic
slowdowns for heavily parallel programs.
The new flag --long-gc-sync=<time> helps by emitting a warning and
calling a user-overridable hook when the GC sync time exceeds the
specified threshold. A debugger can be used to set a breakpoint when
this happens and inspect the stacks of threads to find the culprit.
Test Plan:
```
$ ./inplace/bin/ghc-stage2 +RTS --long-gc-sync=0.0000001 -S
Alloc Copied Live GC GC TOT TOT Page Flts
bytes bytes bytes user elap user elap
1135856 51144 153736 0.000 0.000 0.002 0.002 0 0 (Gen: 0)
1034760 94704 188752 0.000 0.000 0.002 0.002 0 0 (Gen: 0)
1038888 134832 228888 0.009 0.009 0.011 0.011 0 0 (Gen: 1)
1025288 90128 235184 0.000 0.000 0.012 0.012 0 0 (Gen: 0)
1049088 130080 333984 0.000 0.000 0.013 0.013 0 0 (Gen: 0)
Warning: waited 0us for GC sync
1034424 73360 331976 0.000 0.000 0.013 0.013 0 0 (Gen: 0)
```
Also tested on a real production problem.
Reviewers: niteria, bgamari, erikd
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D4193
>---------------------------------------------------------------
2f4638735ad1526d6502a4706bffafffb93e24da
docs/users_guide/runtime_control.rst | 38 +++++++++++++++++++++++++++++++++
includes/RtsAPI.h | 4 ++++
includes/rts/Flags.h | 2 ++
rts/RtsFlags.c | 15 ++++++++++++-
rts/hooks/Hooks.h | 2 ++
rts/hooks/LongGCSync.c | 41 ++++++++++++++++++++++++++++++++++++
rts/sm/GC.c | 22 ++++++++++++++-----
rts/sm/GCThread.h | 6 ++++++
8 files changed, 124 insertions(+), 6 deletions(-)
Diff suppressed because of size. To see it, use:
git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc 2f4638735ad1526d6502a4706bffafffb93e24da
More information about the ghc-commits
mailing list