In een vorig blogje had ik al aangegeven dat ik tegen wat problemen aanliep na het aansluiten van mijn Firewire kaart op mijn notebook met Karmic. Na alles goed ingesteld te hebben wilde de kaart wel opstarten met de FFADO drivers maar hield JACK er al snel mee op na de volgende foutmelding uitgespuugd te hebben:
firewire ERR: wait status < 0! (= -1)
DRIVER NT: could not run driver cycleZal wel aan mijn onboard Firewire chipset liggen dacht ik, maar ik kon me herinneren dat het wel gewerkt had. En dat kan ik dan niet hebben, waarom zou het met Karmic niet werken en met een oudere versie wel? Dan moet ik weten waar dat aan ligt en ga ik net zo lang zoeken totdat ik dat uitgevogeld heb.
Kort daarvoor had ik een draadje gelezen op het Ubuntu Multimedia Production forum over het rtirq pakketje. Met rtirq kun je in combinatie met de realtime kernel bepaalde zogenaamde ‘tasklets’ prioriteren. Een computer werkt met IRQ’s (interrupt requests) en de IRQ’s worden in Linux geregeld door de interrupt handlers. Hier is een mechanisme voor geschreven (een API) waarmee je met deze interrupt handlers kunt praten. Dit mechanisme heet de tasklet API en de koeriertjes heten dus tasklets. Via de tasklets kun je invloed uitoefenen op de interrupt handlers en dat is precies wat het rtirq pakketje doet.
Wil je met rtirq kunnen werken dan moet je eerst weten welke apparaten welke IRQ’s gebruiken. Met het commando cat /proc/interrupts kun je deze gegevens uitlezen. Op mijn notebook zag ik al meteen wat de oorzaak van mijn foutmelding was: de Firewire chipset deelde zijn IRQ met die van de WiFi chipset. Daarom werkte het in 8.04 wel, toen gebruikte ik nog geen draadloos internet. Na een ifdown eth0 werkte de Firewire kaart dan ook naar behoren. Maar nu ik toch al bezig was met het uitzoeken hoe rtirq te gebruiken ben ik er verder ingedoken om te kijken of ik mijn Karmic installatie op mijn notebook nog verder kon optimaliseren.
Volgens het al eerder aangehaalde forumdraadje moet je na installatie van rtirq een verbeterde versie downloaden van de site van Rui Nuno Capela (de auteur van o.a. QjackCtl en Qtractor) en deze kopiëren naar /etc/init.d/rtirq:
cd ~/Desktop
wget -c http://www.rncbc.org/jack/rtirq-20090920.tar.gz
tar zxvf rtirq-20090920.tar.gz
cd rtirq-20090920
sudo cp rtirq.sh /etc/init.d/rtirq
/etc/init.d/ is de directory die je opstartscripts bevatten die gedraaid worden als Ubuntu wordt opgestart, rtirq is dan ook een opstartscript die bepaalde tasklets die belangrijk zijn voor audio productie kan prioriteren. Nu het goeie script is geïnstalleerd kun je de prioritering aanpassen in het bestand /etc/default/rtirq:
sudo gedit /etc/default/rtirqDe regels die aangepast moeten worden zijn de regels die beginnen met RTIRQ_NAME_LIST en RTIRQ_NON_THREADED. Bij mij zien die er nu zo uit:
RTIRQ_NAME_LIST="rtc ohci1394 snd usb i8042"
RTIRQ_NON_THREADED="rtc ohci1394 snd"Sla het bestand op en sluit gedit af. Na een herstart met de realtime kernel zal dit script uitgevoerd worden en de tasklet die hoort bij de ohci1394 kernelmodule (de algemene Linux Firewire driver) keurig prioriteren zodat deze een stuk stabieler zal draaien omdat de module minder gezeur aan zijn kop krijgt, een soort van top-down management als het ware zeg maar eigenlijk in feite. Je kunt het script ook meteen draaien, vermits je de realtime kernel draait:
sudo /etc/init.d/rtirq startKun je ook gelijk zien of je geen foutjes hebt gemaakt, als alles ok is zul je een aantal regels voorbij zien komen die beginnen met “Setting IRQ priorities: start …” en zou je systeem nog stabieler moeten draaien. Ik heb rtirq ook op mijn netbookje geïnstalleerd en daar de onboard geluidskaart voorrang gegeven en dat werkt echt als een speer.
Meer informatie over het prioriteren vind je op de FFADO site.