[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