From: Ingo Molnar <mingo@elte.hu>
To: Mark_H_Johnson@raytheon.com
Cc: Andrew Morton <akpm@osdl.org>, Bill Huey <bhuey@lnxw.com>,
Dipankar Sarma <dipankar@in.ibm.com>,
Adam Heath <doogie@debian.org>,
Daniel Walker <dwalker@mvista.com>, "K.R. Foley" <kr@cybsft.com>,
linux-kernel@vger.kernel.org,
Lorenzo Allegrucci <l_allegrucci@yahoo.it>,
Lee Revell <rlrevell@joe-job.com>,
Rui Nuno Capela <rncbc@rncbc.org>
Subject: Re: [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U1
Date: Thu, 14 Oct 2004 21:48:54 +0200 [thread overview]
Message-ID: <20041014194854.GA14763@elte.hu> (raw)
In-Reply-To: <OFF6785669.51B69427-ON86256F2D.0066DF1F@raytheon.com>
* Mark_H_Johnson@raytheon.com <Mark_H_Johnson@raytheon.com> wrote:
> >the overhead we can try to optimize later on. What problems do you see
> >with setting priorities on those IRQs?
>
> Perhaps I am old fashioned, but in building a real time system, I
> consider hardware interrupt processing as something that is always at
> a higher priority than real time tasks. [...]
this is what i believe you'll ultimately get under PREEMPT_REALTIME:
instant execution of the hardware interrupt thread! Just give it a
higher RT priority than any of the existing tasks in the system:
chrt -f -p 99 `pidof "IRQ 9"`
it is only a couple of microseconds to switch over from the current task
to the IRQ handling thread.
the only difference to a 'direct' interrupt is that it is you who
determines the policy and the priority of interrupt handling.
with direct interrupts there's no choice - a hardware interrupt has the
highest priority. In fact there's not even any way to prioritize
hardware interrupts relative to each other.
> [...] In general that is not a problem because hardware interrupt
> processing should do just enough to keep the hardware happy and
> nothing more. I have enough spare CPU cycles within each frame to
> account for [could be a large number of] interrupts that follow that
> approach. Unthreaded IRQ's preserves that relationship.
>
> However, with the threaded IRQ's, a real time program (e.g.,
> latencytest) can request a priority higher than IRQ processing -
> causing problems interfacing with devices. At a minimum, the default
> priority of IRQ's should be some real time value so that nice -20 jobs
> won't bother them either. A possibility that comes to mind is to
> schedule IRQ's at a range higher than available to all real time
> application tasks. I'll mention another possibility below as well.
we could increase the RT priority range perhaps, and only allow IRQ
threads to venture into that range. But, this is really pushing a piece
of policy into the kernel. RT tasks interfering with interrupt threads
is an application level problem: priorities have to be properly set up
between RT applications anyway.
> In the systems I have to deal with, I do not have a clear criteria
> to set priorities of interrupts relative to each other. For example, I
> have a real time simulation system using the following devices:
> - occasional disk access to simulate disk I/O
> - real time network traffic
> - real time delivery of interrupts from a PCI timer card and APIC timers
> - real time interrupts from a shared memory interface
> The priorities of real time tasks are basically assigned based on the
> rate of execution. 80 Hz tasks run at a higher priority than 60 Hz, 60 Hz >
> 40 Hz, and so on. A number of tasks can access each device.
if you dont know the relative priority and dont want to allow (non-RT)
userspace starving of IRQ processing then you can make all of them
SCHED_FIFO priority 99.
> As noted above, I can live with a system where I can guarantee that
> all the IRQ processing has higher priority than all the real time
> tasks.
what might make sense is to extend SELinux to allow partitioning of the
priority space. Allow 'normal' applications only SCHED_FIFO range 1-90,
and have 91-99 for IRQ threads, or something like that. I dont think
this priority scheme should be part of the kernel proper - it would be
an inflexible feature. But ... i have no strong feelings in either
direction.
> It would be "better" if the priority of the hardware interrupts
> somehow inherited the priority (absolute or relative to other IRQ's)
> of the task making the request. So in that way, a 40 Hz task making a
> network transfer would somehow boost the priority of the network
> interface until that transfer was complete. It would also be good if
> the queue of pending transfers was reordered by RT priority, but I
> don't see that as an easy thing to implement currently in Linux (but I
> can ask... :-) ).
unfortunately there's no 1:1 relationship between 'work' and
'completion' activies so no good mapping from tasks to interrupts. Think
about a SCHED_OTHER and a SCHED_FIFO task dirtying the same page and it
getting flushed out to disk by pdflush. Whose priority should the disk
interrupt inherit, if anything?
> Needless to say, if you implemented priority inheritance, when the 40
> Hz task is not doing network transfers, I would just as soon prefer
> that other network operations (say from a 2 Hz tasks) does not get a
> priority boost above a 20 Hz task accessing another device.
in reality it seems that most of the contention wrt. networks is on the
queueing level, not on the CPU use level. So the solution should rather
be on the 'jump the queue and get xmit-ed right now' level - i.e. the
use of priority-aware TCP/IP QoS features. They do not really need
priority inheritance for the hardware interrupt. (especially considering
that most network processing happens in softirq context, which is even
more anonymous than a hardirq handler.)
Ingo
next prev parent reply other threads:[~2004-10-14 19:53 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-10-14 19:13 [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U1 Mark_H_Johnson
2004-10-14 19:46 ` Bill Huey
2004-10-14 19:48 ` Ingo Molnar [this message]
2004-10-14 21:52 ` Esben Nielsen
2004-10-15 14:52 ` Timothy Miller
-- strict thread matches above, loose matches on Subject: below --
2004-11-13 23:02 William Wolf
2004-10-14 21:08 ` Lee Revell
2004-10-14 22:26 ` William Wolf
2004-10-14 22:24 Mark_H_Johnson
2004-10-14 17:06 Mark_H_Johnson
2004-10-14 18:24 ` Ingo Molnar
2004-10-14 19:02 ` Ingo Molnar
2004-10-14 20:26 ` Bill Huey
2004-10-14 20:32 ` Bill Huey
2004-10-11 18:23 [patch] CONFIG_PREEMPT_REALTIME, 'Fully Preemptible Kernel', VP-2.6.9-rc4-mm1-T4 Mark_H_Johnson
2004-10-11 21:59 ` [patch] VP-2.6.9-rc4-mm1-T5 Ingo Molnar
2004-10-12 9:15 ` [patch] VP-2.6.9-rc4-mm1-T6 Ingo Molnar
2004-10-12 12:33 ` Ingo Molnar
2004-10-12 19:54 ` [patch] VP-2.6.9-rc4-mm1-T8 Ingo Molnar
2004-10-13 6:15 ` [patch] VP-2.6.9-rc4-mm1-T9 Ingo Molnar
2004-10-14 0:24 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U0 Ingo Molnar
2004-10-14 14:31 ` [patch] Real-Time Preemption, -VP-2.6.9-rc4-mm1-U1 Ingo Molnar
2004-10-14 17:34 ` Adam Heath
2004-10-14 22:16 ` Adam Heath
2004-10-14 22:24 ` Ingo Molnar
2004-10-14 19:42 ` Daniel Walker
2004-10-14 19:57 ` Ingo Molnar
2004-10-14 20:34 ` Daniel Walker
[not found] ` <200410142216.23572.l_allegrucci@yahoo.it>
2004-10-14 20:21 ` Lee Revell
2004-10-14 20:28 ` Lorenzo Allegrucci
2004-10-14 20:39 ` K.R. Foley
2004-10-14 22:52 ` Radoslaw Szkodzinski
2004-10-15 11:22 ` Florian Schmidt
2004-10-15 11:44 ` Ingo Molnar
2004-10-15 12:25 ` Florian Schmidt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20041014194854.GA14763@elte.hu \
--to=mingo@elte.hu \
--cc=Mark_H_Johnson@raytheon.com \
--cc=akpm@osdl.org \
--cc=bhuey@lnxw.com \
--cc=dipankar@in.ibm.com \
--cc=doogie@debian.org \
--cc=dwalker@mvista.com \
--cc=kr@cybsft.com \
--cc=l_allegrucci@yahoo.it \
--cc=linux-kernel@vger.kernel.org \
--cc=rlrevell@joe-job.com \
--cc=rncbc@rncbc.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.