[GHC] #7662: Improve GC of mutable objects
GHC
cvs-ghc at haskell.org
Wed Feb 6 11:52:58 CET 2013
#7662: Improve GC of mutable objects
---------------------------------+------------------------------------------
Reporter: ezyang | Owner:
Type: feature request | Status: new
Priority: normal | Milestone: _|_
Component: Runtime System | Version: 7.7
Keywords: | Os: Unknown/Multiple
Architecture: Unknown/Multiple | Failure: None/Unknown
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: |
---------------------------------+------------------------------------------
Changes (by simonmar):
* difficulty: => Unknown
* milestone: => _|_
Comment:
One problem with card marking is that you need to be able to traverse the
heap linearly to scan the objects in a card. GHC's heap doesn't support
this, because we have gaps between objects left behind when a thunk is
overwritten by an indirection. It's possible to fill in the gaps (we do
this when `DEBUG` is enabled), but it's a fair bit of overhead on every
update. This is why we only have card marking for arrays.
We should have a small array type that uses the same write barrier as a
`MutVar#`, i.e. it isn't on the mutable list until it is modified, and
there's no card marking. This would help in the `unordered-containers`
package I believe.
I've often wondered whether we can fully unpack an `IORef`, that is have a
mutable pointer field in an ordinary constructor. It would be nice if we
could do it, but I fear it is hard to achieve - you can't re-box a mutable
field like you can with an immutable field. Perhaps we could represent a
`MutVar#` as a pointer plus an offset instead.
(I'm leaving the milestone for this at _|_, which is not to say that none
of this will ever happen, just that we don't have concrete plans right
now).
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7662#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list