[project @ 2005-06-13 12:29:48 by simonmar]
authorsimonmar <unknown>
Mon, 13 Jun 2005 12:29:49 +0000 (12:29 +0000)
committersimonmar <unknown>
Mon, 13 Jun 2005 12:29:49 +0000 (12:29 +0000)
commitb07f38769e7fb7ff94e9ca7eb8387b582a98bdb2
tree80faf0416de5ba80214f58bab9ba5e3c27c73548
parent15e008483d1934c183f587aaa4fb42dc326095dc
[project @ 2005-06-13 12:29:48 by simonmar]
Block allocator performance fix: instead of keeping the free list
ordered, keep it doubly-linked, and introduce a new flag BF_FREE so we
can tell when a block is free.  We can still coalesce blocks on the
free list because block descriptors are kept consecutively in memory,
so we can tell based on the BF_FREE flag whether to coalesce with the
next higher/lower blocks when freeing a block.

This (almost) make freeChain O(n) rather than O(n^2), and has been
reported to help a lot when dealing with very large heaps.
ghc/includes/Block.h
ghc/rts/BlockAlloc.c
ghc/rts/FrontPanel.c
ghc/rts/RetainerProfile.c