On Mon, Aug 8, 2011 at 8:25 PM, Jonathan Neuschäfer <j.neuschaefer@gmx.net> wrote:
On Sat, Aug 06, 2011 at 12:31:21PM +0530, Rajat Sharma wrote:
Hi All,
What is the difference between io_schedule() and schedule(), is io_schedule() more restrictive to shedule only I/O bound processes or it just favours I/O bound processes. Any documentation link would be great help.
Have you even looked at the source code?
From kernel/sched.c +5721: /* * This task is about to go to sleep on IO. Increment rq->nr_iowait so * that process accounting knows that this is a task in IO wait state. */ void __sched io_schedule(void) { struct rq *rq = raw_rq();
delayacct_blkio_start(); atomic_inc(&rq->nr_iowait); blk_flush_plug(current); current->in_iowait = 1; schedule(); current->in_iowait = 0; atomic_dec(&rq->nr_iowait); delayacct_blkio_end(); } EXPORT_SYMBOL(io_schedule);
HTH, Jonathan Neuschäfer
of course I looked at the source (obvious first step) before asking question and further following tsk->in_iowait, it seems it is just needed for accounting purpose. if (tsk->in_iowait) { se->statistics.iowait_sum += delta; se->statistics.iowait_count++; trace_sched_stat_iowait(tsk, delta); } Wanted to be sure of "is that it all about"? or I am missing something here? -Rajat