[Git][ghc/ghc][wip/gc/nonmoving-nonconcurrent] 17 commits: rts/GC: Add an obvious assertion during block initialization
Ben Gamari
gitlab at gitlab.haskell.org
Wed Jun 19 18:28:03 UTC 2019
Ben Gamari pushed to branch wip/gc/nonmoving-nonconcurrent at Glasgow Haskell Compiler / GHC
Commits:
673a0e41 by Ömer Sinan Ağacan at 2019-06-19T18:17:47Z
rts/GC: Add an obvious assertion during block initialization
Namely ensure that block descriptors are initialized with valid
generation numbers.
Co-Authored-By: Ben Gamari <ben at well-typed.com>
- - - - -
1baa6967 by Ben Gamari at 2019-06-19T18:17:48Z
rts: Add Note explaining applicability of selector optimisation depth limit
This was slightly non-obvious so a note seems deserved.
- - - - -
4c866b4f by Ben Gamari at 2019-06-19T18:17:48Z
rts/Capability: A few documentation comments
- - - - -
d930ba9b by Ben Gamari at 2019-06-19T18:17:48Z
rts: Give stack flags proper macros
This were previously quite unclear and will change a bit under the
non-moving collector so let's clear this up now.
- - - - -
5f8f04b7 by Ben Gamari at 2019-06-19T18:17:48Z
rts/GC: Refactor gcCAFs
- - - - -
c8ee5c5f by Ben Gamari at 2019-06-19T18:17:48Z
rts: Fix macro parenthesisation
- - - - -
4f65be60 by Ben Gamari at 2019-06-19T18:17:48Z
rts: Fix CPP linter issues
- - - - -
ada2e65e by Ömer Sinan Ağacan at 2019-06-19T18:19:53Z
Disallow allocating megablocks, again
- - - - -
7f6f49e0 by Ömer Sinan Ağacan at 2019-06-19T18:20:02Z
Comments
- - - - -
64cf96a3 by Ben Gamari at 2019-06-19T18:20:36Z
Merge branches 'wip/gc/misc-rts' and 'wip/gc/aligned-block-allocation' into wip/gc/preparation
- - - - -
2413f243 by Ömer Sinan Ağacan at 2019-06-19T18:21:20Z
rts/StableName: Expose FOR_EACH_STABLE_NAME, freeSnEntry, SNT_size
These will be needed when we implement sweeping in the nonmoving
collector.
- - - - -
a5767c98 by Ben Gamari at 2019-06-19T18:21:20Z
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.
- - - - -
17d23113 by Ömer Sinan Ağacan at 2019-06-19T18:21:21Z
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.
- - - - -
437933b8 by Ben Gamari at 2019-06-19T18:21:21Z
rts: Introduce flag to enable the nonmoving old generation
This flag will enable the use of a non-moving oldest generation.
- - - - -
8d190c83 by Ben Gamari at 2019-06-19T18:21:21Z
rts: Introduce debug flag for non-moving GC
- - - - -
3f9bd459 by Ömer Sinan Ağacan at 2019-06-19T18:22:09Z
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>
- - - - -
439e50c3 by Ben Gamari at 2019-06-19T18:22:09Z
testsuite: Add nonmoving WAY
This simply runs the compile_and_run tests with `-xn`, enabling the
nonmoving oldest generation.
- - - - -
30 changed files:
- docs/users_guide/runtime_control.rst
- includes/Rts.h
- includes/rts/Flags.h
- includes/rts/storage/Block.h
- includes/rts/storage/GC.h
- includes/rts/storage/InfoTables.h
- includes/rts/storage/TSO.h
- libraries/base/GHC/RTS/Flags.hsc
- rts/Capability.c
- rts/Capability.h
- rts/PrimOps.cmm
- rts/RtsFlags.c
- rts/RtsStartup.c
- rts/Schedule.c
- rts/Schedule.h
- rts/StableName.c
- rts/StableName.h
- rts/Threads.c
- rts/Trace.h
- rts/Weak.c
- rts/ghc.mk
- rts/rts.cabal.in
- rts/sm/BlockAlloc.c
- 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
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/fbaf283cc9d30f3e6fc4e5815ce1c9674d41d5d6...439e50c3d1f575d6886f3f8fdac937b8d93f10a0
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/fbaf283cc9d30f3e6fc4e5815ce1c9674d41d5d6...439e50c3d1f575d6886f3f8fdac937b8d93f10a0
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/20190619/073ecb9a/attachment.html>
More information about the ghc-commits
mailing list