Il Kernel Linux e le nuove frontiere nell’utilizzo della swap: zswap migliora con i Btree

8

Forse di questi tempi si fa meno caso alle necessità di memoria RAM dei programmi, ed alle tecniche usate per averne a disposizione, ma una delle più vecchie e comuni è quella dello swap: usare parte del disco fisso come memoria (virtuale) per poter liberare quella fisica. Normalmente in Linux – e Unix – si tratta di una partizione dedicata, formattata apposta per questo scopo, mentre in Windows viene usato un file apposta: il file di paging.

La tecnica funziona bene perché parte dei dati caricati in RAM è solo parcheggiata, non varia frequentemente né è necessario accederci in continuazione. Quei dati possono essere messi sul disco: rispetto ai dati in RAM ci vorrà molto di più per leggerli e scriverli, ma avremo più memoria veloce per le operazioni che la richiedono.
Il gioco funziona bene finché quelle necessità rimangono piuttosto rare, pagando altrettanto raramente quella penale molto alta.

Gli sviluppatori del Kernel hanno pensato che aggiungere del tempo di accesso pur di diminuire lo spazio usato sul disco potesse essere una tattica vantaggiosa, implementando (dal Kernel 3.11) zswap: compressione della swap sul disco.
Su un Raspberry Pi con poca RAM e disco rappresentato da una microSD, diventa importante sia avere dello spazio swap disponibile sia occupare il minor spazio possibile sul disco. Ma il vantaggio si ha anche in computer normali, perché semplicemente si usano meno i dischi (la parte lenta del processo).

La compressione funziona solo se i dati sono organizzati in gruppetti, cosa che li rende non immediatamente accessibili: alla richiesta di lettura o modifica di un dato, bisogna sapere in anticipo quale pezzo di swap scompattare. Rispetto alla swap normale, quindi, abbiamo una ricerca aggiuntiva che richiede un’implementazione specifica.

Proprio questa fase potrebbe essere migliorata di molto organizzando l’indice secondo la tecnica del b-tree, che rende la ricerca dei dati molto rapida.
I primi test dell’implementazione proposta sembrano portare un miglioramento di 5 volte, e forse è possibile ottenere prestazioni ancora migliori perfezionando l’algoritmo b-tree presente nel Kernel. Niente male.

Pronti ad abilitare zswap?

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.

8 risposte a “Il Kernel Linux e le nuove frontiere nell’utilizzo della swap: zswap migliora con i Btree”

  1. Avatar Mario Rossi
    Mario Rossi

    OK, grazie.
    Provero’.

  2. Avatar Corrado Casoni
    Corrado Casoni

    Il vantaggio di comprimere lo swap non sta nel risparmiare spazio (qualche giga ormai non farebbe differenza nemmeno su Raspberry con una sd da 32gb a meno di 10 euro) invece il grande vantaggio sta nel velocizzare l’I/O su dispositivi molto lenti (vedi appunto le sd) il tempo che si perde a decomprimere o comprimere si recupera alla grande dimezzando i tempi di lettura e soprattutto scrittura.

  3. Avatar Mario Rossi
    Mario Rossi

    Potrebbe essere utile non solo per i moderni smartphone, ma anche per il recupero di PC vecchi con poca RAM.
    Inoltre, vedo che zswap c’è dal kernel 3.11, quindi da un bel pezzo.
    Come si fa ad attivarla?

  4. Avatar Mario Rossi
    Mario Rossi

    Ho visto in altre distro un apposito pacchetto che cita systemd.
    Quindi per esempio in MX – debian based ma senza systemd di default – bisognerebbe attivarlo?

  5. Avatar Drumsal
    Drumsal

    Ovviamente tutto ciò nel caso si utilizzi lo swap. Mi sembra che comunque su Linux sia oramai un caso abbastanza remoto, o mi è sfuggito qualcosa?

  6. Avatar Marco Bonfiglio
    Marco Bonfiglio

    La risposta in breve è: dipende.
    E’ vero che negli ultimi anni la tendenza, data la disponibilità di RAM, è quella di limitare l’uso della swap. Ma, a mio avviso personale, eliminare del tutto quella memoria non è possibile:
    – in ambito casalingo la funzione di ibernazione (spegnimento della macchina ma con ripresa della sessione al riavvio, come fosse uno standby) fa leva su quella partizione proprio come memoria non volatile in cui salvare lo stato della RAM prima di togliere la corrente (che ne causa la cancellazione completa);
    – in ambito enterprise può funzionare da “polmone” provvisorio, causando solo dei rallentamenti nei servizi esposti invece di un crash vero e proprio. In realtà si potrebbe anche decidere che è meglio morire che performare male, è una scelta.

  7. Avatar Rickyx
    Rickyx

    Per programmi specifici la richiesta di ram potrebbe essere enorme.

    Fotogrammetria con 32Gb di ram? E vai di swap… 😉

  8. Avatar Drumsal
    Drumsal

    Non oso pensare alle applicazioni equivalenti windows…

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *