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

Vai alla navigazione Vai alla ricerca
m
(inserito template versioni compatibili, revisionata.)
 
(13 versioni intermedie di 6 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Tutte le versioni di Debian}}
{{Old}}
= 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).  


Questo permette di tenere in esecuzione applicazioni a bassa latenza, senza il rischio che altre applicazioni non-realtime possano disturbarle. Si capisce come questa modalità sia importantissima nelle applicazioni audio professionali (ad esempio una sessione di registrazione non verrà mai interrotta anche se molte applicazioni non realtime saturano la CPU!).
Questo permette di tenere in esecuzione applicazioni a bassa latenza, senza il rischio che altre applicazioni non-realtime possano disturbarle. Si capisce come questa modalità sia importantissima nelle applicazioni audio professionali (ad esempio una sessione di registrazione non verrà mai interrotta anche se molte applicazioni non realtime saturano la CPU!).
Riga 77: Riga 76:
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 84: Riga 82:
Fortunatamente la versione di PAM in Debian Etch, pur essendo una 0.79, include la già questa patch. Per la [[oldstable]] Sarge la patch deve essere applicata manualmente (vedi dopo).
Fortunatamente la versione di PAM in Debian Etch, pur essendo una 0.79, include la già questa patch. Per la [[oldstable]] Sarge la patch deve essere applicata manualmente (vedi dopo).


Quindi l'unica cosa da fare in Debian per abilitare il gruppo '''<code>audio</code>''' all'esecuzione di processi in modalità realtime è aggiungere al file <code>/etc/security/limits.con</code> le seguenti righe:
Quindi l'unica cosa da fare in Debian per abilitare il gruppo '''<code>audio</code>''' all'esecuzione di processi in modalità realtime è aggiungere al file <code>/etc/security/limits.conf</code> le seguenti righe:


  @audio          -      nice            -10
  @audio          -      nice            -10
Riga 101: Riga 99:
  (1: Operation not permitted)
  (1: Operation not permitted)


'''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 <code>libpam-modules</code> 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 128:
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 135:
Happy Debian!
Happy Debian!


= Links =
== Links ==


* http://www.emillo.net/home
* http://www.emillo.net/home
Riga 144: Riga 142:
* [http://demudi.agnula.org/wiki/Low-latencyKernelBuildingHowto Low-latency Kernel Building How-to]
* [http://demudi.agnula.org/wiki/Low-latencyKernelBuildingHowto Low-latency Kernel Building How-to]
* [http://alsa.opensrc.org/RealtimeKernelAndPAM Alsa Wiki: Realtime Kernel And PAM]
* [http://alsa.opensrc.org/RealtimeKernelAndPAM Alsa Wiki: Realtime Kernel And PAM]
----
Autore: [[Utente:TheNoise|~ The Noise]]
[[Categoria:Kernel]]
[[Categoria:Audio]]
3 581

contributi

Menu di navigazione