Commit 8d0e9847 authored by simonm's avatar simonm

[project @ 1999-02-03 16:32:47 by simonm]

Be more MBLOCK-friendly when allocating and resizing stacks.  This
should reduce the memory footprint a bit.
parent 1b233e22
/* -----------------------------------------------------------------------------
* $Id: BlockAlloc.h,v 1.3 1999/01/13 17:25:38 simonm Exp $
* $Id: BlockAlloc.h,v 1.4 1999/02/03 16:32:47 simonm Exp $
*
* Block Allocator Interface
*
......@@ -32,6 +32,23 @@ static inline bdescr *Bdescr(StgPtr p)
);
}
/* Round a value to megablocks --------------------------------------------- */
#define WORDS_PER_MBLOCK (BLOCKS_PER_MBLOCK * BLOCK_SIZE_W)
static inline nat
round_to_mblocks(nat words)
{
if (words > WORDS_PER_MBLOCK) {
if ((words % WORDS_PER_MBLOCK) < (WORDS_PER_MBLOCK / 2)) {
words = (words / WORDS_PER_MBLOCK) * WORDS_PER_MBLOCK;
} else {
words = ((words / WORDS_PER_MBLOCK) + 1) * WORDS_PER_MBLOCK;
}
}
return words;
}
/* Debugging -------------------------------------------------------------- */
#ifdef DEBUG
......
/* -----------------------------------------------------------------------------
* $Id: Schedule.c,v 1.7 1999/02/02 14:21:31 simonm Exp $
* $Id: Schedule.c,v 1.8 1999/02/03 16:32:47 simonm Exp $
*
* Scheduler
*
......@@ -107,7 +107,8 @@ initThread(StgTSO *tso, nat stack_size)
tso->splim = (P_)&(tso->stack) + RESERVED_STACK_WORDS;
tso->stack_size = stack_size;
tso->max_stack_size = RtsFlags.GcFlags.maxStkSize - TSO_STRUCT_SIZEW;
tso->max_stack_size = round_to_mblocks(RtsFlags.GcFlags.maxStkSize)
- TSO_STRUCT_SIZEW;
tso->sp = (P_)&(tso->stack) + stack_size;
#ifdef PROFILING
......@@ -676,6 +677,7 @@ threadStackOverflow(StgTSO *tso)
new_stack_size = stg_min(tso->stack_size * 2, tso->max_stack_size);
new_tso_size = (nat)BLOCK_ROUND_UP(new_stack_size * sizeof(W_) +
TSO_STRUCT_SIZE)/sizeof(W_);
new_tso_size = round_to_mblocks(new_tso_size); /* Be MBLOCK-friendly */
new_stack_size = new_tso_size - TSO_STRUCT_SIZEW;
IF_DEBUG(scheduler, fprintf(stderr,"increasing stack size from %d words to %d.\n", tso->stack_size, new_stack_size));
......
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