From: Jonathan W. <jw...@ph...> - 2007-11-20 04:28:00
|
Hi Rich > I started exploring real-time priority settings because I was experiencing > xruns in pd about every second on average. After some testing, I see that > it isn't jackd that is causing the xruns (qjackctl registers none, maybe 1 > or 2 after a couple hours), but pd's real-time scheduling. So, I'll have to > take that discussion to the pd mailing list Hmm, possibly yes. It would seem that maybe jackd is in fact operating correctly for you. > but briefly, running chrt on pd makes all the xruns go away. Yet > according to what your telling me, this is probably making pd unstable. I don't run pd so I have no idea how its threads are structured. I would expect that pd has one RT thread for realtime audio processing and several others which don't run RT (or if they do, do so at lower priorities). The way pd's threads interact - and which should be RT - is certainly something best answered on the pd lists. Pieter's comment was about jackd. Pd probably structures its threads in an entirely different way so Pieter's comments don't necessarily carry across to pd. To get a feel for pd's threads and their relative priorities, something like ps -eLo pid,user,cmd,class,rtprio | grep pd would be a good starting point. > I alse have some questions concerning the rtirq script, since it doesn't > come with much documentation: > 1) How do you get it to run at boot time (on debian)? I have placed > rtirq.conf in /etc/sysconfig and rtirq.sh in /etc/init.d, but it doesn't run > by doing this alone. I don't run debian or rtirq so what follows are educated guesses only. I suspect that your system has directories named either /etc/rcX.d/ or /etc/rc.d/rcX.d/, where X is one of the numbers from 0 to 6 (or there abouts). While /etc/init.d holds all the init scripts, the ones which are run at a given run level are those which are in these rcX.d/ directories. If you look in the rcX.d/ directories you'll see a bunch of symlinks which link to the appropriate scripts in init.d/. Symlinks starting with "S" are run at startup, those starting with "K" are run during shutdown. They are run in alphabetical order, with a two-digit number immediately after the first letter usually being used to force the order. To make rtirq.sh run at boot in a given runlevel, you need to create an appropriate symlink in that runlevel's rcX.d/ directory. You possibly want to do this near the end of the boot process, so find an unused number around 90 or there abouts and then create a symlink: ln -s /etc/init.d/rtirq.sh S90-rtirq Putting this in rc2.d/, rc3.d/, rc4.d/ and rc5.d/ will possibly cover you for all runlevels you're likely to use. If you want to cut down your work, find the default runlevel by doing grep initdefault /etc/inittab and look for the number after the first ":". If this is 4 for example, you need to put the symlink in rc4.d/. Having said all taht, this is a bit of a hassle to be honest; IMHO it's easier to just put a call to /etc/init.d/rtirq.sh in the rc.local script which is usually in /etc/rc.d/. > 2) is there any specific reason why i8042 or usb are in the list of things > to prioritize? It looks like i08042 is the keyboard/mouse irq and the > problem with usb for me is that my video card is on the same irq. Not sure - I don't use rtirq and have never looked at it. The only reason I can think of is that the mouse/keyboard can be safely lowered because it really doesn't matter if a keyboard press takes a few extra milliseconds to be processed. Similarly with USB, if your realtime hardware doesn't use USB then you can safely lower its priority too. Of course this last point isn't valid if you're using USB sound hardware. Regards jonathan |