[Git][ghc/ghc][wip/gc/nonmoving-nonconcurrent] 9 commits: rts: Fix macro parenthesisation
Ben Gamari
gitlab at gitlab.haskell.org
Fri May 17 18:04:20 UTC 2019
Ben Gamari pushed to branch wip/gc/nonmoving-nonconcurrent at Glasgow Haskell Compiler / GHC
Commits:
48504bf5 by Ben Gamari at 2019-05-16T01:46:28Z
rts: Fix macro parenthesisation
- - - - -
a2b74bc7 by Ben Gamari at 2019-05-16T16:31:34Z
Merge branch 'wip/gc/misc-rts' into wip/gc/preparation
- - - - -
a53d4411 by Ömer Sinan Ağacan at 2019-05-16T16:37:44Z
rts/StableName: Expose FOR_EACH_STABLE_NAME, freeSnEntry, SNT_size
These will be needed when we implement sweeping in the nonmoving
collector.
- - - - -
0444df2a by Ben Gamari at 2019-05-16T20:39:49Z
rts: Disable aggregate-return warnings from gcc
This warning is a bit of a relic; there is little reason to avoid
aggregate return values in 2019.
- - - - -
fb0e64f9 by Ömer Sinan Ağacan at 2019-05-16T20:40:20Z
rts/Scav: Expose scavenging functions
To keep the non-moving collector nicely separated from the moving
collector its scavenging phase will live in another file,
`NonMovingScav.c`. However, it will need to use these functions so
let's expose them.
- - - - -
bf21f978 by Ben Gamari at 2019-05-17T00:42:44Z
rts: Introduce flag to enable the nonmoving old generation
This flag will enable the use of a non-moving oldest generation.
- - - - -
fb1513a7 by Ben Gamari at 2019-05-17T00:42:44Z
rts: Introduce debug flag for non-moving GC
- - - - -
242f9ff8 by Ömer Sinan Ağacan at 2019-05-17T17:00:12Z
rts: Non-concurrent mark and sweep
This implements the core heap structure and a serial mark/sweep
collector which can be used to manage the oldest-generation heap.
This is the first step towards a concurrent mark-and-sweep collector
aimed at low-latency applications.
The full design of the collector implemented here is described in detail
in a technical note
B. Gamari. "A Concurrent Garbage Collector For the Glasgow Haskell
Compiler" (2018)
The basic heap structure used in this design is heavily inspired by
K. Ueno & A. Ohori. "A fully concurrent garbage collector for
functional programs on multicore processors." /ACM SIGPLAN Notices/
Vol. 51. No. 9 (presented by ICFP 2016)
This design is intended to allow both marking and sweeping
concurrent to execution of a multi-core mutator. Unlike the Ueno design,
which requires no global synchronization pauses, the collector
introduced here requires a stop-the-world pause at the beginning and end
of the mark phase.
To avoid heap fragmentation, the allocator consists of a number of
fixed-size /sub-allocators/. Each of these sub-allocators allocators into
its own set of /segments/, themselves allocated from the block
allocator. Each segment is broken into a set of fixed-size allocation
blocks (which back allocations) in addition to a bitmap (used to track
the liveness of blocks) and some additional metadata (used also used
to track liveness).
This heap structure enables collection via mark-and-sweep, which can be
performed concurrently via a snapshot-at-the-beginning scheme (although
concurrent collection is not implemented in this patch).
The mark queue is a fairly straightforward chunked-array structure.
The representation is a bit more verbose than a typical mark queue to
accomodate a combination of two features:
* a mark FIFO, which improves the locality of marking, reducing one of
the major overheads seen in mark/sweep allocators (see [1] for
details)
* the selector optimization and indirection shortcutting, which
requires that we track where we found each reference to an object
in case we need to update the reference at a later point (e.g. when
we find that it is an indirection). See Note [Origin references in
the nonmoving collector] (in `NonMovingMark.h`) for details.
Beyond this the mark/sweep is fairly run-of-the-mill.
[1] R. Garner, S.M. Blackburn, D. Frampton. "Effective Prefetch for
Mark-Sweep Garbage Collection." ISMM 2007.
Co-Authored-By: Ben Gamari <ben at well-typed.com>
- - - - -
24c946a5 by Ben Gamari at 2019-05-17T17:00:12Z
testsuite: Add nonmoving WAY
This simply runs the compile_and_run tests with `-xn`, enabling the
nonmoving oldest generation.
- - - - -
28 changed files:
- docs/users_guide/runtime_control.rst
- includes/rts/Flags.h
- includes/rts/storage/Block.h
- includes/rts/storage/InfoTables.h
- libraries/base/GHC/RTS/Flags.hsc
- rts/Capability.c
- rts/Capability.h
- rts/RtsFlags.c
- rts/RtsStartup.c
- rts/StableName.c
- rts/StableName.h
- rts/Trace.h
- rts/Weak.c
- rts/ghc.mk
- rts/sm/Evac.c
- rts/sm/GC.c
- rts/sm/GC.h
- rts/sm/GCAux.c
- rts/sm/GCThread.h
- + rts/sm/NonMoving.c
- + rts/sm/NonMoving.h
- + rts/sm/NonMovingMark.c
- + rts/sm/NonMovingMark.h
- + rts/sm/NonMovingScav.c
- + rts/sm/NonMovingScav.h
- + rts/sm/NonMovingSweep.c
- + rts/sm/NonMovingSweep.h
- rts/sm/Sanity.c
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/68e5616f404b14a0e02b7d719bf1d50865dba44b...24c946a53b690984c45e6522d90603844ae8730b
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/68e5616f404b14a0e02b7d719bf1d50865dba44b...24c946a53b690984c45e6522d90603844ae8730b
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/20190517/4c4632b6/attachment.html>
More information about the ghc-commits
mailing list