[GHC] #12455: Compact Regions

GHC ghc-devs at haskell.org
Wed Aug 3 16:18:32 UTC 2016


#12455: Compact Regions
-------------------------------------+-------------------------------------
        Reporter:  simonmar          |                Owner:  simonmar
            Type:  task              |               Status:  new
        Priority:  high              |            Milestone:  8.2.1
       Component:  Runtime System    |              Version:  8.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by simonmar:

@@ -14,1 +14,1 @@
- rtsopts=-DS"`
+ rtsopts=-DS"` (I think this is the static object problem, see below)
@@ -19,1 +19,7 @@
- * Improve comments
+ * Static Objects: currently compaction copies static objects into the
+ compact.  This violates some invariants (_STATIC objects should not be on
+ the heap), but is important because we would otherwise have pointers from
+ compacts to static objects that would need to be followed during GC, in
+ order to find CAFs.  I don't like this at all.
+
+ And in general, improve the comments.

New description:

 I'm going to use this task to keep track of what we still need to do
 around compact regions before 8.2.1, and so I have somewhere to hang
 diffs.

 Here's the current ToDo list:

 * compaction should be interruptible by GC, otherwise we block a
 multithreaded program while compacting (I know how to do this and have a
 prototype, just need to finish it).
 * Make it work with profiling
 * We should have an API that doesn't require specifying a size, just
 `compact :: NFData a => a -> IO (Compact a)`
 * libraries/compact/tests failures with `EXTRA_HC_OPTS="-debug -with-
 rtsopts=-DS"` (I think this is the static object problem, see below)
 * Do we need both `totalW` and `totalDataW`?  It looks like one of them is
 redundant to me.
 * What happens if we try to compact something that refers to a large
 block?  One larger than a megablock?
 * Static Objects: currently compaction copies static objects into the
 compact.  This violates some invariants (_STATIC objects should not be on
 the heap), but is important because we would otherwise have pointers from
 compacts to static objects that would need to be followed during GC, in
 order to find CAFs.  I don't like this at all.

 And in general, improve the comments.

--

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12455#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list