Commit e0b21a6c authored by simonmar's avatar simonmar
Browse files

[project @ 2005-04-27 14:37:26 by simonmar]

When using -H<size> in SMP mode, divide the total nursery size amongst
the various nurseries.  -H<size> now does something reasonable with
SMP.
parent 0cc00995
......@@ -369,11 +369,12 @@ INLINE_HEADER StgWord stack_frame_sizeW( StgClosure *frame )
Nursery manipulation
-------------------------------------------------------------------------- */
extern void allocNurseries ( void );
extern void resetNurseries ( void );
extern void resizeNurseries ( nat blocks );
extern void tidyAllocateLists ( void );
extern lnat countNurseryBlocks ( void );
extern void allocNurseries ( void );
extern void resetNurseries ( void );
extern void resizeNurseries ( nat blocks );
extern void resizeNurseriesFixed ( nat blocks );
extern void tidyAllocateLists ( void );
extern lnat countNurseryBlocks ( void );
/* -----------------------------------------------------------------------------
Functions from GC.c
......
......@@ -1029,7 +1029,7 @@ GarbageCollect ( void (*get_roots)(evac_fn), rtsBool force_major_gc )
} else {
// we might have added extra large blocks to the nursery, so
// resize back to minAllocAreaSize again.
resizeNurseries(RtsFlags.GcFlags.minAllocAreaSize);
resizeNurseriesFixed(RtsFlags.GcFlags.minAllocAreaSize);
}
}
......
......@@ -216,11 +216,6 @@ initStorage( void )
errorBelch("-G1 is incompatible with SMP");
stg_exit(1);
}
// No -H, for now
if (RtsFlags.GcFlags.heapSizeSuggestion > 0) {
errorBelch("-H<size> is incompatible with SMP");
stg_exit(1);
}
#endif
/* generation 0 is special: that's the nursery */
......@@ -509,7 +504,7 @@ resizeNursery ( step *stp, nat blocks )
// Resize each of the nurseries to the specified size.
//
void
resizeNurseries (nat blocks)
resizeNurseriesFixed (nat blocks)
{
nat i;
for (i = 0; i < n_nurseries; i++) {
......@@ -517,6 +512,17 @@ resizeNurseries (nat blocks)
}
}
//
// Resize the nurseries to the total specified size.
//
void
resizeNurseries (nat blocks)
{
// If there are multiple nurseries, then we just divide the number
// of available blocks between them.
resizeNurseriesFixed(blocks / n_nurseries);
}
/* -----------------------------------------------------------------------------
The allocate() interface
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment