[Git][ghc/ghc][wip/gc/docs] 15 commits: rts: Add GetMyThreadCPUTime helper

Ben Gamari gitlab at gitlab.haskell.org
Tue May 21 13:50:48 UTC 2019



Ben Gamari pushed to branch wip/gc/docs at Glasgow Haskell Compiler / GHC


Commits:
698533af by Ben Gamari at 2019-05-17T19:40:26Z
rts: Add GetMyThreadCPUTime helper

- - - - -
3b34cfb1 by Ben Gamari at 2019-05-17T19:43:00Z
rts/Stats: Track time usage of nonmoving collector

- - - - -
d6b14a1f by Ben Gamari at 2019-05-19T18:13:02Z
rts: Add prefetch macros

- - - - -
c9e5e5e0 by Ben Gamari at 2019-05-19T18:19:37Z
NonMoving: Prefetch when clearing bitmaps

Ensure that the bitmap of the segmentt that we will clear next is in
cache by the time we reach it.

- - - - -
b78483f0 by Ben Gamari at 2019-05-19T18:22:44Z
NonMoving: Inline nonmovingClearAllBitmaps

- - - - -
93178281 by Ben Gamari at 2019-05-19T18:24:25Z
NonMoving: Fuse sweep preparation into mark prep

- - - - -
f6704ef0 by Ben Gamari at 2019-05-19T18:27:16Z
NonMoving: Pre-fetch during mark

This improved overall runtime on nofib's constraints test by nearly 10%.

- - - - -
67c6a5c8 by Ben Gamari at 2019-05-19T18:49:57Z
NonMoving: Prefetch segment header

- - - - -
cddfb6ab by Ben Gamari at 2019-05-19T18:50:01Z
NonMoving: Optimise allocator cache behavior

Previously we would look at the segment header to determine the block
size despite the fact that we already had the block size at hand.

- - - - -
9bc0f119 by Ben Gamari at 2019-05-19T18:50:02Z
NonMovingMark: Eliminate redundant check_in_nonmoving_heaps

- - - - -
57a995c4 by Ben Gamari at 2019-05-19T18:50:02Z
NonMoving: Don't do major GC if one is already running

Previously we would perform a preparatory moving collection, resulting
in many things being added to the mark queue. When we finished with this
we would realize in nonmovingCollect that there was already a collection
running, in which case we would simply not run the nonmoving collector.

However, it was very easy to end up in a "treadmilling" situation: all
subsequent GC following the first failed major GC would be scheduled as
major GCs. Consequently we would continuously feed the concurrent
collector with more mark queue entries and it would never finish.

This patch aborts the major collection far earlier, meaning that we
avoid adding nonmoving objects to the mark queue and allowing the
concurrent collector to finish.

- - - - -
0dc9f62d by Ben Gamari at 2019-05-19T18:50:02Z
Nonmoving: Ensure write barrier vanishes in non-threaded RTS

- - - - -
e2921c35 by Ben Gamari at 2019-05-19T18:50:29Z
Merge branches 'wip/gc/optimize' and 'wip/gc/test' into wip/gc/everything

- - - - -
43a7fc72 by Ben Gamari at 2019-05-19T18:53:40Z
NonMoving: Add summarizing Note

- - - - -
916a7de2 by Ben Gamari at 2019-05-19T18:53:40Z
NonMoving: More comments

- - - - -


30 changed files:

- includes/Cmm.h
- includes/Rts.h
- includes/RtsAPI.h
- includes/rts/EventLogFormat.h
- includes/rts/Flags.h
- includes/rts/NonMoving.h
- includes/rts/storage/TSO.h
- libraries/base/GHC/RTS/Flags.hsc
- libraries/base/GHC/Stats.hsc
- libraries/base/tests/all.T
- libraries/ghc-heap/tests/all.T
- nofib
- rts/GetTime.h
- rts/Messages.c
- rts/PrimOps.cmm
- rts/RtsFlags.c
- rts/STM.c
- rts/Schedule.c
- rts/Stats.c
- rts/Stats.h
- rts/ThreadPaused.c
- rts/Threads.c
- rts/Trace.c
- rts/Trace.h
- rts/Updates.h
- rts/eventlog/EventLog.c
- rts/eventlog/EventLog.h
- rts/posix/GetTime.c
- rts/sm/GC.c
- rts/sm/GCThread.h


The diff was not included because it is too large.


View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/11a4cad7b9308d604bc07ee35b2151b57db8e561...916a7de2156e40eb9c19016e9e5c58d766525b0e

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/11a4cad7b9308d604bc07ee35b2151b57db8e561...916a7de2156e40eb9c19016e9e5c58d766525b0e
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20190521/209d6c7d/attachment.html>


More information about the ghc-commits mailing list