On 2 Mar 2010, at 21:38, Simon Marlow wrote:

On 02/03/10 20:37, Luke Palmer wrote:
On Tue, Mar 2, 2010 at 7:17 AM, Simon Marlow<marlo...@gmail.com> wrote:
For games,
though, we have a very good point that occurs regularly where we know that all/most short-lived objects will no longer be referenced - at the
start of a fresh frame.

System.Mem.performGC is your friend, but if you're unlucky it might do a
major GC and then you'll get more pause than you bargained for.

Some fine-grained control might be nice here.  Eg. I could do a major
GC as a player is opening a menu, on a loading screen, when the game
is paused, or some other key points, and it might still be annoying,
but at least it wouldn't interfere with gameplay.  There is of course
the question of what happens if one of these key points doesn't happen
when we need to do an allocation, but... oh well.  Perhaps that could
be mitigated by saying "I would rather you allocate than major GC
right now".  Are any of these options impossible, or be unreasonably
difficult to implement (I don't suspect so)?

Actually that's one thing we can do relatively easily, i.e. defer major GC for a while. Due to the way GHC has a two-layer memory manager, the heap is a list of discontiguous blocks, so we can always allocate some more memory.

So it would be pretty easy to provide something like

 disableMajorGC, enableMajorGC :: IO ()

Of course leaving it disabled too long could be bad, but that's your responsibility.

Oh, I just checked and System.Mem.performGC actually performs a major GC, here's its implementation:

foreign import ccall {-safe-} "performMajorGC" performGC :: IO ()

to perform a minor GC (or possibly a major GC if one is due), you want this:

foreign import ccall {-safe-} "performGC" performMinorGC :: IO ()

Cheers,
        Simon
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Is there a similar set of runes to be able to see how much mutation has occurred, how much was live last GC, etc?

Neil

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to