2006-05-16 19:31:52

by fritzsch

[permalink] [raw]
Subject: running only 1 process on 1 cpu

Hallo,
i have one process, which i want to run on a cpu (> CPU0). The special
thing here is, that this process is very time critical and should NOT
be interrupted by anything (cpusets/cpus_allowed would not be enough).
(the process is not doing any system calls and is communicating to the
world by shared memory).
so i wanted to run the process on a CPU1, when all irqs are disabled and
so the process could not be interrupted.


I tried very simple to

(1) migrate all processes to CPU0 by cpu_set_allowed
(2) gave my process (running on CPU1) the highest priority
(3) run schedule and make sure that the irqs are disables
(disable_irqs())
...

but well, it didnt work ...
actually i wanted to ask if this could work and if there is maybe sth
like this already somewhere implemented (or easily adaptable).
thx
patrick




2006-05-16 19:49:09

by Jesper Juhl

[permalink] [raw]
Subject: Re: running only 1 process on 1 cpu

On 16/05/06, fritzsch <[email protected]> wrote:
> Hallo,
> i have one process, which i want to run on a cpu (> CPU0). The special
> thing here is, that this process is very time critical and should NOT
> be interrupted by anything (cpusets/cpus_allowed would not be enough).
> (the process is not doing any system calls and is communicating to the
> world by shared memory).
> so i wanted to run the process on a CPU1, when all irqs are disabled and
> so the process could not be interrupted.
>
>
> I tried very simple to
>
> (1) migrate all processes to CPU0 by cpu_set_allowed
> (2) gave my process (running on CPU1) the highest priority
> (3) run schedule and make sure that the irqs are disables
> (disable_irqs())
> ...
>

Some ideas :

- Play with CPU affinity : "man sched_setaffinity" / "man sched_getaffinity" [1]
- Try a RealTime patched kernel (Ingo's -rt patchset) and set the
processes nice level to least nice & RT priority to the max [2]
- Implement the code as a kernel module if it really is that time critical


[1] http://www.linuxjournal.com/article/6799
[2] http://www.captain.at/howto-linux-real-time-patch.php

--
Jesper Juhl <[email protected]>
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please http://www.expita.com/nomime.html

2006-05-17 07:45:06

by Andreas Mohr

[permalink] [raw]
Subject: Re: running only 1 process on 1 cpu

Hi,

On Tue, May 16, 2006 at 09:31:42PM +0200, fritzsch wrote:
> actually i wanted to ask if this could work and if there is maybe sth
> like this already somewhere implemented (or easily adaptable).
Implementing exactly this feature (a whole cpu dedicated to one process only
for extremely ambitious rt tasks) has been mentioned shortly during some
scheduler discussion here at most 4 weeks ago, but I don't recall the exact
thread.

Some Google keywords that might help:
lkml cpu exclusive scheduler rt latency reserve

Andreas Mohr