Discussion:
difference between io_schedule() and schedule()
Rajat Sharma
2011-08-06 07:01:21 UTC
Permalink
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.

Thanks,
Rajat
Jonathan Neuschäfer
2011-08-08 14:55:35 UTC
Permalink
Post by Rajat Sharma
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
Rajat Sharma
2011-08-09 13:30:46 UTC
Permalink
On Mon, Aug 8, 2011 at 8:25 PM, Jonathan Neuschäfer
Post by Jonathan Neuschäfer
Post by Rajat Sharma
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?
/*
 * 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
Mulyadi Santosa
2011-08-10 07:37:26 UTC
Permalink
Hi Rajat...
Post by Rajat Sharma
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?
I got a feeling that the main show is:
blk_flush_plug(current);
that name somehow indicates it is "forcing" read/write to happen,
either real soon or at the earliest moment possible...
--
regards,

Mulyadi Santosa
Freelance Linux trainer and consultant

blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com
Rajat Sharma
2011-08-10 08:55:45 UTC
Permalink
On Wed, Aug 10, 2011 at 1:07 PM, Mulyadi Santosa
Post by Mulyadi Santosa
Hi Rajat...
Post by Rajat Sharma
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?
      blk_flush_plug(current);
that name somehow indicates it is "forcing" read/write to happen,
either real soon or at the earliest moment possible...
--
regards,
Mulyadi Santosa
Freelance Linux trainer and consultant
blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com
Ah, just missed that, thats actually countable difference. Thanks for
the pointer :)

Loading...