Miguel Mayol, gran seguidor i comentador d'aquest bloc, ens va recomanar un article publicat a Hispasònic sobre la utilització de nuclis RT, que hem decidit publicar i ampliar en algunes de les seves parts.
Els nuclis RT permeten un òptim rendiment en algunes situacions partículares, Per exemple, l'edició d'àudio o la utilització d'instruments musicals virtuals. |
Índex
kernel multitasca
El nucli de Linux, com el de la majoria dels sistemes operatius moderns, és multitasca. Això vol dir que s'estan executant diversos programes a el mateix temps.
En realitat això no passa exactament així. El que es fa és posar els programes en una cua i, un per un, el microprocessador els executa durant una certa quantitat de temps. Un cop esgotat aquest el microprocessador interromp la tasca deixant-la a mitges i dóna pas a la següent. A aquesta quantitat de temps se li denomina quantum o time slice, i no ha de ser constant.
Una bona analogia podria ser el cuiner d'un bar preparant diversos plats alhora: un bocata de llom, una de calls, una amanida mixta ... Ara part el pa, encenc la paella, mentre s'escalfa rento l'enciam, etc.
Si el quantum és prou petit la impressió subjectiva per a un observador lent, com l'ésser humà, és que en comptes d'un processador ràpid executant tasques alternativament tenim un processador lent per a cadascuna elles (diversos cuiners a la mateixa cuina fent lentament cadascun un sol plat).
La commutació de tasques té un cost
La multitasca no és gratis: implica una sobrecàrrega de el processador. En efecte, desallotjar una tasca i carregar la següent és una feina extra. Aquesta operació s'anomena 'canvi de context' o 'commutació de tasques'. Seria més rendible en termes de CPU executar els programes per complet, un per un, que partir-los en 'rodanxes' i anar saltant d'un a un altre. No obstant això, el sistema perdria en interactivitat, no podríem tenir diverses finestres obertes o, en el cas d'un servidor, atendre diverses peticions simultàniament.
Latència i rendiment
Suposem que el nostre cuiner ha de pelar 20 quilos de gambes i desossar 20 quilos d'olives. Com es planifica la feina?
En un cas extrem primer pelaría totes les gambes, es rentaria les mans per no barrejar sabors i després deshuesaría totes les olives. El representarem així:
GGGGGGGGGGGGGGGGGGGGGG ... C AAAAAAAAAAAAAAAAAAAAAA ...
A l'extrem oposat, pelaría una gamba, es rentaria les mans, deshuesaría una oliva, es rentaria les mans ... gamba, oliva, gamba, oliva ... El representarem així:
GCACGCACGCACGCACGCACGCACGCACGCACGCACGCACGCACGCACGCACGCACGCAC ...
La 'C' representa el canvi de context: rentar-se les mans, canviar d'estri ...
A el mateix temps, un cambrer recull les peticions dels clients: «una de gambes!» ... «una de olives!» ... i les trasllada a la cuina.
En el primer cas, suposem que entra un client i demana una ració de gambes. Cap problema, de seguida se li serveix. Però, ¿i si demana olives? El cambrer no podria servir-la fins que totes les gambes estiguessin pelades. En aquest cas la latència, que és el temps que passa des que es fa una petició fins que aquesta és atesa, seria molt alta.
En el segon cas, demani el que demani el client, estarà disponible en poc temps, a més pràcticament igual en tots dos casos. La latència serà baixa, però a un cost: a causa dels canvis de context es produirà una disminució de l'rendiment, entès com la part de el temps durant el qual la CPU està fent tasques directament productives, en lloc de labors de suport.
Evidentment en aquest cas la solució ideal seria un terme mitjà, que dependria de la mida de les racions i de la distribució estadística de les peticions. La teoria de cues és la branca de la matemàtica que s'encarrega d'estudiar aquestes situacions i de donar-los solucions òptimes.
Com es pot veure, latència i rendiment són oposats. Per aquesta raó no és correcte afirmar que els nuclis rt donen més rendiment. Tot el contrari, a l'abaixar la latència empitjoren el rendiment de la màquina i, per tant, són una elecció pèssima per a sistemes que no necessitin respostes superrápidas com, per exemple, servidors web o de bases de dades.
Per contra, els nuclis de baixa latència són ideals en situacions on es necessiti la màxima velocitat de resposta als estímuls externs, com sistemes de control industrial o aplicacions multimèdia interactives, sabent que estem sacrificant part de la potència de la màquina en garantir aquesta ràpida reacció.
Prioritats
Una opció interessant en sistemes multitasca és donar diferents prioritats a les tasques, de manera que les més importants rebin més temps de l'processador i les menys importants menys. En un nucli normal això es fa amb el comandament 'nice'. Si el nostre cuiner espera servir més racions de gambes que d'olives faria bé en dedicar-li més temps a les primeres, lògicament.
Kernel RT (o de baixa latència)
El problema dels nucli normals és que les tasques no es poden interrompre en qualsevol lloc, cal esperar que arribin a certs punts d'execució on ja es poden aturar per commutar a una altra. Això introdueix el que anomenem latència.
Per posar-ho d'una forma simplificada, els nuclis RT permeten interrompre les tasques en més quantitat de llocs que els nuclis normals. Poden fer, per dir-ho, rodanxes més fines de temps, així que la tasca actual serà desallotjada més ràpidament i la nostra tasca prioritària podrà accedir abans a la CPU. Per tant la latència serà més baixa.
Diguem que un nucli RT ens permet deixar una gamba a mig pelar si el que es necessita en aquest moment, urgentment, és posar-se a desossar una oliva com més aviat millor, mentre que en un nucli normal caldria acabar de pelar la gamba.
A més de fer rodanxes més fines, els nuclis RT tenen un sistema de prioritats molt més estricte, on les tasques prioritàries peguen cops de destral sense misericòrdia a les altres (preempting) per fer-se amb el control de la CPU, alentint els altres programes el que sigui necessari per complir els seus requisits.
Quan és important fer servir un nucli RT?
En dos casos:
1) Quan necessitem latències molt baixes, és a dir, reaccions molt ràpides de la màquina. L'exemple més clar és l'execució d'instruments virtuals, on necessites que a l'prémer una tecla d'un teclat MIDI l'instrument soni immediatament.
2) Quan necessitem prioritats molt estrictes, és a dir, que la nostra tasca d'alta prioritat no s'interrompi per res de món (llevat en el cas catastròfic que la CPU estigui tan sobrecarregada que se superi el 100% d'utilització). Per exemple, estem gravant una sessió d'àudio amb Ardour i observant com pugen i baixen els indicadors dels faders. Tant se val si perdem algun quadre de refresc dels faders per tal que el transport de so de l'micròfon a el disc dur no es vegi interromput. Un nucli RT s'alentirà el refresc dels faders tot el que sigui necessari per tal que no es perdi ni una mostra d'àudio.
Dit això, en general els nuclis no RT més recents han millorat molt el seu sistema de planificació de tasques i la seva gestió de prioritats. Si no tens la CPU a el límit de les seves possibilitats (diguem per sota de l'50% d'utilització) o si no us fa res que de tant en tant es produeixi un petit microtall (clic) en el so (els tan temuts xruns), un nucli normal dóna unes prestacions perfectament acceptables.
Què latència és aconsellable?
A mi personalment qualsevol cosa per sota de 10 ms ja em va bé ia partir de 20 ms ja començo a notar el retard clarament. Hi ha gent més exigent.
Instal·lador
En Ubuntu i derivats:
suo apt-get install linux-headers-lowlatency
suo apt-get install linux-lowlatency
sudo update-grub
A l'arrencar es podrà disposar de les dues opcions (el nucli normal i el de baixa latència).
En Arch i derivats:
yaourt -S linux-rt
sudo update-grub
font: Hispasònic
13 comentaris, deixa el teu
molt complet i ben
explicat. això si, estic utilitzant Linux per a produccion musical amb
una distro normal i corrent i no tinc problemes de latència, la
resposta és instantània a l'reproduir àudio. no tinc molts
coneixements, però crec que els drivers per a àudio en Linux estan
força bé, ni tan sols necessito jack per obtenir un bon
rendiment
Excel·lent article i l'explicació no va poder estar millor. Salutacions
Hola: Molt interessant, ho provaré en tasques de càlcul intensiu CPU + GPU.
Com es pot deixar el SO Ubuntu 12.0 com abans, és a dir desinstal·lar el «linux-headers-lowlatency». Salutacions.
Moltes gràcies per l'article. Realment és molt interessant conèixer el funcionament dels nuclis de baixa latència. M'ha despertat l'interès per conèixer més d'això i la seva utilitat. Salutacions
Bonissim l'article! alguna vegada vaig escoltar que era necessari un nucli de baixa latència per fer funcionar un teclat amb millor resposta però no tenia idea de per que i com fer-ho. Molt clara l'analogia.
Sí senyor, completament cert.
És una cosa completament vital en la producció musical, també, com es diu en l'ús de VST s, per exemple en un directe utilitzant un controlador MIDI hem d'anar alhora que els altres instruments i una latència alta ens pot jugar una mala passada.
O no necessàriament en l'ús d'instruments virtuals, sinó en enregistrament, a través de la interfície es produeix latència que ens pot confondre a l'hora d'interpretar instruments
Genial article, no tenia ni idea del que significava una baixa latència en un nucli (encara que el relacionava amb les latències en els mòduls de ram)
Molt bo ... em va agradar molt.
canviant de tema, algú sap com resoldre el problema de l'wifi (sense fils del meu lap) que no em deixa treballar en espais públics, el senyal és molt baixa.
tinc ubuntu 11.10 i el meu lap és: Dell Inspiron n4110.
els agraeixo per endavant.
Gràcies, afegir que Sabayon porta aquest nucli, compilat a 1000 Hz per defecte, que també és ideal per als servidors de jocs FPS i per als propis jocs FPS i qualsevol exigent, excepte potser els que recorren a bases de dades, tot i que al meu en Sabayon Freeciv em volava ..
En un escriptori normalment prioritza la tasca principal, de manera que pot convenir usar-lo encara que per a les altres tasques sigui menys eficient per al que estiguem fent en el moment ens anirà més ràpid, i en les actuals computadores modernes ens pot interessar bastant.
És qüestió d'instal·lar-los, provar-los una setmana, tornar a el nucli - normal - i veure que tal ens ha anat, i qual preferim, a més d'usar-lo per a les tasques específiques que és millor cada un d'ells.
Excel·lent article, molt ben explicat.
Gràcies.
Excel·lent explicació, moltes gràcies, m'ha servit de molt 🙂
Molt interessant article, m'ha quedat una mica més clar encara que àdhuc tinc dubtes sobre si em convé un nucli lowlatency. Com puc saber la latència d'un nucli? Salutacions
Recentment vaig instal·lar una distro d'ubuntu studio i em vaig adonar el de low latency, investigant vaig arribar a la teva pàgina. Tinc molt clar els conceptes bàsics de Sistemes Operatius i la teva explicació va ser perfecta. T'ho curraste. felicitacions