Multikernel, un'eccellente utility per eseguire più kernel senza virtualizzazione

Punti chiave:
  • Multikernel Linux consente di eseguire kernel indipendenti simultaneamente su hardware fisico.
  • Basato sul kernel Linux 7.0, utilizza CONFIG_MULTIKERNEL e attualmente supporta l'architettura x86_64.
  • Elimina il sovraccarico della virtualizzazione (hypervisor KVM), consentendo cambi di contesto 2,5 volte più veloci.
  • A differenza dei container, le istanze non condividono il kernel, impedendo che guasti o vulnerabilità compromettano l'intero server.
  • Utilizza lo strumento Kerf insieme ai moduli Lazy CMA e DAXFS per gestire dinamicamente le risorse e avviare le immagini Docker.

Linux multikernel

L'anno scorso, qui sul blog, abbiamo discusso di una proposta di ByteDance (creatore di TikTok) per un'utility chiamata Parker (PARTitioned KERnel), una tecnologia sperimentale che permette l'esecuzione simultanea di più kernel Linux. E ora, poco più di un anno e mezzo dopo, è stata rilasciata una nuova utility pubblica del progetto, "Multikernel Linux (mklinux-v7.0-mk2)".

Questo sviluppo introduce una variante specializzata del kernel Linux che consente l' esecuzione simultanea di più istanze indipendenti del kernel all'interno di un singolo server fisico. Operando direttamente sull'hardware, questa tecnologia elimina completamente la necessità di hypervisor o livelli di virtualizzazione, garantendo a ciascuna istanza l'accesso diretto alla memoria, alla CPU e ai dispositivi allocati.

ByteDance-Parker-multikernel
Articolo correlato:
Parker: La nuova tecnologia che consente di eseguire più kernel Linux senza virtualizzazione

Basato sul kernel Linux 7.0 recentemente rilasciato, il progetto consente di abilitare questa funzionalità tramite il parametro di configurazione CONFIG_MULTIKERNEL . Se questa opzione è disabilitata, il kernel risultante è esattamente lo stesso e si comporta come un Linux 7.0 standard. Attualmente, questa prima versione (v7.0-mk2) supporta esclusivamente le architetture x86_64 ed è progettata per colmare il divario di prestazioni e sicurezza tra la virtualizzazione tradizionale e l'isolamento dei container.

Isolamento senza penalizzazione delle prestazioni

Il problema principale della virtualizzazione è il "costo" prestazionale imposto dagli hypervisor. Al contrario, Multikernel Linux elimina le transizioni di uscita dalle macchine virtuali , la traduzione della memoria di secondo livello e l'overhead generato dai modelli di dispositivo.

Secondo i dati sulle prestazioni pubblicati dopo i test sui processori Xeon Gold 5418Y (Sapphire Rapids), il sistema multikernel dimostra un notevole incremento della velocità di esecuzione rispetto alle macchine virtuali KVM. Ad esempio, il cambio di contesto tra i processi è 2,5 volte più veloce, la latenza della pipeline è ridotta di oltre la metà (2,18 volte) e le chiamate di sistema di base, come le operazioni di lettura e scrittura, guadagnano oltre il 25% in termini di tempo di risposta.

Rispetto ai tradizionali container Docker, Multikernel offre una protezione superiore perché, dato che i container condividono lo stesso kernel host, una vulnerabilità a livello di kernel, un panic o una saturazione dei blocchi interni influiscono su tutti i tenant. Nell'ecosistema Multikernel, ogni ambiente ha il proprio kernel indipendente ; ciò significa che, se un'istanza subisce un errore critico, le altre continuano a funzionare senza problemi, garantendo un ambiente isolato ideale per eseguire qualsiasi cosa, dai server web ai carichi di lavoro intensivi di addestramento dell'IA (apprendimento automatico), sullo stesso hardware.

Assegnazione dinamica e orchestrazione con Kerf

Multikernel Linux funziona utilizzando un kernel host che gestisce un ampio pool di risorse (CPU, RAM e dispositivi PCI). Sfruttando la struttura ad albero dei dispositivi esistente (accessibile in /sys/fs/multikernel/), il kernel suddivide questo pool e avvia i "kernel figli" tramite il sottosistema nativo kexec_file_load(). Grazie alle funzionalità hotplug di Linux, queste risorse possono essere spostate dinamicamente tra le istanze senza richiedere il riavvio del server, garantendo prestazioni prevedibili e regolabili in tempo reale.

Per orchestrare questo ecosistema, gli sviluppatori hanno introdotto lo strumento da riga di comando Kerf . Questa utility gestisce l'intero ciclo di vita delle istanze, avvalendosi di moduli open-source complementari. Uno di questi è Lazy CMA, che alloca memoria fisica contigua in fase di esecuzione senza richiedere alcuna configurazione preliminare all'avvio.

L'altro pilastro è DAXFS, un modulo che consente alle istanze di condividere i file system direttamente in memoria; grazie a questo, Kerf può avviare un kernel figlio direttamente all'interno di un'immagine container Docker, sfruttandone il file system senza bisogno di livelli di emulazione e utilizzando descrittori in memoria per l'interconnessione di rete senza copiare i dati.

Vale la pena menzionare che questa prima versione ha superato intensi test di stabilità con architetture di paginazione a 5 livelli e KASLR attivo, dimostrando che il ripristino delle risorse è completamente sicuro anche in caso di arresto anomalo di un kernel figlio.

Consentendo la suddivisione dei carichi di lavoro che entrano in conflitto a causa di blocchi di sistema (come un gran numero di processi di sblocco o ridenominazione sulla stessa cache) tra kernel separati allineati con i socket fisici del processore, Multikernel Linux dimostra la capacità di scalare oltre la barriera prestazionale imposta da un singolo kernel monolitico, aprendo una nuova era nel consolidamento dei server e nel cloud computing ad alte prestazioni.

Infine, se siete interessati ad approfondire l'argomento, potete trovare maggiori dettagli al seguente link.


Aggiungi come fonte preferita in Google