Make allocatePinned use local storage, and other refactorings
authorSimon Marlow <marlowsd@gmail.com>
Tue, 1 Dec 2009 16:03:21 +0000 (16:03 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Tue, 1 Dec 2009 16:03:21 +0000 (16:03 +0000)
commit5270423a6afe69f1dc57e5e5a474812182718d40
tree254cc0d910b315c47723a7a7fdd393fffbdee5ea
parent063b822bb68f84dd9729327bb1765637c25aceb4
Make allocatePinned use local storage, and other refactorings

This is a batch of refactoring to remove some of the GC's global
state, as we move towards CPU-local GC.

  - allocateLocal() now allocates large objects into the local
    nursery, rather than taking a global lock and allocating
    then in gen 0 step 0.

  - allocatePinned() was still allocating from global storage and
    taking a lock each time, now it uses local storage.
    (mallocForeignPtrBytes should be faster with -threaded).

  - We had a gen 0 step 0, distinct from the nurseries, which are
    stored in a separate nurseries[] array.  This is slightly strange.
    I removed the g0s0 global that pointed to gen 0 step 0, and
    removed all uses of it.  I think now we don't use gen 0 step 0 at
    all, except possibly when there is only one generation.  Possibly
    more tidying up is needed here.

  - I removed the global allocate() function, and renamed
    allocateLocal() to allocate().

  - the alloc_blocks global is gone.  MAYBE_GC() and
    doYouWantToGC() now check the local nursery only.
19 files changed:
includes/Cmm.h
includes/mkDerivedConstants.c
includes/rts/storage/GC.h
rts/Capability.c
rts/Capability.h
rts/Interpreter.c
rts/Linker.c
rts/PrimOps.cmm
rts/ProfHeap.c
rts/RaiseAsync.c
rts/RtsAPI.c
rts/STM.c
rts/Schedule.c
rts/Threads.c
rts/Weak.c
rts/sm/GC.c
rts/sm/MarkWeak.c
rts/sm/Storage.c
rts/sm/Storage.h