Old:Low-latency 2.6 kernel per applicazioni audio realtime: differenze tra le versioni

corretta gerarchia titoli
(inserito template versioni compatibili, revisionata.)
(corretta gerarchia titoli)
Riga 1: Riga 1:
{{Versioni compatibili|Tutte le versioni di Debian}}
{{Versioni compatibili|Tutte le versioni di Debian}}
= Introduzione =
== Introduzione ==
Questa è una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.
Questa è una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.


Riga 17: Riga 17:
{{Warningbox|Se non siete a vostro completo agio a compilare e patchare il kernel questa non è la via che fa per voi. Consiglio, in tal caso, di usare un setup per l'audio professionale pronto per l'uso, come la distribuzione [http://64studio.com/ 64 Studio] (disponibile sia per processori 64 bit che per 32bit). Se volete invece informazioni dettagliate su come compilare il kernel alla ''Debian-way'': [[Debian Kernel Howto]]. }}
{{Warningbox|Se non siete a vostro completo agio a compilare e patchare il kernel questa non è la via che fa per voi. Consiglio, in tal caso, di usare un setup per l'audio professionale pronto per l'uso, come la distribuzione [http://64studio.com/ 64 Studio] (disponibile sia per processori 64 bit che per 32bit). Se volete invece informazioni dettagliate su come compilare il kernel alla ''Debian-way'': [[Debian Kernel Howto]]. }}


= Dal kernel stabile all'RC =
== Dal kernel stabile all'RC ==
Consiglio di compilare l'ultima versione stabile del kernel, configurandola e testandola fino ad ottenere una configurazione ben funzionante. Come spunto potete usare [[Esempio configurazione kernel|questa configurazione]]. Nel mio caso ho usato il kernel 2.6.13.2 e la [[Debian Kernel Howto|Debian-way]] di compilare il kernel.  
Consiglio di compilare l'ultima versione stabile del kernel, configurandola e testandola fino ad ottenere una configurazione ben funzionante. Come spunto potete usare [[Esempio configurazione kernel|questa configurazione]]. Nel mio caso ho usato il kernel 2.6.13.2 e la [[Debian Kernel Howto|Debian-way]] di compilare il kernel.  


Riga 36: Riga 36:
Per passare da un kernel stabile ad un RC basta fare un <code>make oldconfig</code> in modo da configurare solo le nuove voci. Questo metodo "a due passi" permette di separare i problemi dovuti ad un eventuale errore di configurazione del kernel stabile dai problemi potenzialmente introdotti dall'uso di un kernel RC non stabile.
Per passare da un kernel stabile ad un RC basta fare un <code>make oldconfig</code> in modo da configurare solo le nuove voci. Questo metodo "a due passi" permette di separare i problemi dovuti ad un eventuale errore di configurazione del kernel stabile dai problemi potenzialmente introdotti dall'uso di un kernel RC non stabile.


= La patch realtime-preemption =
== La patch realtime-preemption ==
L'archivio delle patch realtime-premption si trova a [http://people.redhat.com/mingo/realtime-preempt/ questo indirizzo]. La patch realtime-preemption usata di seguito (a puro titolo esemplificativo) è la 2.6.14-rc5-rt5, voi usate la versione più recente disponibile. La patch è un semplice file di testo. Il suo nome è del tipo <code>patch-''<kernel version>''-''<patch version>''</code>. Bisogna applicare la patch all'esatta versione del kernel indicata dal nome. Di seguito viene usata la [http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.14-rc5-rt5 versione rt5 applicata al kernel 2.6.14-rc5]. Tenete presente che nuove versioni della patch vengono rilasciate giornalmente.
L'archivio delle patch realtime-premption si trova a [http://people.redhat.com/mingo/realtime-preempt/ questo indirizzo]. La patch realtime-preemption usata di seguito (a puro titolo esemplificativo) è la 2.6.14-rc5-rt5, voi usate la versione più recente disponibile. La patch è un semplice file di testo. Il suo nome è del tipo <code>patch-''<kernel version>''-''<patch version>''</code>. Bisogna applicare la patch all'esatta versione del kernel indicata dal nome. Di seguito viene usata la [http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.14-rc5-rt5 versione rt5 applicata al kernel 2.6.14-rc5]. Tenete presente che nuove versioni della patch vengono rilasciate giornalmente.


Riga 59: Riga 59:




= Modalità realtime e realtime scheduling =
== Modalità realtime e realtime scheduling ==


La modalità realtime è un particolare privilegio di esecuzione che un'applicazione può avere . Questa modalità permette ad una applicazione di avere accesso alla CPU con la massima priorità (rispetto ad ogni altra applicazione in attesa) ogni volta che venga richiesto, impedendo inoltre che un'altra applicazione possa a sua volta interrompere l'esecuzione (a meno che non sia anch'essa realtime).  
La modalità realtime è un particolare privilegio di esecuzione che un'applicazione può avere . Questa modalità permette ad una applicazione di avere accesso alla CPU con la massima priorità (rispetto ad ogni altra applicazione in attesa) ogni volta che venga richiesto, impedendo inoltre che un'altra applicazione possa a sua volta interrompere l'esecuzione (a meno che non sia anch'essa realtime).  
Riga 77: Riga 77:
Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.
Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.


== Usare gli rlimits ==
=== Usare gli rlimits ===


È presente nel kernel un nuovo meccanismo più sicuro per concedere i privilegi di realtime chiamato rlimits. Rlimits sostituisce completamente il vecchio e insicuro modulo <code>realtime-lsm</code>.
È presente nel kernel un nuovo meccanismo più sicuro per concedere i privilegi di realtime chiamato rlimits. Rlimits sostituisce completamente il vecchio e insicuro modulo <code>realtime-lsm</code>.
Riga 103: Riga 103:
'''Nota''': Per la [[oldstable]] '''Debian Sarge''' si può installare il pacchetto PAM patchato installando <tt>libpam-modules</tt> da [http://techweb.rfa.org/debrfa/dists/sarge/main/binary-i386/ qui].
'''Nota''': Per la [[oldstable]] '''Debian Sarge''' si può installare il pacchetto PAM patchato installando <tt>libpam-modules</tt> da [http://techweb.rfa.org/debrfa/dists/sarge/main/binary-i386/ qui].


== Il modulo <code>realtime-lsm</code> ==
=== Il modulo <code>realtime-lsm</code> ===
{{Warningbox|Questa procedura è obsoleta e non è più stata verificata da quando Etch è diventata stabile ed ha incluso il supporto nativo per gli rlimits. È lasciata solo per motivi storici e didattici.}}
{{Warningbox|Questa procedura è obsoleta e non è più stata verificata da quando Etch è diventata stabile ed ha incluso il supporto nativo per gli rlimits. È lasciata solo per motivi storici e didattici.}}


Riga 130: Riga 130:
In questi casi bisognerà ricompilare il kernel oppure usare l'approccio tramite rlimits.
In questi casi bisognerà ricompilare il kernel oppure usare l'approccio tramite rlimits.


= Conclusioni =
== Conclusioni ==
Con un kernel così ottimizzato si raggiungono prestazioni realtime davvero spinte. Io ad esempio, con una modestissima SB Audigy 1 posso fare partire jack a 32 frame x 2 periodi @ 48000Hz (latenza 1.3 ms!) in modalità solo playback. Qualche xrun avviene ancora a latenze così basse se si eseguono altre operazioni sulla macchina. Per avere la massima affidabilità in full-duplex utilizzo usualmente jack a 128x2 @ 48000Hz.
Con un kernel così ottimizzato si raggiungono prestazioni realtime davvero spinte. Io ad esempio, con una modestissima SB Audigy 1 posso fare partire jack a 32 frame x 2 periodi @ 48000Hz (latenza 1.3 ms!) in modalità solo playback. Qualche xrun avviene ancora a latenze così basse se si eseguono altre operazioni sulla macchina. Per avere la massima affidabilità in full-duplex utilizzo usualmente jack a 128x2 @ 48000Hz.


Riga 137: Riga 137:
Happy Debian!
Happy Debian!


= Links =
== Links ==


* http://www.emillo.net/home
* http://www.emillo.net/home
1 508

contributi