ghc.git
11 years agoFIX #2185: sparks should not be treated as roots by the GC
Simon Marlow [Thu, 24 Apr 2008 20:58:13 +0000 (20:58 +0000)] 
FIX #2185: sparks should not be treated as roots by the GC

11 years agoturn off the usleep() in the GC thread idle loop (tmp, for portability)
Simon Marlow [Thu, 17 Apr 2008 22:02:21 +0000 (22:02 +0000)] 
turn off the usleep() in the GC thread idle loop (tmp, for portability)

11 years agodeclare the GC thread register variable more portably
Simon Marlow [Thu, 17 Apr 2008 22:01:57 +0000 (22:01 +0000)] 
declare the GC thread register variable more portably

11 years agoremove EVACUATED: store the forwarding pointer in the info pointer
Simon Marlow [Thu, 17 Apr 2008 21:27:07 +0000 (21:27 +0000)] 
remove EVACUATED: store the forwarding pointer in the info pointer

11 years agotso->link is now tso->_link (fix after merge with HEAD)
Simon Marlow [Thu, 17 Apr 2008 18:00:16 +0000 (18:00 +0000)] 
tso->link is now tso->_link  (fix after merge with HEAD)

11 years agoDon't look at all the threads before each GC.
Simon Marlow [Wed, 16 Apr 2008 23:44:46 +0000 (23:44 +0000)] 
Don't look at all the threads before each GC.
We were looking at all the threads for 2 reasons:
 1. to catch transactions that might be looping as a
    result of seeing an inconsistent view of memory.
 2. to catch threads with blocked exceptions that are
    themselves blocked.
For (1) we now check for this case whenever a thread yields, and for
(2) we catch these threads in the GC itself and send the exceptions
after GC (see performPendingThrowTos).

11 years agoDon't traverse the entire list of threads on every GC (phase 1)
Simon Marlow [Wed, 16 Apr 2008 23:44:20 +0000 (23:44 +0000)] 
Don't traverse the entire list of threads on every GC (phase 1)
Instead of keeping a single list of all threads, keep one per step
and only look at the threads belonging to steps that we are
collecting.

11 years agooptimisation for isAlive()
Simon Marlow [Wed, 16 Apr 2008 23:43:49 +0000 (23:43 +0000)] 
optimisation for isAlive()

11 years agorefactoring
Simon Marlow [Wed, 16 Apr 2008 23:43:24 +0000 (23:43 +0000)] 
refactoring

11 years agoadd [] to foreign calls
Simon Marlow [Wed, 16 Apr 2008 23:42:34 +0000 (23:42 +0000)] 
add [] to foreign calls

11 years agoremove GRAN/PAR code
Simon Marlow [Wed, 16 Apr 2008 23:41:35 +0000 (23:41 +0000)] 
remove GRAN/PAR code

11 years agobugfix for traverseBlackHoleQueue
Simon Marlow [Wed, 16 Apr 2008 23:40:42 +0000 (23:40 +0000)] 
bugfix for traverseBlackHoleQueue

11 years agoAdd a write barrier to the TSO link field (#1589)
Simon Marlow [Wed, 16 Apr 2008 23:39:51 +0000 (23:39 +0000)] 
Add a write barrier to the TSO link field (#1589)

11 years agofix trace
Simon Marlow [Wed, 16 Apr 2008 23:39:22 +0000 (23:39 +0000)] 
fix trace

11 years agotmp: alloc one block at a time
Simon Marlow [Wed, 16 Apr 2008 23:38:30 +0000 (23:38 +0000)] 
tmp: alloc one block at a time

11 years agoadd debugging code to check for fragmentation
Simon Marlow [Wed, 16 Apr 2008 23:30:58 +0000 (23:30 +0000)] 
add debugging code to check for fragmentation

11 years agodo a better job of re-using partial blocks in subsequent GCs
Simon Marlow [Wed, 16 Apr 2008 23:29:49 +0000 (23:29 +0000)] 
do a better job of re-using partial blocks in subsequent GCs

11 years agoUse the BF_EVACUATED flag to indicate to-space consistently
Simon Marlow [Wed, 16 Apr 2008 23:29:06 +0000 (23:29 +0000)] 
Use the BF_EVACUATED flag to indicate to-space consistently
BF_EVACUATED is now set on all blocks except those that we are
copying.  This means we don't need a separate test for gen>N in
evacuate(), because in generations older than N, BF_EVACUATED will be
set anyway.  The disadvantage is that we have to reset the
BF_EVACUATED flag on the blocks of any generation we're collecting
before starting GC.  Results in a small speed improvement.

11 years agorearrange: we were calling markSomeCapabilities too often
Simon Marlow [Wed, 16 Apr 2008 23:28:25 +0000 (23:28 +0000)] 
rearrange: we were calling markSomeCapabilities too often

11 years agodebug output: show mem in use
Simon Marlow [Wed, 16 Apr 2008 23:27:39 +0000 (23:27 +0000)] 
debug output: show mem in use

11 years agomake +RTS -G1 work again
Simon Marlow [Wed, 16 Apr 2008 23:25:10 +0000 (23:25 +0000)] 
make +RTS -G1 work again

11 years agopad step_workspace to 64 bytes, to speed up access to gct->steps[]
Simon Marlow [Wed, 16 Apr 2008 23:24:33 +0000 (23:24 +0000)] 
pad step_workspace to 64 bytes, to speed up access to gct->steps[]

11 years agoupdate copyrights in rts/sm
Simon Marlow [Wed, 16 Apr 2008 23:23:55 +0000 (23:23 +0000)] 
update copyrights in rts/sm

11 years agoReorganisation to fix problems related to the gct register variable
Simon Marlow [Wed, 16 Apr 2008 23:22:32 +0000 (23:22 +0000)] 
Reorganisation to fix problems related to the gct register variable
  - GCAux.c contains code not compiled with the gct register enabled,
    it is callable from outside the GC
  - marking functions are moved to their relevant subsystems, outside
    the GC
  - mark_root needs to save the gct register, as it is called from
    outside the GC

11 years agofaster block allocator, by dividing the free list into buckets
Simon Marlow [Wed, 16 Apr 2008 22:45:41 +0000 (22:45 +0000)] 
faster block allocator, by dividing the free list into buckets

11 years agoallocate more blocks in one go, to reduce contention for the block allocator
Simon Marlow [Wed, 16 Apr 2008 22:38:24 +0000 (22:38 +0000)] 
allocate more blocks in one go, to reduce contention for the block allocator

11 years agomeasure GC(0/1) times and work imbalance
Simon Marlow [Wed, 16 Apr 2008 22:25:39 +0000 (22:25 +0000)] 
measure GC(0/1) times and work imbalance

11 years agoremove outdated comment
Simon Marlow [Wed, 16 Apr 2008 22:23:19 +0000 (22:23 +0000)] 
remove outdated comment

11 years agocalculate and report slop (wasted space at the end of blocks)
Simon Marlow [Wed, 16 Apr 2008 22:15:16 +0000 (22:15 +0000)] 
calculate and report slop (wasted space at the end of blocks)

11 years agofree empty blocks at the end of GC
Simon Marlow [Wed, 16 Apr 2008 22:13:56 +0000 (22:13 +0000)] 
free empty blocks at the end of GC

11 years agomove the scan block pointer into the gct structure
Simon Marlow [Wed, 16 Apr 2008 22:13:31 +0000 (22:13 +0000)] 
move the scan block pointer into the gct structure

11 years agoimprovements to +RTS -s output
Simon Marlow [Wed, 16 Apr 2008 22:12:24 +0000 (22:12 +0000)] 
improvements to +RTS -s output
- count and report number of parallel collections
- calculate bytes scanned in addition to bytes copied per thread
- calculate "work balance factor"
- tidy up the formatting a bit

11 years agowait for threads to start up properly
Simon Marlow [Wed, 16 Apr 2008 22:10:02 +0000 (22:10 +0000)] 
wait for threads to start up properly

11 years agodebug output tweaks
Simon Marlow [Wed, 16 Apr 2008 22:08:07 +0000 (22:08 +0000)] 
debug output tweaks

11 years agoKeep track of an accurate count of live words in each step
Simon Marlow [Wed, 16 Apr 2008 22:06:20 +0000 (22:06 +0000)] 
Keep track of an accurate count of live words in each step
This means we can calculate slop easily, and also improve
predictability of GC.

11 years agoAllow work units smaller than a block to improve load balancing
Simon Marlow [Wed, 16 Apr 2008 22:03:47 +0000 (22:03 +0000)] 
Allow work units smaller than a block to improve load balancing

11 years agoin scavenge_block1(), we can use the lock-free recordMutableGen()
Simon Marlow [Wed, 16 Apr 2008 22:01:04 +0000 (22:01 +0000)] 
in scavenge_block1(), we can use the lock-free recordMutableGen()

11 years agoupdate the debug counters following changes to scav_find_work()
Simon Marlow [Wed, 16 Apr 2008 21:59:45 +0000 (21:59 +0000)] 
update the debug counters following changes to scav_find_work()

11 years agochange the find-work strategy: use oldest-first consistently
Simon Marlow [Wed, 16 Apr 2008 21:58:15 +0000 (21:58 +0000)] 
change the find-work strategy: use oldest-first consistently

11 years agoper-thread debug output when using multiple threads, not just major gc
Simon Marlow [Wed, 16 Apr 2008 21:57:41 +0000 (21:57 +0000)] 
per-thread debug output when using multiple threads, not just major gc

11 years agosmall debug output improvements
Simon Marlow [Wed, 16 Apr 2008 21:56:49 +0000 (21:56 +0000)] 
small debug output improvements

11 years agoallow parallel minor collections too
Simon Marlow [Wed, 16 Apr 2008 21:55:03 +0000 (21:55 +0000)] 
allow parallel minor collections too

11 years agoSpecialise evac/scav for single-threaded, not minor, GC
Simon Marlow [Wed, 16 Apr 2008 21:54:05 +0000 (21:54 +0000)] 
Specialise evac/scav for single-threaded, not minor, GC
So we can parallelise minor collections too.  Sometimes it's worth it.

11 years agomove usleep(1) to gc_thread_work() from any_work()
Simon Marlow [Wed, 16 Apr 2008 21:53:25 +0000 (21:53 +0000)] 
move usleep(1) to gc_thread_work() from any_work()

11 years agouse RTS_VAR()
Simon Marlow [Wed, 16 Apr 2008 21:52:45 +0000 (21:52 +0000)] 
use RTS_VAR()

11 years agotreat the global work list as a queue rather than a stack
Simon Marlow [Wed, 16 Apr 2008 21:51:09 +0000 (21:51 +0000)] 
treat the global work list as a queue rather than a stack

11 years agoGC: move static object processinng into thread-local storage
Simon Marlow [Wed, 16 Apr 2008 21:48:25 +0000 (21:48 +0000)] 
GC: move static object processinng into thread-local storage

11 years agotmp: usleep(1) during anyWork() if no work
Simon Marlow [Wed, 16 Apr 2008 21:40:23 +0000 (21:40 +0000)] 
tmp: usleep(1) during anyWork() if no work

11 years agoanyWork(): count the number of times we don't find any work
Simon Marlow [Wed, 16 Apr 2008 21:39:45 +0000 (21:39 +0000)] 
anyWork(): count the number of times we don't find any work

11 years agostats fixes
Simon Marlow [Wed, 16 Apr 2008 21:35:32 +0000 (21:35 +0000)] 
stats fixes

11 years agoAdd +RTS -vg flag for requesting some GC trace messages, outside DEBUG
Simon Marlow [Wed, 16 Apr 2008 21:35:04 +0000 (21:35 +0000)] 
Add +RTS -vg flag for requesting some GC trace messages, outside DEBUG
DEBUG imposes a significant performance hit in the GC, yet we often
want some of the debugging output, so -vg gives us the cheap trace
messages without the sanity checking of DEBUG, just like -vs for the
scheduler.

11 years agoGC: rearrange storage to reduce memory accesses in the inner loop
Simon Marlow [Wed, 16 Apr 2008 21:34:36 +0000 (21:34 +0000)] 
GC: rearrange storage to reduce memory accesses in the inner loop

11 years agoAdd profiling of spinlocks
Simon Marlow [Wed, 16 Apr 2008 21:33:58 +0000 (21:33 +0000)] 
Add profiling of spinlocks

11 years agorename StgSync to SpinLock
Simon Marlow [Wed, 16 Apr 2008 21:11:52 +0000 (21:11 +0000)] 
rename StgSync to SpinLock

11 years agoRelease some of the memory allocated to a stack when it shrinks (#2090)
simonmar@microsoft.com [Thu, 28 Feb 2008 15:31:29 +0000 (15:31 +0000)] 
Release some of the memory allocated to a stack when it shrinks (#2090)
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.

11 years agoscavengeTSO might encounter a ThreadRelocated; cope
simonmar@microsoft.com [Thu, 28 Feb 2008 15:24:03 +0000 (15:24 +0000)] 
scavengeTSO might encounter a ThreadRelocated; cope

11 years agoUpdating a thunk in raiseAsync might encounter an IND; cope
simonmar@microsoft.com [Thu, 28 Feb 2008 15:23:32 +0000 (15:23 +0000)] 
Updating a thunk in raiseAsync might encounter an IND; cope
There was already a check to avoid updating an IND, but it was
originally there to avoid a bug which doesn't exist now.  Furthermore
the test and update are not atomic, so another thread could be
updating this thunk while we are.  We have to just go ahead and update
anyway - it might waste a little work, but this is a very rare case.

11 years agoadd GC(0) and GC(1) time
Simon Marlow [Fri, 22 Feb 2008 14:20:08 +0000 (14:20 +0000)] 
add GC(0) and GC(1) time

11 years agoround_to_mblocks: should use StgWord not nat
Simon Marlow [Wed, 20 Feb 2008 13:01:39 +0000 (13:01 +0000)] 
round_to_mblocks: should use StgWord not nat

11 years agodebugging code
Simon Marlow [Tue, 19 Feb 2008 10:26:51 +0000 (10:26 +0000)] 
debugging code

11 years agorefactoring
simonmar@microsoft.com [Mon, 18 Feb 2008 13:54:58 +0000 (13:54 +0000)] 
refactoring

11 years agofix off-by-one
simonmar@microsoft.com [Fri, 15 Feb 2008 13:40:17 +0000 (13:40 +0000)] 
fix off-by-one

11 years agomeasure mut_elapsed_time
simonmar@microsoft.com [Fri, 15 Feb 2008 13:38:50 +0000 (13:38 +0000)] 
measure mut_elapsed_time

11 years agofix build with 6.8
simonmar@microsoft.com [Fri, 15 Feb 2008 13:38:36 +0000 (13:38 +0000)] 
fix build with 6.8

11 years agoadd ROUNDUP_BYTES_TO_WDS
simonmar@microsoft.com [Fri, 15 Feb 2008 13:30:40 +0000 (13:30 +0000)] 
add ROUNDUP_BYTES_TO_WDS

11 years agoAllow +RTS -H0 as a way to override a previous -H<size>
simonmar@microsoft.com [Thu, 31 Jan 2008 15:36:45 +0000 (15:36 +0000)] 
Allow +RTS -H0 as a way to override a previous -H<size>

11 years agocomment out a bogus assertion
simonmar@microsoft.com [Wed, 30 Jan 2008 15:09:34 +0000 (15:09 +0000)] 
comment out a bogus assertion

11 years agomemInventory: optionally dump the memory inventory
simonmar@microsoft.com [Wed, 30 Jan 2008 15:09:21 +0000 (15:09 +0000)] 
memInventory: optionally dump the memory inventory
in addition to checking for leaks

11 years agocalcNeeded: fix the calculation, we weren't counting G0 step 1
simonmar@microsoft.com [Wed, 30 Jan 2008 15:07:30 +0000 (15:07 +0000)] 
calcNeeded: fix the calculation, we weren't counting G0 step 1

11 years agocalcNeeded: add in the large blocks too
simonmar@microsoft.com [Wed, 30 Jan 2008 13:54:18 +0000 (13:54 +0000)] 
calcNeeded: add in the large blocks too

11 years agoupdate a comment
Simon Marlow [Wed, 30 Jan 2008 10:15:04 +0000 (10:15 +0000)] 
update a comment

11 years agotell Emacs these files are C
simonmar@microsoft.com [Wed, 30 Jan 2008 10:00:47 +0000 (10:00 +0000)] 
tell Emacs these files are C

11 years agofix an assertion
Simon Marlow [Fri, 18 Jan 2008 16:09:10 +0000 (16:09 +0000)] 
fix an assertion

11 years agocut-and-pasto
Simon Marlow [Wed, 16 Jan 2008 10:37:51 +0000 (10:37 +0000)] 
cut-and-pasto

11 years agosmall rearrangement
simonmar@microsoft.com [Tue, 15 Jan 2008 09:57:36 +0000 (09:57 +0000)] 
small rearrangement

11 years agorecordMutableGen_GC: we must call the spinlocked version of allocBlock()
Simon Marlow [Fri, 11 Jan 2008 13:54:53 +0000 (13:54 +0000)] 
recordMutableGen_GC: we must call the spinlocked version of allocBlock()

11 years agoremove unused declaration
simonmar@microsoft.com [Fri, 11 Jan 2008 10:58:21 +0000 (10:58 +0000)] 
remove unused declaration

11 years agomore fixes for THUNK_SELECTORs
Simon Marlow [Thu, 10 Jan 2008 12:28:20 +0000 (12:28 +0000)] 
more fixes for THUNK_SELECTORs

11 years agoFix bug in eval_thunk_selector()
simonmar@microsoft.com [Thu, 10 Jan 2008 10:56:28 +0000 (10:56 +0000)] 
Fix bug in eval_thunk_selector()

11 years agomove markSparkQueue into GC.c, as it needs the register variable defined
Simon Marlow [Wed, 9 Jan 2008 16:28:28 +0000 (16:28 +0000)] 
move markSparkQueue into GC.c, as it needs the register variable defined

11 years agoWindows fix
Simon Marlow [Wed, 9 Jan 2008 16:27:32 +0000 (16:27 +0000)] 
Windows fix

11 years agoFix bug: eval_thunk_selector was calling the unlocked evacuate()
Simon Marlow [Wed, 9 Jan 2008 14:49:37 +0000 (14:49 +0000)] 
Fix bug: eval_thunk_selector was calling the unlocked evacuate()

11 years agoadd GC elapsed time
simonmar@microsoft.com [Mon, 7 Jan 2008 13:48:38 +0000 (13:48 +0000)] 
add GC elapsed time

11 years agoupdate to match Mb -> MB change in -s output
simonmar@microsoft.com [Thu, 20 Dec 2007 14:58:55 +0000 (14:58 +0000)] 
update to match Mb -> MB change in -s output

11 years agouse "MB" rather than "Mb" for abbreviating megabytes
simonmar@microsoft.com [Tue, 18 Dec 2007 14:51:35 +0000 (14:51 +0000)] 
use "MB" rather than "Mb" for abbreviating megabytes

11 years agofindSlop: useful function for tracking down excessive slop in gdb
simonmar@microsoft.com [Fri, 14 Dec 2007 13:59:09 +0000 (13:59 +0000)] 
findSlop: useful function for tracking down excessive slop in gdb

11 years agocalculate wastage due to unused memory at the end of each block
simonmar@microsoft.com [Fri, 14 Dec 2007 13:58:42 +0000 (13:58 +0000)] 
calculate wastage due to unused memory at the end of each block

11 years agobugfix: check for NULL before testing isPartiallyFull(stp->blocks)
simonmar@microsoft.com [Fri, 14 Dec 2007 10:32:23 +0000 (10:32 +0000)] 
bugfix: check for NULL before testing isPartiallyFull(stp->blocks)

11 years agohave each GC thread call GetRoots()
simonmar@microsoft.com [Thu, 13 Dec 2007 16:50:13 +0000 (16:50 +0000)] 
have each GC thread call GetRoots()

11 years agouse synchronised version of freeChain() in scavenge_mutable_list()
simonmar@microsoft.com [Thu, 13 Dec 2007 16:45:25 +0000 (16:45 +0000)] 
use synchronised version of freeChain() in scavenge_mutable_list()

11 years agoremove declarations for variables that no longer exist
simonmar@microsoft.com [Thu, 13 Dec 2007 15:09:46 +0000 (15:09 +0000)] 
remove declarations for variables that no longer exist

11 years agoremove old comment
simonmar@microsoft.com [Wed, 12 Dec 2007 16:33:29 +0000 (16:33 +0000)] 
remove old comment

11 years agoGC: small improvement to parallelism
simonmar@microsoft.com [Thu, 29 Nov 2007 15:49:27 +0000 (15:49 +0000)] 
GC: small improvement to parallelism
don't cache a work block locally if the global queue is empty

11 years agoEVACUATED: target is definitely HEAP_ALLOCED(), no need to check
simonmar@microsoft.com [Thu, 29 Nov 2007 12:00:21 +0000 (12:00 +0000)] 
EVACUATED: target is definitely HEAP_ALLOCED(), no need to check

11 years agoin scavenge_block(), keep going if we're scanning the todo block
simonmar@microsoft.com [Tue, 27 Nov 2007 16:07:47 +0000 (16:07 +0000)] 
in scavenge_block(), keep going if we're scanning the todo block

11 years agocount the number of todo blocks, and add a trace
simonmar@microsoft.com [Tue, 27 Nov 2007 16:07:17 +0000 (16:07 +0000)] 
count the number of todo blocks, and add a trace

11 years agooops, restore accidentally disabled hash-consing for Char
simonmar@microsoft.com [Fri, 23 Nov 2007 16:25:22 +0000 (16:25 +0000)] 
oops, restore accidentally disabled hash-consing for Char

11 years agokill the PAR/GRAN debug flags
simonmar@microsoft.com [Thu, 22 Nov 2007 12:23:27 +0000 (12:23 +0000)] 
kill the PAR/GRAN debug flags

11 years agostats: print elapsed time for GC in each generation
simonmar@microsoft.com [Thu, 22 Nov 2007 10:50:24 +0000 (10:50 +0000)] 
stats: print elapsed time for GC in each generation

11 years agoassertion fix
simonmar@microsoft.com [Wed, 21 Nov 2007 16:47:36 +0000 (16:47 +0000)] 
assertion fix