[GHC] #7606: Stride scheduling for Haskell threads with priorities
GHC
cvs-ghc at haskell.org
Fri Jan 18 12:47:09 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: |
---------------------------------+------------------------------------------
Changes (by simonmar):
* difficulty: => Unknown
* milestone: => 7.8.1
Comment:
Awesome!
Ok, to get started on the reviewing process, I'll jot down some concerns.
* First, nofib has zero concurrency benchmarks in it, so the results
aren't very meaningful. Still, you seem to have some outliers in there -
any idea why? nofib/smp has some concurrency benchmarks that I normally
use when making changes to the scheduler.
* Run all the tests in `testsuite/concurrent`. They aren't run by
default in a validate.
* The patch adds no less than 4 fields to the TSO struct, which is quite
a lot. We should benchmark carefully to make sure this isn't a problem.
* Why stride scheduling rather than something else, e.g. Linux's CFS?
Wouldn't CFS address the issue of giving more time to blocked threads?
What about inaccuracies due to the time it takes for a thread to respond
to the timer signal?
* Currently, if there's a very long run queue, a minor GC won't have to
traverse a lot of it because it will be in the old generation, but here
the GC has to look at every element of the priority queue. We should make
a benchmark with a long run queue and see if that's an issue.
* `promoteInRunQueue`: it would be a shame to lose this, but as long as
we're sure that #3838 hasn't regressed it should be ok.
* could we have some more docs on the scheduler functions,
`capPassUpdate` etc. please?
* Looks like we should do `annulTSO` in a better way. These fields
should be empty normally, set when a thread is blocked, and unset again
when the thread is unblocked.
* I don't see why `sched_mutex` is needed in `setTickets` and co. Could
you explain?
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7606#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list