In questo articolo Indice dei contenuti 2 sezioni
Meta sta sviluppando CRAM, un nuovo sistema di compressione della memoria pensato per Linux che punta a garantire prestazioni nettamente superiori rispetto a ZRAM, la soluzione oggi più conosciuta in questo ambito. Il progetto nasce da un’idea precisa e piuttosto controcorrente. Secondo chi ci lavora, il vero costo della memoria compressa non risiede tanto nell’operazione di compressione in sé quanto nei page fault e nei meccanismi di swap che entrano in gioco ogni volta che il sistema deve gestire quei dati.
Detto in modo più semplice, il collo di bottiglia non sarebbe il lavoro di “schiacciare” le informazioni per farle stare in meno spazio, ma tutta l’impalcatura che il sistema operativo mette in piedi per maneggiarle. Ed è proprio lì che CRAM prova a intervenire, cambiando l’approccio alla radice anziché limitarsi a ottimizzare quello esistente.
Come funziona CRAM e perché è diverso da ZRAM
La differenza principale sta nel modo in cui viene trattata la memoria compressa. Le soluzioni attuali la considerano una sorta di dispositivo di swap, cioè uno spazio di appoggio dove spostare i dati quando la RAM scarseggia. CRAM invece mantiene i dati direttamente in memoria e li presenta a Linux attraverso un nodo NUMA privato. Per chi non ha familiarità con il termine, un nodo NUMA è in pratica una porzione di memoria che il sistema riconosce come area distinta e che può gestire con i propri strumenti.
Questo dettaglio tecnico ha conseguenze concrete. Grazie a questa impostazione il kernel può continuare a sfruttare i suoi normali meccanismi di gestione della memoria, compresi la migrazione e il ballooning, senza dover passare dal classico percorso dello swap. Niente deviazioni, quindi, e meno passaggi intermedi che rallentano il tutto.
Dietro il progetto c’è Gregory Price insieme al suo team in Meta. L’obiettivo dichiarato è ridurre in maniera drastica l’overhead, ossia il carico aggiuntivo, che oggi accompagna strumenti come ZRAM e zswap. Entrambi infatti restano legati allo strato di swap di Linux e ne ereditano inevitabilmente i limiti.
Il ruolo del Chicken Bit e i problemi ancora aperti
Tra gli elementi più interessanti del progetto spicca quello che gli sviluppatori hanno battezzato Chicken Bit. Il nome è curioso ma la funzione è molto seria. Serve a impedire che Linux continui a indirizzare nuove allocazioni verso CRAM mentre il sistema è già impegnato a gestire la memoria compressa. Una specie di freno di emergenza, insomma, che entra in azione nei momenti più delicati.
Il motivo per cui serve un meccanismo del genere è legato alla natura stessa della compressione. Non tutti i dati si comprimono allo stesso modo. Una grande quantità di zeri può ridursi in maniera enorme, mentre informazioni già compresse in partenza possono occupare quasi lo stesso spazio iniziale. Questa variabilità rende complicato stabilire quanta memoria “logica” sia davvero disponibile e soprattutto prevedere il momento in cui lo spazio fisico finirà.
Su questo fronte CRAM non ha ancora trovato una soluzione definitiva, tanto che la questione viene indicata come un’area di ricerca aperta. Il Chicken Bit però svolge almeno un compito fondamentale, perché evita che una situazione di forte pressione sulla memoria degeneri in una cascata di errori a catena.
Fonte: TecnoAndroid








