On Tue, May 18, 2010 at 02:20:17PM -0400, Jeff Moyer wrote:
This comparision will also might break some logic in select_queue() where
we wait for a queue/group to get busy even if queue's time slice has
expired.
********************************************************************
if (cfq_slice_used(cfqq) && !cfq_cfqq_must_dispatch(cfqq)) {
/*
* If slice had not expired at the completion of last
* request
* we might not have turned on wait_busy flag. Don't
* expire
* the queue yet. Allow the group to get backlogged.
*
* The very fact that we have used the slice, that means
* we
* have been idling all along on this queue and it should
* be
* ok to wait for this request to complete.
*/
if (cfqq->cfqg->nr_cfqq == 1 && RB_EMPTY_ROOT(&cfqq->sort_list)
&& cfqq->dispatched && cfq_should_idle(cfqd, cfqq)) {
cfqq = NULL;
goto keep_queue;
}
*************************************************************************
With this change, now above condition will never be true as
cfq_should_idle() will always return false as slice has already expired.
And that will affect group loosing its fair share.
So I guess we can define new functions to check more conditions instead of
putting it in cfq_should_idle()
Vivek
--