[GHC] #7606: Stride scheduling for Haskell threads with priorities

GHC cvs-ghc at haskell.org
Wed Jan 23 23:44:39 CET 2013


#7606: Stride scheduling for Haskell threads with priorities
---------------------------------+------------------------------------------
    Reporter:  ezyang            |       Owner:  ezyang          
        Type:  feature request   |      Status:  new             
    Priority:  normal            |   Milestone:  7.8.1           
   Component:  Runtime System    |     Version:  7.7             
    Keywords:                    |          Os:  Unknown/Multiple
Architecture:  Unknown/Multiple  |     Failure:  None/Unknown    
  Difficulty:  Unknown           |    Testcase:                  
   Blockedby:                    |    Blocking:                  
     Related:                    |  
---------------------------------+------------------------------------------

Comment(by ezyang):

 OK, I have a much better sense for where the performance problems are
 coming from.

 ----

 Adding extra words to the TSO has no impact on most smp benchmarks, but
 really kills threads006 (up to 100% slowdown); this is not too surprising
 since this benchmark involves creating 200,000 threads. A representative
 stat without a small TSO is

 {{{
 224198416 bytes, 425 GCs (416 + 9), 0/0 avg/max bytes residency (0
 samples), 699092656 bytes GC work, 279M in use, 0.00 INIT (0.00 elapsed),
 0.02 MUT (0.02 elapsed), 0.33 GC (0.33 elapsed), 0.12 GC(0) (0.12
 elapsed), 0.21 GC(1) (0.21 elapsed)
 }}}

 A representative stat with a big TSO is

 {{{
 224198416 bytes, 425 GCs (415 + 10), 0/0 avg/max bytes residency (0
 samples), 853296496 bytes GC work, 426M in use, 0.00 INIT (0.00 elapsed),
 0.00 MUT (0.00 elapsed), 0.47 GC (0.47 elapsed), 0.12 GC(0) (0.12
 elapsed), 0.34 GC(1) (0.35 elapsed)
 }}}

 What I don't understand is why the memory in use blows up by 150MB; by my
 count, the extra words should only be adding something like 10MB of
 overhead; my best guess is that I am actually nudging TSO size over some
 invisible threshold (maybe the big object threshold).

 ----

 From there, the next two bugs have to do with subtle scheduler changes.
 The first bug I have a clean fix for (it was a plain old bug); 'sieve'
 slows down a lot if threads which HeapOverflow don't get put back in front
 of the run queue.  Fixing that dramatically improves runtime for all of
 the benchmarks except 'threads003': we can make that performance problem
 go away if we force threads to get appended to the end of the run queue
 (of course, stride scheduling won't work in that case!) I'm still
 investigating these.

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



More information about the ghc-tickets mailing list