sabato 20 febbraio 2010

Qui prodest ? (IV)

Linus sta per mollare l'OS(sso): anche se non ha dato un via libera definitivo ed uffciale a RT_PREEPT, siamo molto ma molto vicini al botto: funzionalita' hard real time di serie nel main line kernel.

Metto subito le mani avanti per i maniaci della sicurezza: non andremo il giro col proiettile in canna. Per farla corta, le funzionalita' hard real time saranno pronte ma in stand by: bisognera' essere "root" per attivarle, un processo alla volta.

Chi ha fatto il lavoro?

Ingo Molnar e' la mente dietro il colpaccio.

Come ha fatto? 

Ingo, con una pazienza certosina, si e' ripassato tutto il codice del kernel alla caccia delle sezioni critiche. Le sezioni critiche sono quelle parti di codice dove e' necessario garantire una atomicita' delle operazioni, ovvero non si puo' essere interrotti a meta'.

Disabilitare le interruzioni ha pero' l'effetto secondario di diventare insibili agli stimoli esterni. Per un sistema operativo real time disabilitare le interruzioni per un tempo significativo puo' essere catastrofico.

E' per questo che ADEOS prende il controllo dell'interrupt controller; inoltre la patch (RTAI o Xenomai) disabilita la coppia di istruzioni "cli /sti" che rendono il codice delle sezioni critiche atomico e le sostituisce con una redirezione verso ADEOS.

RT_PREEMPT non crea un ambiente preferenziale hard-real time isolato dall'ambiente standard Linux (soft real-time). RT_PREEMPT lima il codice standard del kernel al fine di eliminare tutte le atomicita' lunghe (note anche come "the big kernel lock").

Eliminare le atomicita' lunghe ha pero' lo svantaggio di penalizzare le prestazioni in alcuni ambiti applicativi, ad esempio file e Internet server. Per fare un prova facile, provate a copiare un file monolitico - and esempio una immagine ISO - di qualche giga. Vedrete subito come il desktop diventi lento a rispondere. Questi ritardi sono (una bella rottura per l'utente normale) catastrofici per un sistema operativo hard real time.

Ricordatevi che un OS hard real time non guarda in faccia a nessuno: se siente a priorita' 99 (il massimo) entrate e - una volta dentro - nessuno (nemmeno un altro processo a priorita' 99) vi puo' interrompere. Dovete essere voi a "passare la mano".

A livello di prestazioni, RT_PREEMPT ha una latenza massima intorno a 100us, contro 10us di Xenomai e 1us di RTAI.
Per sistemi elettromeccanici normali, dove i loop veloci sono dell'ordine di 1ms, 100us sono piu' che accettabili. Se volete andare piu' veloci dovete passare a Xenomai o RTAI.

Una latenza massima di 1ms e' accettabile anche per applicazioni audio professionali dove, anche se la frequenza di campionamento e' di decine di kilo Hertz, si lavora "ad anello aperto" e quindi si possono usare buffers di dimensioni consistenti ... ma non si puo' accettare che ci siano del "buchi" nelle registrazioni o che l'audio sia troppo "sfasato" dal video.

Una latenza massima dell'ordine di 1ms e' indispensabile anche per le transazioni finanziarie automatiche in tempo reale. La maggior parte di voi - penso - non e' a conoscenza che molti dei problemi di instabilita' dei mercati finanziari sono dovuti alla possibilita' di fare transazioni automatiche - dove non c'e' intervento umano - con tempi di giro tra 2 e 5ms.

Questo vuol dire che e' possibile spostare miliardi di euro in frazioni di secondo (e fumare il sigaro allo stesso tempo).

Qualunque professionista serio che ha lavorato davvero con sistemi di controllo digitale vi dira' che aumentare troppo la frequenza di campionamento, non solo e' INUTILE ma e' DANNOSO perche' si finiscono per introdurre delle instabilita' derivanti dalla precisone finita delle operazioni di calcolo. In parole povere, un computer non riesce piu' vedere la differenza tra "x" e "x+dx" se "dx" e' troppo piccolo rispetto ad "x".

Se non fate attenzione ai vostri investimenti, questo effetto di "cancellazione" si potrebbe propagare rapidamente fino al vostro conto corrente e mettere in ginocchio l'economia di intere nazioni.

Per non parlare delle oneste lavoratrici degli strip club di Wall Street, finite sul marciapiede per mancanza di clienti economicamente superdotati.

Non e' possibile fare del sano capitalismo (quel gioco magico dove tutti vincono e nessuno perde) con tempi di reazione di 1ms. Bisogna ricominciare a pensare in termini di investimenti e non speculazioni.

Si dice che Henry Ford era anti semita. E' falso. In realta' lui odiava a morte i banchieri. Gli industriali si fanno un mazzo cosi' perche' hanno bisogno di soldi per fare investimenti sulle strutture. I lavoratori poi si fanno ancora piu' mazzo, perche' hanno bisogno di soldi per arrivare in fondo al mese.
Ma un banchiere che fa?
Per una serie di circostanze storiche, i banchieri con i quali Henry aveva a che fare erano tutti di origine ebrea. Ma se fossero stati italiani, sarebbe stato anti-italiano.

Non voglio fare lo stesso errore di Ford dicendo che tutti i banchieri sono speculatori e malfattori (Madoff_atori). Statisticamente parlando e' impossibile: qualche banchiere ragionenvolmente onesto ci deve essere per forza. Speriamo di trovarlo quanto prima.

Soprattutto per sollevare le sorti delle oneste lavoratrici degli strip club di Wall Street (senza dimenticare i nostri poveri conti correnti).

Nessun commento:

Posta un commento