Re: [LAD] rtirq script is broken with 2.6.31

From: Robin Gareus <robin@email-addr-hidden>
Date: Fri Aug 07 2009 - 21:54:41 EEST

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Rui Nuno Capela wrote:
> Robin Gareus wrote:
>> Rui Nuno Capela wrote:
>>> Rui Nuno Capela wrote:
>>>> Robin Gareus wrote:
>>>>> Rui Nuno Capela wrote:
>>>>>
>>>>>> this issue on 2.6.31-rt has been already reported privately and i'll get
>>>>>> to it as soon i get back home from vacation. meanwhile, it really looks
>>>>>> like a regex trickery is all that's needed,
>>>>> I'm not so sure, Since 2.6.31 it is also possible to raise the priority
>>>>> not by IRQ number but by /device-driver/.
>>>>>
>>>>> ie:
>>>>> PID CLS RTPRIO NI PRI %CPU STAT COMMAND
>>>>> 9092 FF 89 - 129 0.4 S< irq/17-HDA Inte
>>>>> 1447 FF 50 - 90 0.1 S< irq/17-uhci_hcd
>>>>> 9093 FF 50 - 90 0.0 S< irq/17-ohci1394
>>>>>
>>>>> ..but of course that's also just regexp trickery ;)
>>>>>
>>>>> Note that the kernel limits the IRQ process name to 15 chars.
>>>>> "HDA Inte" won't read "HDA Intel" even when using `ps -w..`
>>>>>
>>>>> But '/proc/interrupts' says:
>>>>> 17: 17215454 873204 IO-APIC-fasteoi uhci_hcd:usb3, HDA Intel,
>>>>> ohci1394
>>>>>
>>>>>> keeping in mind that
>>>>>> backward compability with pre-2.6.31-rt kernels is in order (eg. i do
>>>>>> still run on 2.56.29.5-rt22 for which the current rtirq script is
>>>>>> perfect, of course)
>>>>>> as a quick suggestion, try this for instance (re. line 120):
>>>>>> PIDS=`ps -eo pid,comm | egrep "(IRQ.${IRQ}|irq\/${IRQ}\-.+)\$" | awk
>>>>>> '{print $1}'`
>>>>> That works, but raises all devices on a given IRQ-line and results in:
>>>>> PID CLS RTPRIO NI PRI %CPU STAT COMMAND
>>>>> 1447 FF 88 - 128 0.1 S< irq/17-uhci_hcd
>>>>> 9092 FF 87 - 127 0.4 S< irq/17-HDA Inte
>>>>> 9093 FF 86 - 126 0.0 S< irq/17-ohci1394
>>>>>
>>>> which is the exact and old behavior of rtirq for kernel-rt < 2.6.31-rt.
>>>>
>>>> this time however it looks that you can actually improve things when
>>>> several device drivers are hanging on a irq line. that is, one can tune
>>>> up the one and only the one actually intended (eg. "snd" => "irq/17-HDA
>>>> Inte" and nothing else)
>>>>
>>>> not just a simple regex oneliner anymore and i'm afraid it might need a
>>>> deeper retouch...
>>>>
>>> not so deeper, more than a simple regex fix but some bash trickery now
>>> added: please, try the attached patch (rtirq-20090807-1.diff) and tell ;)
>>
>> Almost - it fails because "HDA Inte" has a space in it. So
>> ${NAME2} is only "HDA" instead of "HDA Intel".
>>
>> I've added quotation marks around ${NAME2} to the rtirq_exec_num and
>> rtirq_exec_name function calls (line 167 and line 231) and then it works.
>>
>> However, there's still an issue with RTIRQ_TRAIL. If one wants to raise
>> two drivers on the same IRQ line. For example
>> "HDA Intel" and "ohci1394" but not uhci_hcd:usb3 (all on IRQ 17 here)
>> rtirq will only do the first device and skip the remaining.
>>
>> Thanks for your help, it must be fun to code on the beach ;)
>>
>
> beach support is fine ;)
>
> here goes another one (rtirq-20090807-2.diff), with your quotation marks
> in place and RTIRQ_TRAIL issue probably tamed ... please try as i don't
> have the right kernel to make proper testing.

Yes, you tamed it. This one is a winner!

One last thing: For `rtirq status`
please add 'irq\/' to the regexp list in line 291:
 | egrep '(^[[:blank:]]*PID|IRQ|irq\/|softirq)' \

I'm not interested in seeing softirq's there but if you want to include
them for completeness: the pattern is /sirq\-/ for 2.6.29 and 2.6.31.

BTW. the awk script to add extra info from /proc/interrupts to the
output of `ps` for `rtirq status` does nothing on 2.6.31. OTOH it's not
needed there since the process-name includes this information (at least
the first 15chars of it).

For <= 2.6.29-rt replace PIC with (PIC|MSI) in the gsub-regexp when
parsing IRQSplit[2]. "PCI-MSI-edge" is a also a legal value.

And last but not least: Some distros (here: 64studio on a netbook)
install mawk instead of gawk. mawk-1.3.3 does not seem to support the
POSIX regexp pattern /[:blank:]/ . I've replaced it with /( |\t)/ and
it works for 2.6.29.1-multimedia with either mawk or gawk.

> byee--off to snorkeling now 8)
..and you're probably just having at BBQ close to the beach now.
I'm getting jealous.
robin

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkp8eHEACgkQeVUk8U+VK0KwSQCgwVWzj1H6nrqS8SX4Oh6EwdRJ
nMEAoJhPbuLtitZMB8VagegiRTwH6/Lt
=zxQY
-----END PGP SIGNATURE-----
_______________________________________________
Linux-audio-dev mailing list
Linux-audio-dev@email-addr-hidden
http://lists.linuxaudio.org/mailman/listinfo/linux-audio-dev
Received on Sat Aug 8 00:15:06 2009

This archive was generated by hypermail 2.1.8 : Sat Aug 08 2009 - 00:15:07 EEST