Hi All, 2011/6/7 Peter Zijlstra <peterz@xxxxxxxxxxxxx>: > On Tue, 2011-06-07 at 11:40 +0200, Armin Steinhoff wrote: >> Hi, >> >> when I read all these confusing statements here ( in german it looks >> like an "Eiertanz") ... I can only say: >> >> - do the basic stuff in a minimal kernel driver >> - use UIO (or VFIO for PCI devices) > > I see no requirement for any of those horrid things to be used. You can > write a full on proper kernel driver, it just cannot set kernel thread > priorities to a sane value (let them all default to 50 or so). > > Then have a user space script or whatever set the kthread priorities. >> and you get clean control about your real-time priorities. >> I think changing the priorities of "interrupt threads" inside the kernel >> could lead to strange race conditions in the kernel. Well, I 100% agree that it must be under full userspace control to be able to set the priorities. But, the kernel default assumption of starting everything at 50 is wrong as well. Imagine the following situation: * Realtime application is running and has threads active in the range of prios 20 - 90. * Now bring up a network device, it immediately starts spamming the system at prio 50 _before_ you have the chance to set it below 20 by means of chrt. * RT behaviour is gone! So, in that case and in many other hotplug cases, you ruin the RT behaviour of the system just by the default-50-is-probably-right-assumption of the kernel. For systems where you have everything under control as a user/system designer, hotplug can also be under control as well. To solve this we have the patchset in use as attached to this mail. It is a newer version of the old set mentioned earlier in this mail thread. The opinion of Thomas about this subject is quite clear so I will not post it as a cleaned up patchset, although I believe we reworked all his previous major remarks about this set. For everyone else who can do something useful with it: go ahead. It should apply to 2.6.33.9-rt31 It creates entries in /proc/irq for you to setup the priorities after booting. (/proc/irq/hirq-prio and /proc/irq/sirq-prio), but also per driver in /proc/irq/<irq-id>/<name>/irqprio In /proc/irq/[hs]irq-prio you can, for example, enter the following text: * at91_udc:22,ohci_hcd:usb1:22,atmel_spi:22,33 This results in: * starting the at91_udc at prio 22 * starting ohci:usb1 also at prio 22 * atmel_spi at 22 * overall default moved from 50 to 33 Kind regards, Remy
Attachment:
irqprio-patches.tar.gz
Description: GNU Zip compressed data