Popcorn Linux: proposta per il multithreading distribuito su più nodi

Negli ultimi anni la corsa alla parallelizzazione delle applicazioni è passata dall’essere una scelta all’essere una necessità.
La diffusione tanto massiccia (persino nei cellulari di bassa fascia) di CPU multicore, per ottenere le massime performance, richiede che non solo il sistema operativo, ma anche l’applicazione sia spezzettabile in più thread (processi – tecnicamente sbagliato ma linguisticamente comprensibile), ognuno eseguito in parallelo in ogni core.
Ma anche il concetto di cloud implica questa parallelizzazione: ogni servizio offerto è composto da una o più applicazioni che girano in parallelo su vari server fisici, ma che vengono visti dall’esterno come una cosa unica.

Per offrire queste capacità si sono sviluppate tecnologie specifiche, (quasi) tutte a livello di linguaggio di programmazione (OpenCL, MPI) o a livello applicativo, nella quale l’applicazione è confinata in macchine virtuali (vSphere, ovirt) o in container (docker, podman).

Tutte quelle soluzioni hanno vantaggi e svantaggi (ovviemente, come sempre), ma tra questi troviamo la necessità di hardware omogeneo: la stessa applicazione per girare su diversi server deve trovare condizioni simili (architettura CPU, istruzioni supportate, etc…).
Inoltre, spesso un’applicazione (specialmente se usa container) non può essere migrata, ma solo replicata: spenta su un nodo e accesa sull’altro.

Popcorn Linux si propone di superare tutti questi svantaggi creando un sistema operativo distribuito su più nodi. Non solo: l’architettura prevede che ogni nodo abbia il suo Kernel specifico (detto secondario) capace di interpretare le chiamate fatte dall’applicazione in istruzioni specifiche per quel sistema. Ultima ciliegina sulla torta: lo spazio di indirizzamento della memoria (in sostanza, i dati) saranno condivisibili e coerenti su tutti i nodi, permettendo parallelizzazione di processi su più nodi, o migrazioni degli stessi da un nodo all’altro.

Per poter raggiungere questo risultato, dal 2013 alcuni ricercatori del politecnico della Virginia stanno portando avanti una serie di modifiche al Kernel Linux, preso come base, e la costruzione di un compilatore apposta (basato su LLVM). Il risultato è un vero e proprio sistema distribuito, con integrato nel Kernel stesso un’interfaccia di rete virtuale usata per le comunicazioni con gli altri nodi del sistema.
Il compilatore ha il compito di descrivere i singoli thread dell’applicazione come immagini unikernel, che è definita come una macchina virtuale specializzata e autosufficiente: come fosse un programma monolitico, è eseguibile direttamente (senza hypervisor) e non ha bisogno di librerie o file esterni per l’esecuzione.
Sarà questa immagine ad essere gestita dal Kernel distribuito, ma eseguita dal Kernel del singolo nodo, con le istruzioni particolari di quel nodo.

Questa architettura apre ad un moltitudine di usi e possibilità. Per esempio, essendo l’unikernel autosufficiente, l’esecuzione potrà essere spostata ad un altro nodo: copiando anche i dati che stava usando, il processo lavorerà dal punto in cui si era fermato. Una vera e propria migrazione live.
Un altro scenario prevede l’esecuzione in parallelo di più thread uguali: se anche l’esecuzione di uno dovesse avere un problema (memoria corrotta, CPU bloccata, il server prende fuoco), ci sarà l’altro pronto. In questa maniera è raggiungibile una fault tolerance (resilienza all’errore) pressoché totale.
Il sito del progetto presenta una moltitudine di altre applicazioni e tecniche per poter usare sistemi eterogenei in cluster.

Dopo quasi sette anni di sviluppo il sistema non è ancora usabile, ma comincia a cercare una certa ufficialità. Il 29 aprile, infatti, è comparsa nella newsletter dedicata al Kernel una RFC (Request For Comments), con la quale si chiede alla community un’analisi per un’approvazione, critiche e suggerimenti). Di solito, questo è l’inizio del cammino per l’inclusione di qualche feature nel Kernel ufficiale.

La patch proposta è limitata ai sistemi x86, specifica per la versione 5.2, ed è specificamente indirizzata a studio e sperimentazione. Però… è un inizio, di un progetto davvero molto interessante. Non trovate?

Ho coltivato la mia passione per l'informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.

Tags: , ,