summaryrefslogtreecommitdiff
path: root/rts/sm/BlockAlloc.c
Commit message (Collapse)AuthorAgeFilesLines
...
* refactoringSimon Marlow2008-04-161-12/+11
|
* add debugging code to check for fragmentationSimon Marlow2008-04-161-0/+8
|
* update copyrights in rts/smSimon Marlow2008-04-161-1/+1
|
* faster block allocator, by dividing the free list into bucketsSimon Marlow2008-04-161-165/+165
|
* Release some of the memory allocated to a stack when it shrinks (#2090)simonmar@microsoft.com2008-02-281-0/+34
| | | | | | When a stack is occupying less than 1/4 of the memory it owns, and is larger than a megablock, we release half of it. Shrinking is O(1), it doesn't need to copy the stack.
* Initial parallel GC supportSimon Marlow2007-10-311-2/+4
| | | | | | | | | eg. use +RTS -g2 -RTS for 2 threads. Only major GCs are parallelised, minor GCs are still sequential. Don't use more threads than you have CPUs. It works most of the time, although you won't see much speedup yet. Tuning and more work on stability still required.
* Rework the block allocatorSimon Marlow2006-12-141-203/+480
| | | | | | | | The main goal here is to reduce fragmentation, which turns out to be the case of #743. While I was here I found some opportunities to improve performance too. The code is rather more complex, but it also contains a long comment describing the strategy, so please take a look at that for the details.
* small fix to DEBUG case in coalesce/freeGroup patchSimon Marlow2006-11-211-1/+3
|
* optimisation to freeGroup() to avoid an O(N^2) pathalogical caseSimon Marlow2006-11-211-11/+14
| | | | | | | | | | | | | In the free list, we don't strictly speaking need to have every block in a coalesced group point to the head block, although this is an invariant for non-free blocks. Dropping this invariant for the free list means that coalesce() is O(1) rather than O(N), and freeGroup() is therefore O(N) not O(N^2). The bad case probably didn't happen most of the time, indeed it has never shown up in a profile that I've seen. I had a report from a while back that this was a problem with really large heaps, though. Fortunately the fix is easy.
* Split GC.c, and move storage manager into sm/ directorySimon Marlow2006-10-241-0/+391
In preparation for parallel GC, split up the monolithic GC.c file into smaller parts. Also in this patch (and difficult to separate, unfortunatley): - Don't include Stable.h in Rts.h, instead just include it where necessary. - consistently use STATIC_INLINE in source files, and INLINE_HEADER in header files. STATIC_INLINE is now turned off when DEBUG is on, to make debugging easier. - The GC no longer takes the get_roots function as an argument. We weren't making use of this generalisation.