Commit a0ca27ac authored by Simon Marlow's avatar Simon Marlow

Correction to the allocation stats following earlier refactoring

parent 5f9075da
......@@ -385,7 +385,7 @@
// allocate() - this includes many of the primops.
#define MAYBE_GC(liveness,reentry) \
if (bdescr_link(CurrentNursery) == NULL || \
generation_n_large_blocks(W_[g0]) >= CInt[alloc_blocks_lim]) { \
generation_n_new_large_blocks(W_[g0]) >= CInt[alloc_blocks_lim]) { \
R9 = liveness; \
R10 = reentry; \
HpAlloc = 0; \
......
......@@ -249,7 +249,7 @@ main(int argc, char *argv[])
struct_size(generation);
struct_field(generation, mut_list);
struct_field(generation, n_large_blocks);
struct_field(generation, n_new_large_blocks);
struct_size(CostCentreStack);
struct_field(CostCentreStack, ccsID);
......
......@@ -67,10 +67,11 @@ typedef struct generation_ {
bdescr * large_objects; // large objects (doubly linked)
unsigned int n_large_blocks; // no. of blocks used by large objs
unsigned int n_new_large_blocks; // count freshly allocated large objects
unsigned int max_blocks; // max blocks
bdescr *mut_list; // mut objects in this gen (not G0)
StgTSO * threads; // threads in this gen
// linked via global_link
struct generation_ *to; // destination gen for live objects
......
......@@ -649,6 +649,7 @@ SET_GCT(gc_threads[0]);
freeChain(gen->large_objects);
gen->large_objects = gen->scavenged_large_objects;
gen->n_large_blocks = gen->n_scavenged_large_blocks;
gen->n_new_large_blocks = 0;
ASSERT(countBlocks(gen->large_objects) == gen->n_large_blocks);
}
else // for generations > N
......
......@@ -79,6 +79,7 @@ initGeneration (generation *gen, int g)
gen->n_old_blocks = 0;
gen->large_objects = NULL;
gen->n_large_blocks = 0;
gen->n_new_large_blocks = 0;
gen->mut_list = allocBlock();
gen->scavenged_large_objects = NULL;
gen->n_scavenged_large_blocks = 0;
......@@ -567,6 +568,7 @@ allocate (Capability *cap, lnat n)
bd = allocGroup(req_blocks);
dbl_link_onto(bd, &g0->large_objects);
g0->n_large_blocks += bd->blocks; // might be larger than req_blocks
g0->n_new_large_blocks += bd->blocks;
RELEASE_SM_LOCK;
initBdescr(bd, g0, g0);
bd->flags = BF_LARGE;
......@@ -666,6 +668,7 @@ allocatePinned (Capability *cap, lnat n)
cap->pinned_object_block = bd = allocBlock();
dbl_link_onto(bd, &g0->large_objects);
g0->n_large_blocks++;
g0->n_new_large_blocks++;
RELEASE_SM_LOCK;
initBdescr(bd, g0, g0);
bd->flags = BF_PINNED | BF_LARGE;
......@@ -784,6 +787,8 @@ calcAllocated( void )
}
}
allocated += g0->n_new_large_blocks * BLOCK_SIZE_W;
total_allocated += allocated;
return allocated;
}
......
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