[GHC] #15665: Break up the stable pointer table
GHC
ghc-devs at haskell.org
Mon Sep 24 22:25:10 UTC 2018
#15665: Break up the stable pointer table
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner: (none)
Type: feature request | Status: new
Priority: normal | Milestone: 8.6.1
Component: Compiler | Version: 8.4.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: #7670 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by dfeuer):
One challenge is that the active entry list for a generation could jump
all over the heap, making major GC more expensive than it is now when the
table is well populated. Is there a sufficiently cheap way to ameliorate
this? I believe there is. The trick is to have one active entry list per
generation in each block, and an active block list in each generation. So
now GC for a generation will always finish one block before it moves to
the next, which I imagine should be much easier on the caches. We just
need to reserve room for as many pointers in each block as there are GC
generations, which doesn't look like too high a price to me.
Can we improve concurrency, which was really what got me started thinking
about this machine? I don't really know. The easiest thing would be to
divide everything strictly among the capabilities. Each capability would
have its own free list and its own active lists. Each block would be owned
by just one capability. Only that capability would be permitted to
allocate stable pointers in that block, though others could mark pointers
for deletion. The trouble with that rigidity is that one capability could
have loads of entries on its free list while another is flat broke and
forced to allocate fresh blocks (for example, a heavy `StablePtr`
allocator could migrate from one capability to another). Is there some
sufficiently cheap way to tax the rich to feed the poor without too much
bureaucracy? I don't see any, but I'm surely no expert.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15665#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list