image hosting by Twango

Introduzione

Abbiamo visto come sia possibile aggiungere i repository di Ubuntustudio,senza necessariamente avere installato la distribuzione.
Il kernel della serie 2.6 offre una feature molto apprezzata riguardo la latenza del kernel,attestandola tra i 10 e i 5ms..un tempo accettabile ma non sufficiente per chi fa uso di applicazioni real-time legate all’audio…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.
Il kernel Lowlatency,in dotazione a Ubuntustudio (e gia’ su distribuzioni come Demudi) offre propio questa possibilita’.
Vediamo adesso come compilare un kernel a bassa latenza,o meglio,con la piu’ bassa latenza possibile..(al di sotto della soglia dei 5ms) utilizzando la patch realtime-preemption di Ingo Molnar.

Kernel Download

Prendiamo come riferimento l’ultimo kernel stabile, disponibile attualmente su kernel.org
Scompattiamo il tarball in /usr/src

cd /usr/src
tar xjvf linux-2.6.21.tar.bz2

Scarichiamo la patch e spostiamola in /usr/src

sudo cp -v patch-2.6.21-rt1 /usr/src

NB:la patch deve riportare l’esatta versione del kernel che vogliamo installare.La patch viene aggiornata molto spesso.
Entriamo nei sorgenti del kernel:

cd /usr/src/linux-2.6.21

Applichiamo la patch:

cat ../patch-2.6.X-[rcY]-rtZ | patch -p1 --dry-run

Nel caso dell’esempio patch-2.6.X-[rcY]-rtZ corrisponde a patch-2.6.21-rt1
Il comando diventa quindi:

cat ../patch-2.6.21-rt1 | patch -p1 --dry-run

Se non riceviamo errori,proseguiamo..altrimenti la patch non coincide cn la versione dell kernel da compilare.
Lanciamo ora:

cat ../patch-2.6.21-rt1 | patch -p1

Prerequisiti

Installiamo tutto il necessario per compilare il nuovo kernel

sudo apt-get install debhelper modutils kernel-package libncurses5-dev fakeroot

Se avete problemi con le interfacce qt (xconfig) o gtk (gconfig) potete usare l’interfaccia grafica ncurses (menuconfig)

Configurazione del kernel

Per la configurazione del kernel,col nuovo modulo Complete Preemption (Real-Time):

sudo make oldconfig

Importata la vecchia configurazione del kernel,andiamo a selezionare il modulo nella sezione dei processori:

sudo make xconfig

NB:per usare l’interfaccia Qt bisogna installare le librerie libqt3-mt-dev
sudo apt-get install libqt3-mt-dev

Spostiamoci nella sezione Processor type and features e selezioniamo il nuovo modulo:

image hosting by Twango

Per una configurazione ancora piu’ mirata vi consiglio questo Wiki

Compilazione kernel

Siamo pronti ora per iniziare la compilazione del kernel:

sudo make-kpkg clean

Vi consiglio di usare un account di root qui:

make-kpkg --initrd --append-to-version -versione kernel_image

Installiamo il pacchetto .deb (se tutto ok) con dpkg

sudo dpkg -i Nome_completo_kernel.deb

Tratto dalla guida Debianizzati.org,una spiegazione molto chiara sulle applicazioni in userspace per sfruttare il nuovo kernel “lowlatency” appena compilato.

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 priorita (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 importantisissima 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 interrrotta, 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”.

Attualmente esistono due approcci per raggiungere lo scopo:

1. Usare il modulo realtime-lsm
2. Usare gli rlimits

Il primo metodo e’ deprecato,e trovate la spiegazione tecnica allo stesso link dal quale ho prelevato questa breve introduzione all’utilizzo di questi tool in userspace.
Il modulo realtime-lsm permette ad un normale utente inserito nel gruppo audio di eseguire applicazioni in modalità realtime.
Per l’installazione del modulo realtime-lsm useremo module-assistant

sudo module-assistant get realtime-lsm
sudo module-assistant build realtime-lsm
sudo module-assistant install realtime-lsm

Usare gli rlimits

È già presente nel kernel un nuovo meccanismo più sicuro per concedere i privileggi di realtime chiamato rlimits che sostituisce completamente il modulo realtime-lsm.
Per Ubuntu e’ disponibile il pacchetto libpam-modules fornito da Ubuntustudio
Il link pero’ non funziona,cosi’ come non funzionano quelli alla patch-ubuntustudio e ai pacchetti Debian (sid e sarge).

Guida Debianizzati lowlatency
Introduzione applicazioni audio Realtime
Guida Divilinux compilazione kernel
Guida Demudi Realtime

Related Posts Plugin for WordPress, Blogger...

Il tuo indirizzo ip:
35.172.111.215

Valutazione 3.00 su 5
happy wheels 2 demo

Category:

Senza categoria

Tags:

,

Commenti via Facebook:

Leave a Reply

Your email address will not be published. Required fields are marked *

*

26 Comments

  • Ah, compilare il Kernel… mi viene sempre voglia di farlo. Ma sono trooooppo pigro. E poi, se ricordi, l’ultima volta che ci ho provato è stata devastante.

      Quota

  • la prima volta che ho iniziato timidamente a compilare un kernel (in maniera molto piu’ complicata della debian way) e’ stato dopo 2 anni che usavo linux..
    basta non correre e non bruciare le tappe..ogni cosa a suo tempo

    ps. qui si tratta si di ricompilare il kernel ma per un motivo ben preciso..;)

      Quota

  • ma nell’uso normale (=desktop) che benefici comporta avere un kernel lowl latency?

      Quota

  • benefici con la patch per il realt-time..tantissimo..ed e’ gia’ stato spiegato
    per la normale opzione preemptible kernel i benefici sono,in sostanza,una latenza uniforme anche col sistema sotto carico(tra 10 e 5 ms) e un miglioramento dell’avvio delle applicazioni..detto propio in maniera super-stringata
    Per un ottimizzazione ideale ci sono comunque altri moduli da prendere in cosiderazione..come lo scheduling e il timer frequency

      Quota

  • gnommer ITALY 12 anni ago

    Ottima guida, molto esaustiva…. Complimenti 🙂

      Quota

  • bautz ITALY 12 anni ago

    No ho mai ricompilato il kernel.
    Ho sepre giochicchiato con le spunte di xconfig, ma non sono mai andato oltre, per paura di fare casini.
    Ora però voglio provarci, e prenderò la bassa latenza come spunto.
    Domanda: la patch per la bassa latenza che applichi, quella di Ingo Molnar, è la stessa che si trova nel kernel low-latency preimpacchettato dei repository ubuntu?
    Perchè avevo letto nel forum di ubuntu dell’esistenza di una patch più “estrema” per la bassa latenza, ma non trovo più il post.

      Quota

  • @bautz
    non sono sicuro che sia la stessa patch..anche perche’ i link non funzionano
    quella che ho applicat io e’ di Ingo Molnar
    Purtroppo non so dirti con sicurezza cosa sia cambiato,il kernel funziona ma sul 2.6.21 non si possono installare i driver nvidia
    Provero’ anche sul pc dove ho ati..quelli si installano sul 2.6.21

      Quota

  • psychomantum ITALY 12 anni ago

    [ot] divi ti ho messo tra i link del mio blog :)!

      Quota

  • @psychomantum
    se vuoi che ti aggiungo ai blogroll non hai che da chiedere..

      Quota

  • psychomantum ITALY 12 anni ago

    mi fai un piacere 😛 entro anche io nella schiera di blogger, spero di prendere un pò più di tempo e iniziare :)!

      Quota

  • @lol..mi devi dare il link pero’…

      Quota

  • strano che non l’ha messo al posto del nick 😛
    http://psychomantum.wordpress.com !!
    azies 😉

      Quota

  • pierissimo ITALY 12 anni ago

    divilinu ho un problema.. ho installato il kernel lowlatency.
    mi da un problema al server grafico quando tento di accedere ad una sessione xgl.
    praticamente si vede tutto malissimo.
    devo aggiungere xgl tra i moduli caricati?

      Quota

  • @pierissimo
    xgl non e’ un modulo del kernel..e’ un server grafico
    probabilmente,avendo installato un kernel nuovo,ti sei dimenticato di re-installare i driver per la scheda video

      Quota

  • pierissimo ITALY 12 anni ago

    ho reinstallato i driver adesso va!!!
    invece non va la scheda wireless ipw3945!!!

      Quota

  • anche quelli devi reinstallare..;)

      Quota

  • bautz ITALY 12 anni ago

    Hai ragione Divilinux, non è la stessa patch utilizzata dal kernel ufficiale per il lowlatency.
    Ho trovato però i repository per un kernel patchato con il realtime di Ingo molnar, è riportato a metà pagina del wiki di ubuntu . com alla voce
    RealTime
    nel paragrafo
    Beta available (for Feisty)
    Ciò non toglie che è comunque un kernel di ubuntu, cioè con qualche centinaio di patch.
    Va da se che conviene compilarselo da sè, vanilla più la sola patch realtime.
    La wikipedia inglese riporta che i tempi peggiori misuarti con questa path sono di 50-60 microsecondi (cioè 0,05 – 0,06 millisecondi…avranno esagerato??)
    PS: perchè il kernel ufficiale di ubuntu ha così tante, ma tante, ma tante patch applicate? Servono a qualcosa o appesantiscono soltanto?

      Quota

  • rispondo al ps
    se servono a qualcosa non lo so..finche’ non ho sottomano tutte le patch applicate..che poi..siamo noi che diamo il termine generico “patch”..ma vengono inclusi anche parecchi moduli,viene modificato il codice..e tanto altro ancora..
    ti posso dire che,da assiduo utilizzatore di kernel vanilla,a lato pratico..anche un kernel senza patch funziona benissimo..

      Quota

  • Purtroppo non so dirti con sicurezza cosa sia cambiato,il kernel funziona ma sul 2.6.21 non si possono installare i driver nvidia.
    Io con la voce paravirtualization in ‘processor features’ disabilitata
    col .run di Nvidia li compilo senza problemi col 2.6.21.

      Quota

  • @telperion
    comincia ad irradiarmi con queste tue botte di c**o perche’ io ho esaurito la polvere magica
    Pur disattivando la paravirtualization..i driver nvidia ancora non riesco ad installarli..:(

      Quota

  • telperion ITALY 12 anni ago

    sudo sh NVIDIA-Linux-x86-1.0-9755-pkg1.run -a -n -N --x-module-path=/usr/lib/xorg/modules
    ed il modulo si compie. Boh!

      Quota

  • ahhh..ecco la parola magica!..io non facevo cosi’..lol
    ora ci provo subitissimo..grazie

      Quota

  • @divilinu.
    Hola, se ti puo` interessare in questi giorni dovrei rilasciare i pacchetti deb del kernel RTP ottimizzati (cio’ significa che ho levato tutti i moduli per il supporto ISA, Ibutton Dallas e altre menate varie ormai deprecate da anni) per Athlon (inserendo le varie informazioni dichiarate da AMD qui http://developer.amd.com/devguides.jsp#Developer_Guides per esempio i vari header per la memoria ecc… 🙂 ) e per il mio povero acer centrino. In piu`, dimenticavo, ho messo anche il v4l_experimental per appunto la cinergy:). Insomma se ti interessa dimmelo 😀 Squid

      Quota

  • @Squid
    A me mancano le nozioni su come inserire dei driver a mio piacimento..hai qualche guida?
    voglio dire..io il kernel l’ho sempre ricompilato..ma non mi sono mai interessato a come fare per aggiungere moduli..prima di compilarlo
    tu come hai fatto?

      Quota

  • @divilinu
    Per dire il vero, non ho mai seguito guide particolari ho sempre fatto “quasi” tutto da me. Comunque per esempio il v4l_experimental basta sostituire “/usr/src/linux-source-2.6.21/drivers/media/” con quelli scaricati con mercurial e per fortuna durante la compilazione viene ricreata il Makefile. poi per mettere altri moduli basta che lo aggiungi il tuo modulo nel Makefile, per esempio dentro sei hai un modulo particolare di una scheda auto pci vai su /usr/src/linux-source-2.6.21/sound/pci/Makefile

    obj-$(CONFIG_SND) += \
    ac97/ \
    ………
    tua_directory/ \

    Mi sono spiegato bene? 🙂

      Quota

  • @squid
    si piu’ o meno..ma almeno ho capito come si fa
    non era tanto ovvio..hehe
    cosi’ quando compilo un kernel non devo ogni volta reinstallare i driver esterni al kernel tree..ce li piazzo nel .deb e installo tutto con un click

      Quota