Messages in this thread | | | Date | Fri, 30 Jul 2004 00:26:57 +0200 | From | Ingo Molnar <> | Subject | [patch] voluntary-preempt-2.6.8-rc2-M5 |
| |
i've uploaded the latest version of the voluntary-preempt patch:
http://redhat.com/~mingo/voluntary-preempt/voluntary-preempt-2.6.8-rc2-M5
the biggest change is that i've integrated the irq threads code from Scott Wood. I've done a number of usability enhancements:
added a new mechanism for finegrained configuration of threadedness / nonthreadedness at the handler level: there are new:
/proc/irq/<N>/<handler>/threaded
entries that control this behavior. Writing 0 to such an entry makes that particular handler 'directly executed', writing 1 to it turns it back to be handled by its own IRQ kernel thread.
E.g. the following command changes the serial line interrupt back to non-threaded:
echo 0 > /proc/irq/*/serial/threaded
the IRQ threads show up at low PID numbers (typically between 100 and 200) and their RT priority can be set via the 'chrt' utility (part of schedutils). E.g. setting IRQ 10's irq thread priority back to the non-RT SCHED_OTHER class can be done via:
chrt --other --pid 0 `pidof 'IRQ 10'`
and to change IRQ 4's thread to SCHED_FIFO and the highest RT priority:
chrt --fifo --pid 99 `pidof 'IRQ 4'`
to get good audio latencies i'd suggest to set the the audio driver's and the RT-clock driver's IRQ handler to be non-threaded, and to set jackd's RT priority to higher than 50 (which is the default of the IRQ threads).
But it would also be interesting to see how the maximum latencies look like if both the RT-clock and the audio handlers are threaded, and the two affected IRQ threads are set to SCHED_FIFO 99 priority - they should preempt everything. The latency increase compared to the 'direct' setup should show us the real-life overhead of hardirq redirection.
the patch also changes the way the IDE latencies are avoided: based on suggestions from Jens the latency-critical portion of the driver is now done without holding ide_lock - and this makes the driver preemptable if the handler is running in a thread.
if booting with voluntary-preempt=2/0/1 (the default is 3) then all interrupts default to being non-threaded. Note that the /proc entries can be used to turn threadedness back on even in this case - this can be used to debug problematic drivers.
i made the irq-threads code work on SMP too: the IRQ threads now bind themselves according to the value of /proc/irq/<N>/smp_affinity and change the binding of that value is modified. IRQ threads only migrate when it's safe - there will be no migration to another CPU while executing a hardirq.
Ingo - 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/
| |