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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
 
(25 versioni intermedie di 7 utenti non mostrate)
Riga 1: Riga 1:
__NOTOC__
{{Old}}
{|style="-moz-border-radius: 0.5em; width:100%; margin-top:+.7em; background-color:#F9F9FF; border: 1px solid #ccc"
== Introduzione ==
|style="width:50%;color:#000"|
Questa è una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.
{| style="width:280px;border:solid 0px;background:none"
|-
| style="width:280px;text-align:center; white-space: nowrap; color:#000" |
<h1 style="font-size: 162%; border: none; margin: 0; padding:.1em; color:#000">
Indice delle Guide
</h1>
<div style="top: +0.2em; font-size: 100%">
Di seguito troverete l''''indice completo''' delle guide contenute su [[Guide@Debianizzati.Org:About|Wiki]].


Potete anche navigare tra le guide scegliendo tra le '''[[Lista Categorie|categorie]]''' qua a destra.
Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:
</div>
|-
|}
<!-- ----------Portals Follow----------------------------- -->
|style="width:11%;font-size:95%;color:#000"|
* [[:Categoria:Apt|Apt]]
* [[:Categoria:Desktop|Desktop]]
* [[:Categoria:Hardware|Hardware]]
* [[:Categoria:Kernel|Kernel]]
|style="width:11%;font-size:95%;color:#000"|
* [[:Categoria:Laptop|Laptop]]
* [[:Categoria:Networking|Networking]]
* [[:Categoria:Shell|Shell]]
* [[:Categoria:Server|Server]]
|style="width:13%;font-size:95%;color:#000"|
* [[:Categoria:Sicurezza|Sicurezza]]
* [[:Categoria:Sistema|Sistema]]
* [[:Categoria:Tips&Tricks|Tips&Tricks]]
* '''[[Lista Categorie]]'''
|}


* [http://www.emillo.net/audio_midi emillo.net]


Ci sono '''due passi''' distinti illustrati nella guida: ''il primo'' è patchare un kernel 2.6 con la patch '''realtime-preemption''' di ''Ingo Molnar'' per ottenere un kernel con la più bassa latenza possibile; ''il secondo'' è invece permettere a normali utenti l'esecuzione di applicazioni in modalità realtime.


Questo Wiki - '''[[Guide@Debianizzati.Org:About|Guide@Debianizzati.Org]]''' - vuole essere prima di tutto un punto di raccolta ideale per le conoscenze acquisite dai singoli durante l'uso di '''Debian GNU/Linux''' in ambito casalingo e/o lavorativo, in modo che il sapere di uno diventi quello di tutti.
Il kernel 2.6 ha raggiunto ormai delle prestazioni molto buone per quanto riguarda la latenza (anni luce avanti rispetto al 2.4). Normalmente è dunque sufficiente configurare il sistema per permettere ai normali utenti di eseguire applicazioni realtime (''secondo passo'').


Le guide ritenute meglio scritte e pi� approfondite, dopo un processo di controllo e revisione a cui tutti siete liberi di partecipare, vengono classificate [[:Categoria:Debianized|Debianized]] e contrassegnate dalla [[Debian Swirl]]: http://guide.debianizzati.org/images/swirl.png. Per ulteriori informazioni sul processo di revisione vedere: [[Aiuto:Contents#Evoluzione_delle_guide|Evoluzione delle guide]].
Se invece si vuole, non solo ridurre sotto la soglia (indicativa) dei ~ 5 ms la latenza minima ottenibile, ma soprattutto aumentare notevolmente l'affidabilità del sistema nel rispettare le basse latenze bisogna usare la patch realtime-preemption (''primo passo''). È questo il caso, ad esempio, se si vuole lavorare in full-duplex su diverse tracce in realtime, ''senza correre il rischio di xrun'' (ovvero interruzioni del flusso audio). Oppure se si vuole suonare un sintetizzatore software usando la minima latenza possibile.


Potete trovare un elenco completo delle guide '''Debianized''' in [[:Categoria:Debianized|questa pagina]].
La patch realtime-preemption (per quanto perfettamente usabile) continua ad essere sviluppata incessantemente, e le release sono spesso giornaliere. Il kernel a cui si applica la patch è sempre l'ultimo kernel stabile o, spesso, l'ultimo RC. Nella guida, a puro titolo esemplificativo, mi riferirò ad un kernel e ad una versione di patch specifica, anche se queste versioni diventeranno presto obsolete.  
Segue la lista completa delle guide attualmente presenti:
__TOC__


== Mondo Debian ==
{{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]]. }}
=== Introduzione a Debian ===
* [[L' Universo Debian]]
* [[La struttura della Distribuzione]]


=== Installazione ===
== Dal kernel stabile all'RC ==
* http://guide.debianizzati.org/images/swirl.png [[Guida a Grub]]
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.
* [[Jigdo | '''Jigdo''': Scaricare e Aggiornare le iso di Debian]]
* [[Note sull'installazione di Debian]]


=== Gestione dei Pacchetti ===
Una guida completa sulla configurazione e l'ottimizzazione di un [[kernel vanilla]] (e non solo) per applicazioni audio è la seguente:
* [[Introduzione all' Apt System]]
* [[I repository ed il loro utilizzo]]
* http://guide.debianizzati.org/images/swirl.png [[Pulire Debian]]
* [[Apt-cdrom | '''Apt-cdrom''': aggiunta di cd/dvd nella lista dei repository]]
* [[Apt-file: ricerca all'interno dei pacchetti | '''Apt-file''': ricerca all'interno dei pacchetti]]
* [[Apt-listbugs: come monitorare i bug | '''Apt-listbugs''': come monitorare i bug]]
* [[Apt-zip: aggiornamenti senza una connessione veloce | '''Apt-zip''': aggiornamenti senza una connessione veloce]]
* [[Apt-spy: trovare i mirror pi� veloci | '''Apt-spy''': trovare i mirror pi� veloci]]
* [[APT uso avanzato: mixare releases diverse]]
* http://guide.debianizzati.org/images/swirl.png [[Impedire l' aggiornamento di un pacchetto]]
* [[Aptitude | '''Aptitude''': come amministrare i pacchetti]]


=== Creazione e modifica dei pacchetti ===
* [http://demudi.agnula.info/wiki/Low-latencyKernelBuildingHowto Low-latency Kernel Building Howto].
* http://guide.debianizzati.org/images/swirl.png [[Make-jpkg: Pacchettiziamo Java Sun| '''Make-jpkg''': Pacchettiziamo Java Sun]]
* [[Pacchetti binari e sorgenti]]
* [[Applicare una patch ad un pacchetto Debian]]
* [[Apt-build: ottimizzazione dei pacchetti | '''Apt-build''': ottimizzazione dei pacchetti]]
* [[Dpkg-sig: Firma dei packages .deb |  '''Dpkg-sig''': Firma dei packages .deb]]
* [[Pacchetizzare un tema per Bootsplash]]
* [[Backport da unstable in testing]]
* [[Pbuilder: compilazione in ambienti puliti]]


=== Gestione dei pacchetti Lato Server ===
La patch realtime-preemption più recente si applica solitamente ai kernel RC (Release Candidate). Questo perché Ingo Molnar segue sempre il kernel più recente (quindi usa le RC come base di partenza per la sua patch). Quando viene rilasciato un nuovo kernel stabile Ingo Molnar rilascia pach per il nuovo kernel stabile, ma dopo alcune settimane passa nuovamente a seguire l'ultima RC uscita nel frattempo.
* [[Apt-Proxy: un proxy per i pacchetti Debian| '''Apt-Proxy''': un proxy per i pacchetti Debian]]
* [[Debmirror: creiamo un mirror Debian |'''Debmirror''': creiamo un mirror Debian]]
* [[Creare un Repository Debian]]
* [[Gestione di un repository con debarchiver]]
* [[Usare apt-cacher per creare una cache dei pacchetti usabile in una LAN]]
* [[Dupload per l'upload dei pacchetti Debian]]


==Configurazione Sistema==
Quindi, si hanno due possibilità:
===Kernel===
# compilare l'ultimo kernel stabile con l'ultima patch rilasciata per quel kernel
* http://guide.debianizzati.org/images/swirl.png [[Debian Kernel Howto]]
# compilare l'ultimo kernel rc e usare la versione corrente della pacth.
* [[Esempio configurazione kernel]]
* [[Kernel2.6.10 - Framebuffer - Gensplash Patch]]
* [[Kernel 2.6 su Debian Woody]]
* [[Compilazione Kernel 2.6.11 con Bootsplash]]
* [[Pagina di manuale di module-assistant|Pagina di manuale di '''<tt>module-assistant</tt>''']]
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]
* [[Script: Confronto Configurazioni Kernel]]


===Sistema===
Attualmente, ad esempio, l'ultimo kernel stabile, per il quale sia stata rilasciata la patch realtime preemption è il [ftp://ftp.it.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 2.6.14] (non i successivi 2.6.14.x). Per tale kernel l'ultima patch disponibile è la [http://people.redhat.com/mingo/realtime-preempt/older/patch-2.6.14-rt22 2.6.14-rt22], come si può vedere [http://people.redhat.com/mingo/realtime-preempt/older/ qui].
* [[SysV | Il sistema SysV per la gestione dei Runlevel]]
* [[Udev e Debian]]
* [[Configurare il server X in Debian GNU/Linux]]
* [[Linux Admin Quick Reference]]
* [[Debian: accelerare GTK con Cairo e Glitz]]
* [[Software Raid 1: configurazione e verifiche|'''Software Raid 1''': configurazione e verifiche]]


===Applicazioni Esterne===
Se invece si vuole usare l'[http://people.redhat.com/mingo/realtime-preempt/ ultima patch] realtime-preemption (attualmente 2.6.15-rc5-rt2) bisogna usare anche l'[ftp://ftp.it.kernel.org/pub/linux/kernel/v2.6/testing/ ultimo kernel RC].
* [[Pacchettizzare ed installare Xorg su Debian Sid]]
* [[Installazione Qemu con supporto accelerazione Kqemu]]
* [[ePSXe Emulatore Playstation]]
* [[Installare OpenOffice2 su Debian Etch]]
* [[DVD Backup: xDVDShrink per Debian]]


===Altro===
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.
* [[Dual Boot Debian-Altra distribuzione Linux]]
* [[Dual Boot Linux-Windows|Dual Boot Linux-Windows: usare il bootloader di windows]]
* [[Logging su MySQL]]
* [[Password sicure: la base della sicurezza informatica]]
* [[Script Bash per Avvio e Visualizzazione dati Seti@home]]


===Tips and Tricks===
== La patch realtime-preemption ==
====Bash====
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.
* [[Bash tips]]: un elenco di trucchetti sull'uso interattivo e sullo scripting Bash
* [[Colorare bash]]
* [[Come abilitare il completamento automatico 'avanzato']]
* [[Un logout con schermo pulito]]
* [[Bash Script: Cambiare i permessi ricorsivamente]]
* [[Due simpatici login: welcome2l e linuxlogo]]


====Firefox====
Per applicare la patch basta copiarla in <code>/usr/src</code>, entrare della dir del kernel e lanciare il comando, nel mio esempio:
* [[Firefox: Disattivare la ricerca con il tasto centrale]]
* [[Velocizzare Firefox per la banda larga]]
* [[Il vostro motore di ricerca da Firefox]]
* [[Aggiungere un motore di ricerca al quicksearch di Firefox]]


====Altro====
<pre>$ cat ../patch-2.6.14-rc3-rt2 | patch -p1 -t</pre>
* [[Convertire immagini .nrg in immagini .iso]]
* [[Nautilus: navigare con una sola finestra]]
* [[Associare a Thunderbird il browser preferito]]
* [[Antispam in Evolution con Bogofilter]]
* [[Impostare la lingua italiana nel sistema]]
* [[Impostare  e modificare data e ora]]
* [[Impostare e modificare il layout della tastiera]]
* [[Abilitare_Xinerama | Multi monitor con Xinerama]]
* [[Abilitare ESound con ALSA in Gnome]]
* [[Cambiare il Tema dei Cursori per il Mouse]]
* [[Xfce e shutdown da utente]]
* [[Personalizzare il comportamento delle finestre con Devil's Pie]]
* [[Gimp: rendere un logo trasparente|'''Gimp''': rendere un logo trasparente]]
* [[Eseguire comandi con gli shortcuts di Gnome]]


==Networking==
A questo punto nuovamente un <code>make oldconfg</code> ci permetterà di configurare le voci inserite dalla patch. Assicurarsi di scegliere '''Complete Preemption (Real-Time)''' in:
===Debian Server===
====Condivisione risorse====
* [[Directory shared tra macchine linux (nfs)]]
* [[Condivisione risorse con Samba]]
* [[sshfs | Montare una directory remota con sshfs]]
* [[Unison e la sincronizzazione di directory]]


====Mailing====
<pre>
* [[Mail Server Sicuro con Postfix]]
Processor type and features  --->
  Preemption Mode (Complete Preemption (Real-Time))
</pre>


====Http====
per il resto ho lasciato tutte le altre nuove voci su NO (la maggior parte di esse serve, infatti, per attivare vari strumenti di debug).
* [[Server Web Casalingo]]
* [[LAMP: Linux, Apache, MySQL e PHP]]
* [[XAMPP: Linux, Apache, MySQL e PHP facili]]
* [[Debian MapServer/MapScript]]


===Amministrazione===
Non ci resta che compilare il kernel:
====Gestione Remota/Locale====
* [[Wake On Lan | '''Wake On Lan''' per accendere i propri PC a distanza tramite la LAN]]
* [[Debian e il controllo di servizi e demoni]]
* [[Gestione della banda in Apache]]
* [[Ssh e autenticazione tramite chiavi]]
* [[Inetd e i servizi di rete]]


====Connettivita'====
<pre>$ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image</pre>
* [[Condividere la connessione a internet]]


===Sicurezza===
ed installare il pacchetto, per ulteriori informazioni su questo passaggio: [[Debian Kernel Howto]].
====Firewalling====
* [[Debian e iptables]]
* [[Firewall Builder]]
* [[Parametri a run-time per Netfilter]]


====Monitoraggio & Scanning====
* [[Monitoriamo il Sistema]]
* [[Mrtg: monitoriamo la banda]]
* [[Cacti | Cacti: monitor di rete, per pi computer]]
* [[Munin]]


====Proxy====
== Modalità realtime e realtime scheduling ==
* [[Privoxy: navigazione sicura a prova di spam]]
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).


====Tunneling====
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!).
* [[Openvpn]]


== Hardware ==
D'altro canto, questa modalità pone dei seri problemi di sicurezza dato che un'applicazione potrebbe (a causa di un errore o di un comportamento malevolo) occupare la CPU per un tempo indefinito, senza poter essere interrotta, impedendo dunque la normale applicazione degli altri programmi.
=== Fotocamere digitali e dispositivi di memorizzazione di massa removibili ===
* [[Usare Fotocamere Digitali|Usare Fotocamere Digitali (libgphoto2)]]
* [[Usare Fotocamere Digitali (usb-storage)]]
* [[UsbMount: Gestione automatizzata delle periferiche usb di memorizzazione]]
* [[Debian e iPod]]


=== Modem e periferiche di rete ===
Normalmente, quindi, solo root ha i privilegi per lanciare applicazioni in modalità realtime. Questo è un problema, dato che (ad esempio) Jack e tutte le applicazioni che vi si connettono dovrebbero essere lanciate da root per poter funzionare in modalità realtime, e questo costituirebbe un ancor più grosso problema di sicurezza.


* [[Debian e i Modem ADSL]]
Per risolvere il problema bisogna consentire l'uso della modalità realtime anche a normali utenti ma in maniera "controllata".


==== Modem USB ADSL ====
Il modo più semplice consiste nell'usare gli '''rlimits''', ovvero editare il file <code>/etc/security/limits.conf</code> per consentire ad un utente od ad un gruppo di eseguire applicazioni in modalità realtime. Questo metodo ormai è pienamente supportato da Debian Etch (''stabile'') in poi.
* [[Installare i driver conexant accessrunner]]
* [[Installare i driver eagle-adsl]]
* [[Installare i driver eci-adsl]] ''(stub)''
* [[Installare i driver unicorn (BeWAN)]] ''(stub)''
* [[Modem adsl Telindus ND220]]
* [[Modem adsl Aethra Starmodem]]
* [[Modem adsl Fastrate 100 USB]]


==== Modem Ethernet ====
Un secondo metodo ormai obsoleto consiste nell'usare un modulo del kernel chiamato <code>realtime-lsm</code>. Questa procedura è più lunga e può creare problemi di sicurezza.
* ''Inserire qui eventuali guide su modem ethernet''


==== Modem dial-up 56K ====
Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.
* ''Inserire qui eventuali guide su modem a 56K''


==== Schede di rete Wireless ====
=== Usare gli rlimits ===
* [[Wireless Support | Informazioni sul supporto alle periferiche Wireless]]
È 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>.
* [[Script Bash abilitazione scheda wireless]]
* [[Intel PRO/Wireless 2200BG]]
* [[NdisWrapper | NdisWrapper: Usiamo i driver di Windows per il WLan con GNU/Linux]]


=== Schede Video ===
Gli rlimits sono supportati da PAM dalla versione 0.80, le versioni precedenti richiedono una patch.
* [[Installazione Driver ATI per schede ATI RADEON MOBILITY 9700 SE]]
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).


=== Stampanti ===
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:
==== Stampanti USB ====
* ''Inserire eventuali guide su come far funzionare stampanti con porta USB''


==== Stampanti con porta parallela ====
@audio          -      nice            -10
* [[Introduzione all'installazione di stampanti con porta parallela]]
@audio          -      rtprio          99
@audio          -      memlock        250000


==== Stampanti bluetooth ====
Ovviamente perché le modifiche abbiano effetto si deve rieseguire il login.
* [[Introduzione all'installazione di stampanti bluetooth]]


=== Scanner ===
Potete controllare che gli rlimits siano settati correttamente lanciando jack:
* [[Epson Perfection 2480 photo - usb scanner]]
* ''Inserire qui eventuali altre guide su come far funzionare scanner con Debian''


=== Palmari e cellulari ===
<pre> $ jackd -R -d alsa -S</pre>
* [[Debian e Nokia 7210: uso di gnokii e gestione degli sms]]
* [[UMTS/GPRS PCMCIA card (3g)]]
* [[Usare lcd4linux con un Palm]]


=== Altro hardware ===
In caso di problemi con la modalità realtime si vedranno messaggi del tipo:
* [[I2c e lm-sensors|'''I2c e lm-sensors''': usare i sensori della scheda madre]]
* [[Gestire gli HD: stato di salute, badblocks e ripristino dati|'''Gestire gli HD:''' stato di salute, badblocks e ripristino dati]]


==Portatili==
cannot use real-time scheduling (FIFO at priority 10) [...]
===Laptop Debianizzati===
(1: Operation not permitted)
Troverete di seguito i resoconti d'installazione di Debian su dei portatili:


* [[Debian on an HP nx8220 | Debian on an HP nx8220]]
'''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].
* [[Debian on a presario 2141EU | Compaq Presario 2100 (2141EU)]]
* [[Debian on a compaq Presario 2154EA | Compaq Presario 2100 (2154EA)]]
* [[Debian on a Toshiba Satellite M30X-113| Toshiba M30x-113]] ''(stub)''
* [[Debian on a HP Compaq NX6110| HP Compaq NX6110]]
* [[Debian on an HP pavilion zv5422EA| HP pavilion zv5000 (zv5422EA)]]


===Altro===
=== Il modulo <code>realtime-lsm</code> ===
* [[Powernowd: CpuScaling per AMD]]
{{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.}}
* [[Cpufreqd: Cpuscaling per Intel Pentium M]]
* [[ACPI e DSDT]]
* [[Synaptics touchpad]]
* Inserire qui anche link a risorse in italiano sui portatili


==Debian Live==
Il modulo <code>realtime-lsm</code> permette ad un normale utente inserito nel gruppo <code>audio</code> di eseguire applicazioni in modalità realtime. Questo è il vecchio approccio, che verrà man mano sostituito nelle varie distro dall'uso degli rlimits (vedi oltre). 
* [[Rimasterizzare una knoppix]]
* [[Damn Small Linux su chiavetta usb]]


==Crittografia==
Su Debian l'installazione del modulo è molto semplice: basta installare il pacchetto <code>realtime-lsm-source</code> ed usare <code>[[Pagina di manuale di module-assistant|module-assistant]]</code> per compilare e pacchettizzare il modulo.
* [[Crittografia e Steganografia - L'Arte di nascondere le informazioni]]
* [[Chiavi simmetriche e chiavi pubbliche]]


==Varie==
In pratica, dopo aver fatto il boot del kernel per il quale si vuole installare il modulo, (e aver installato <code>realtime-lsm-source</code>) basta il seguente comando:
* [[Debian Fun]]
 
<pre>$ m-a build realtime-lsm</pre>
 
per compilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto <code>realtime-lsm</code> creato.
 
Questo modulo non è stato accettato (ne lo sarà mai) nel tree ufficiale del kernel per i potenziali problemi di sicurezza legati al suo utilizzo. In particolare per il suo corretto funzionamento devono essere attivate le seguenti voci di configurazione del kernel:
 
<pre>
Security options --->
[*] Enable different security model
<M>  Default Linux Capabilities
</pre>
 
''(l'ultima voce deve necessariamente essere un modulo!)''
 
Nei recenti kernel binari di Etch le precedenti condizioni non sono soddisfatte, per cui il modulo '''realtime-lsm''' non funzionerà con tali kernel. Inoltre il modulo realtime-lsm è ormai ufficialmente deprecato in Debian Etch.
 
In questi casi bisognerà ricompilare il kernel oppure usare l'approccio tramite rlimits.
 
== 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.
 
In bocca al lupo e...
 
Happy Debian!
 
== Links ==
 
* http://www.emillo.net/home
* http://www.djcj.org/LAU/guide/index.php
* http://tapas.affenbande.org/?page_id=3
* [http://demudi.agnula.org/wiki/Low-latencyKernelBuildingHowto Low-latency Kernel Building How-to]
* [http://alsa.opensrc.org/RealtimeKernelAndPAM Alsa Wiki: Realtime Kernel And PAM]

Versione attuale delle 16:21, 30 nov 2019

Emblem-important.png Attenzione. Questa guida è obsoleta. Viene mantenuta sul Wiki solo per motivi di natura storica e didattica.


Introduzione

Questa è una breve guida su come configurare il sistema per poter eseguire applicazioni audio realtime.

Per chi non conoscesse il mondo dell'audio professionale su GNU/Linux consiglio questo magnifico sito introduttivo:

Ci sono due passi distinti illustrati nella guida: il primo è patchare un kernel 2.6 con la patch realtime-preemption di Ingo Molnar per ottenere un kernel con la più bassa latenza possibile; il secondo è invece permettere a normali utenti l'esecuzione di applicazioni in modalità realtime.

Il kernel 2.6 ha raggiunto ormai delle prestazioni molto buone per quanto riguarda la latenza (anni luce avanti rispetto al 2.4). Normalmente è dunque sufficiente configurare il sistema per permettere ai normali utenti di eseguire applicazioni realtime (secondo passo).

Se invece si vuole, non solo ridurre sotto la soglia (indicativa) dei ~ 5 ms la latenza minima ottenibile, ma soprattutto aumentare notevolmente l'affidabilità del sistema nel rispettare le basse latenze bisogna usare la patch realtime-preemption (primo passo). È questo il caso, ad esempio, se si vuole lavorare in full-duplex su diverse tracce in realtime, senza correre il rischio di xrun (ovvero interruzioni del flusso audio). Oppure se si vuole suonare un sintetizzatore software usando la minima latenza possibile.

La patch realtime-preemption (per quanto perfettamente usabile) continua ad essere sviluppata incessantemente, e le release sono spesso giornaliere. Il kernel a cui si applica la patch è sempre l'ultimo kernel stabile o, spesso, l'ultimo RC. Nella guida, a puro titolo esemplificativo, mi riferirò ad un kernel e ad una versione di patch specifica, anche se queste versioni diventeranno presto obsolete.

Warning.png ATTENZIONE
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 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

Consiglio di compilare l'ultima versione stabile del kernel, configurandola e testandola fino ad ottenere una configurazione ben funzionante. Come spunto potete usare questa configurazione. Nel mio caso ho usato il kernel 2.6.13.2 e la Debian-way di compilare il kernel.

Una guida completa sulla configurazione e l'ottimizzazione di un kernel vanilla (e non solo) per applicazioni audio è la seguente:

La patch realtime-preemption più recente si applica solitamente ai kernel RC (Release Candidate). Questo perché Ingo Molnar segue sempre il kernel più recente (quindi usa le RC come base di partenza per la sua patch). Quando viene rilasciato un nuovo kernel stabile Ingo Molnar rilascia pach per il nuovo kernel stabile, ma dopo alcune settimane passa nuovamente a seguire l'ultima RC uscita nel frattempo.

Quindi, si hanno due possibilità:

  1. compilare l'ultimo kernel stabile con l'ultima patch rilasciata per quel kernel
  2. compilare l'ultimo kernel rc e usare la versione corrente della pacth.

Attualmente, ad esempio, l'ultimo kernel stabile, per il quale sia stata rilasciata la patch realtime preemption è il 2.6.14 (non i successivi 2.6.14.x). Per tale kernel l'ultima patch disponibile è la 2.6.14-rt22, come si può vedere qui.

Se invece si vuole usare l'ultima patch realtime-preemption (attualmente 2.6.15-rc5-rt2) bisogna usare anche l'ultimo kernel RC.

Per passare da un kernel stabile ad un RC basta fare un make oldconfig 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

L'archivio delle patch realtime-premption si trova a 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 patch-<kernel version>-<patch version>. Bisogna applicare la patch all'esatta versione del kernel indicata dal nome. Di seguito viene usata la versione rt5 applicata al kernel 2.6.14-rc5. Tenete presente che nuove versioni della patch vengono rilasciate giornalmente.

Per applicare la patch basta copiarla in /usr/src, entrare della dir del kernel e lanciare il comando, nel mio esempio:

$ cat ../patch-2.6.14-rc3-rt2 | patch -p1 -t

A questo punto nuovamente un make oldconfg ci permetterà di configurare le voci inserite dalla patch. Assicurarsi di scegliere Complete Preemption (Real-Time) in:

Processor type and features  --->
   Preemption Mode (Complete Preemption (Real-Time))

per il resto ho lasciato tutte le altre nuove voci su NO (la maggior parte di esse serve, infatti, per attivare vari strumenti di debug).

Non ci resta che compilare il kernel:

$ fakeroot make-kpkg --append-to-version -realtime --revision 0.1 kernel_image

ed installare il pacchetto, per ulteriori informazioni su questo passaggio: Debian Kernel Howto.


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).

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!).

D'altro canto, questa modalità pone dei seri problemi di sicurezza dato che un'applicazione potrebbe (a causa di un errore o di un comportamento malevolo) occupare la CPU per un tempo indefinito, senza poter essere interrotta, impedendo dunque la normale applicazione degli altri programmi.

Normalmente, quindi, solo root ha i privilegi per lanciare applicazioni in modalità realtime. Questo è un problema, dato che (ad esempio) Jack e tutte le applicazioni che vi si connettono dovrebbero essere lanciate da root per poter funzionare in modalità realtime, e questo costituirebbe un ancor più grosso problema di sicurezza.

Per risolvere il problema bisogna consentire l'uso della modalità realtime anche a normali utenti ma in maniera "controllata".

Il modo più semplice consiste nell'usare gli rlimits, ovvero editare il file /etc/security/limits.conf per consentire ad un utente od ad un gruppo di eseguire applicazioni in modalità realtime. Questo metodo ormai è pienamente supportato da Debian Etch (stabile) in poi.

Un secondo metodo ormai obsoleto consiste nell'usare un modulo del kernel chiamato realtime-lsm. Questa procedura è più lunga e può creare problemi di sicurezza.

Entrambi gli approcci possono essere usati sia con kernel vanilla che con kernel realtime-preemption.

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 realtime-lsm.

Gli rlimits sono supportati da PAM dalla versione 0.80, le versioni precedenti richiedono una patch. 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 audio all'esecuzione di processi in modalità realtime è aggiungere al file /etc/security/limits.conf le seguenti righe:

@audio          -       nice            -10
@audio          -       rtprio          99
@audio          -       memlock         250000

Ovviamente perché le modifiche abbiano effetto si deve rieseguire il login.

Potete controllare che gli rlimits siano settati correttamente lanciando jack:

 $ jackd -R -d alsa -S

In caso di problemi con la modalità realtime si vedranno messaggi del tipo:

cannot use real-time scheduling (FIFO at priority 10) [...] 
(1: Operation not permitted)

Nota: Per la oldstable Debian Sarge si può installare il pacchetto PAM patchato installando libpam-modules da qui.

Il modulo realtime-lsm

Warning.png ATTENZIONE
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.


Il modulo realtime-lsm permette ad un normale utente inserito nel gruppo audio di eseguire applicazioni in modalità realtime. Questo è il vecchio approccio, che verrà man mano sostituito nelle varie distro dall'uso degli rlimits (vedi oltre).

Su Debian l'installazione del modulo è molto semplice: basta installare il pacchetto realtime-lsm-source ed usare module-assistant per compilare e pacchettizzare il modulo.

In pratica, dopo aver fatto il boot del kernel per il quale si vuole installare il modulo, (e aver installato realtime-lsm-source) basta il seguente comando:

$ m-a build realtime-lsm

per compilare e creare un pacchetto per il modulo. A questo punto non ci resta che installare il pacchetto realtime-lsm creato.

Questo modulo non è stato accettato (ne lo sarà mai) nel tree ufficiale del kernel per i potenziali problemi di sicurezza legati al suo utilizzo. In particolare per il suo corretto funzionamento devono essere attivate le seguenti voci di configurazione del kernel:

Security options --->
[*] Enable different security model
<M>   Default Linux Capabilities

(l'ultima voce deve necessariamente essere un modulo!)

Nei recenti kernel binari di Etch le precedenti condizioni non sono soddisfatte, per cui il modulo realtime-lsm non funzionerà con tali kernel. Inoltre il modulo realtime-lsm è ormai ufficialmente deprecato in Debian Etch.

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

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.

In bocca al lupo e...

Happy Debian!

Links