lkml.org 
[lkml]   [2006]   [Mar]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: can I bring Linux down by running "renice -20 cpu_intensive_process"?
    From
    Date
    Mike Galbraith <efault@gmx.de> writes:

    > On Thu, 2006-03-16 at 22:51 +0000, Måns Rullgård wrote:
    >> Bill Davidsen <davidsen@tmr.com> writes:
    >>
    >> > Måns Rullgård wrote:
    >> >> Maybe extending sysrq+n to lower the priority of -20 tasks would be a
    >> >> good idea.
    >> >>
    >> > If it runs before the keyboard thread it doesn't matter...
    >>
    >> Of course not, but that's not generally the case.
    >>
    >> > But why should this hang anything, when there should be enough i/o
    >> > to get out of the user process. There's a good fix for this, don't
    >> > give this guy root any more ;-)
    >>
    >> Ever heard of bugs? Anyone developing a program can make a mistake.
    >> If the program runs with realtime scheduling a bug that makes it enter
    >> an infinite loop (or do something else that hogs the CPU) can be
    >> difficult to find since it rather efficiently locks you out.
    >
    > Given that someone has already determined that installing a safety valve
    > for RT tasks was worth while, and given that there is practically no
    > difference between a nice -20 and the lowest RT priority, seems to me
    > that extending that safety valve to cover reniced tasks is the
    > obviously-correct thing to do. I think you should submit a patch.

    Something like this ought to do it (untested):

    --- kernel/sched.c.orig 2006-02-09 23:41:57.000000000 +0000
    +++ kernel/sched.c 2006-03-17 22:16:46.257298014 +0000
    @@ -5681,21 +5681,22 @@

    read_lock_irq(&tasklist_lock);
    for_each_process (p) {
    - if (!rt_task(p))
    - continue;
    + if (rt_task(p)) {
    + rq = task_rq_lock(p, &flags);

    - rq = task_rq_lock(p, &flags);
    -
    - array = p->array;
    - if (array)
    - deactivate_task(p, task_rq(p));
    - __setscheduler(p, SCHED_NORMAL, 0);
    - if (array) {
    - __activate_task(p, task_rq(p));
    - resched_task(rq->curr);
    + array = p->array;
    + if (array)
    + deactivate_task(p, task_rq(p));
    + __setscheduler(p, SCHED_NORMAL, 0);
    + if (array) {
    + __activate_task(p, task_rq(p));
    + resched_task(rq->curr);
    + }
    +
    + task_rq_unlock(rq, &flags);
    + } else if (TASK_NICE(p) == -20) {
    + set_user_nice(p, 0);
    }
    -
    - task_rq_unlock(rq, &flags);
    }
    read_unlock_irq(&tasklist_lock);
    }

    --
    Måns Rullgård
    mru@inprovide.com
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-03-17 23:25    [W:0.027 / U:29.768 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site