[GHC] #7818: Cost of STACK object should be attributed to CCCS at time of thread creation

GHC cvs-ghc at haskell.org
Mon Apr 8 01:27:14 CEST 2013


#7818: Cost of STACK object should be attributed to CCCS at time of thread
creation
-----------------------------+----------------------------------------------
Reporter:  ezyang            |          Owner:  ezyang          
    Type:  task              |         Status:  new             
Priority:  normal            |      Component:  Profiling       
 Version:  7.7               |       Keywords:                  
      Os:  Unknown/Multiple  |   Architecture:  Unknown/Multiple
 Failure:  None/Unknown      |      Blockedby:                  
Blocking:                    |        Related:                  
-----------------------------+----------------------------------------------
 Right now, we always charge STACK objects to the SYSTEM cost centre. I
 think it makes more sense for us to charge them to the CCCS responsible
 for creating the thread: it’s more specific and we don’t really lose
 anything in the trade (it’s easy to ask for a per-closure-type profile).
 Here’s a strawman patch (obviously this doesn’t do anything when not
 compiling the profiling way.) Are there any objections?

 {{{
 diff --git a/rts/Threads.c b/rts/Threads.c
 index b617616..76ac705 100644
 --- a/rts/Threads.c
 +++ b/rts/Threads.c
 @@ -84,7 +84,7 @@ createThread(Capability *cap, W_ size)
      stack_size = round_to_mblocks(size - sizeofW(StgTSO));
      stack = (StgStack *)allocate(cap, stack_size);
      TICK_ALLOC_STACK(stack_size);
 -    SET_HDR(stack, &stg_STACK_info, CCS_SYSTEM);
 +    SET_HDR(stack, &stg_STACK_info, cap->r.rCCCS);
      stack->stack_size   = stack_size - sizeofW(StgStack);
      stack->sp           = stack->stack + stack->stack_size;
      stack->dirty        = 1;
 @@ -575,7 +575,11 @@ threadStackOverflow (Capability *cap, StgTSO *tso)
                    chunk_size * sizeof(W_));

      new_stack = (StgStack*) allocate(cap, chunk_size);
 -    SET_HDR(new_stack, &stg_STACK_info, CCS_SYSTEM);
 +#ifdef PROFILING
 +    SET_HDR(new_stack, &stg_STACK_info, old_stack->header.prof.ccs);
 +#else
 +    SET_HDR(new_stack, &stg_STACK_info, CCCS_SYSTEM);
 +#endif
      TICK_ALLOC_STACK(chunk_size);

      new_stack->dirty = 0; // begin clean, we'll mark it dirty below
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7818>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler



More information about the ghc-tickets mailing list