Re: [PATCH RFC] softirq: fix ksoftirq starved

Ingo Molnar
2009-06-20T15:49:21Z

* Lai Jiangshan <laijs@cn.fujitsu.com> wrote:

> Ingo Molnar wrote:
> > * Lai Jiangshan <laijs@cn.fujitsu.com> wrote:
> >
> >> --- a/kernel/sched.c
> >> +++ b/kernel/sched.c
> >> @@ -5307,6 +5307,7 @@ need_resched:
> >> release_kernel_lock(prev);
> >> need_resched_nonpreemptible:
> >>
> >> + schedule_softirq_check();
> >> schedule_debug(prev);
> >
> > hm, this slows down the scheduler fast-path ...
> >
> > Ingo
> >
> >
>
> It's true. But:
>
> The overheads are:
>
> Overhead-A: the function call statement "schedule_softirq_check();"
> It can be gotten rid off by a macro or inline function.
>
> Overhead-B: __get_cpu_var() and the test statement.
>
> Overhead-C: do_softirq()
> In my patch, we test a variable and then call do_softirq() when
> the variable is true. do_softirq() can be called from process
> context or from schedule() or by any other ways, but it must be
> called and avoids starvation in this condition.
> So we need pay this overhead. It is no worse than before.
>
> Is it a critical thing when it slows down the scheduler fast-path
> because of the "Overhead-B"?
>
> Or I misunderstand something?

The thing is that _any_ extra instruction in the scheduler fast-path
should be avoided. I dont think it can be claimed that this problem
can only be solved that way.

Ingo