zram vs zswap vs zcache Guida definitiva: quando usare quale


55
  1. Che diavolo sono? come sono diversi (ho scritto la mia comprensione in una risposta di seguito)
  2. Nel sistema Zswap, quando una pagina viene sfrattata dallo zswap allo scambio effettivo, viene archiviata in una compressa da? (o è decompresso prima della memorizzazione ?, AFAICT è ancora compresso ma non posso esserne sicuro)
  3. Qual è lo stato attuale di zcache? apparentemente è stato rimosso o qualcosa del 3.11. Cosa significa questo? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )

2
Ans 2. Il messaggio di commit indica chiaramente che le patch (relative a zcache) sono state rimosse da 3.11, ma saranno incluse nell'albero principale -mm.
askb,

1
@staticd Perché non hai accettato la tua risposta? È molto buono!
Léo Léopold Hertz

Quando una pagina viene sfrattata da zswap (cache di scambio compressa) viene _ decompressa_ e posizionata nel dispositivo di scambio di supporto, per uno dei riferimenti dell'anno [ lwn.net/Articles/537422/] in basso ...
Cbhihe,

( lwn.net/Articles/537422 - "Durante la ripresa del writeback, zswap decomprime la pagina ..."). @mmin di seguito suggerisce che questo può essere inefficiente o addirittura pericoloso per un server!
mwfearnley,

Risposte:


2

Per quanto riguarda 2., zswap sembra decomprimere le pagine sul write-back, confermando il commento di @ Cbhihe.

mm / zswap.c , linea 828:

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Oct 11 23:59:07 2016 -0700

Quindi zswap è utile per le situazioni in cui è probabile che la cache in-ram compressa venga dimenticata poco prima di essere riscritta sul disco. Non è per le applicazioni con cumuli di grandi dimensioni e di lunga durata che dovranno eventualmente essere supportati dall'effettivo dispositivo di scambio.


7
Ho trovato un comportamento potenzialmente pericoloso di zswap. Quando un'applicazione alloca molte pagine e scrive su di esse dati che si comprimono molto bene (diciamo una sequenza di zeri), zswap li memorizza felicemente nella memoria delle lastre del kernel. Tuttavia, quando qualcosa innesca l'effettivo scambio del disco, i dati memorizzati improvvisamente 'scoppiano' - che molti zeri sulle pagine che occupavano "solo" gigabyte in memoria ora si decomprimono in centinaia di gigabyte su disco.
smalto

2
Un utente malintenzionato potrebbe tentare di archiviare dati di bassa entropia su un server. Quando qualcosa innesca lo scambio, il server sarebbe morto.
smalto

1
Hai segnalato questo a monte?
Ken Sharp,

Ennesimo svantaggio della scrittura di dati non compressi 🤷
Mihail Malostanidis,

Sicuramente sarebbe meglio nello spazio e nel tempo scaricare i dati in una forma decompressa! Sembra qualcosa che vorremmo davvero che facesse. Posso solo supporre che la ristrutturazione dell'area di swap per consentire ciò comporti la riscrittura di molto codice esistente o richieda un sistema di allocazione più complesso.
mwfearnley,

75

C'è un sacco di roba su questi tre sistemi, ma nessuno di essi fa un semplice confronto tra loro e tanto meno li spiega bene. Ho provato a dargli un senso ma la mia testa è esplosa. Poi ho pensato di averlo preso, quindi ho provato a scriverlo e la mia testa è esplosa di nuovo. (vedi il sommario delle implementazioni) Ho pensato che sarebbe stato utile pubblicarlo qui, dato che c'erano molte domande su stackexchange che chiedevano confronti a coppie tra loro.

Riepilogo di cosa usare quando:

  1. ZRAM se non si dispone di un dispositivo di scambio su HDD / SSD.
  2. ZSWAP se si dispone di un dispositivo di scambio su HDD / SSD.
  3. ZCACHE : fa quello che fa ZSWAP e comprime e velocizza ANCHE la cache della pagina del filesystem. (È internamente molto più complicato e non è nel kernel mainline in quanto è ancora in fase di sviluppo).

Riepilogo delle loro implementazioni:

  1. ZRAM è un dispositivo di scambio basato su RAM compressa
  2. ZSWAP è una cache compressa se hai già uno scambio.
  3. ZCache è un backend per un tipo speciale di dispositivo RAM virtuale (memoria trascendente) che può essere utilizzato per memorizzare nella cache le pagine del filesystem o scambiare dati.

Dettagli:

  • ZRAM: crea un dispositivo di scambio nella RAM. Le pagine inviate qui vengono compresse man mano che vengono archiviate. Ha una priorità più alta rispetto ad altri dispositivi di scambio: le pagine che vengono scambiate vengono inviate preferenzialmente al dispositivo zram fino a quando non è pieno, solo allora vengono utilizzati tutti gli altri dispositivi di scambio.

    • Vantaggi: indipendente da altri dispositivi (fisici) di scambio. Può essere utilizzato quando non esiste una partizione di swap per espandere la memoria disponibile.
    • Svantaggi: se sono presenti altri dispositivi di scambio (HDD / SSD), questi non vengono utilizzati in modo ottimale. Poiché il dispositivo zram è un dispositivo di scambio indipendente, una volta pieno, tutte le nuove pagine che devono essere scambiate vengono inviate direttamente al dispositivo di scambio successivo, quindi:
      1. Esiste una reale possibilità di inversione di LRU (utilizzata meno di recente): saranno i dati scambiati più di recente che vanno sul disco lento, mentre le pagine inattive che sono state scambiate molto tempo fa rimarranno nella veloce ZRAM
      2. I dati inviati e letti dal disco consumeranno molta larghezza di banda in quanto non compressi.
    • Stato: unito al kernel mainline 3.14. Una volta abilitato su un sistema, richiede una configurazione di userspace per configurare i dispositivi di swap e utilizzarli.
  • ZSWAP: il frontswapsistema aggancia i tentativi di scambiare pagine e utilizza zswap come write-back-cache per un dispositivo di scambio HDD / SSD: viene effettuato un tentativo di comprimere la pagina e se contiene dati scarsamente comprimibili viene scritta direttamente sul disco. Se i dati vengono compressi, vengono archiviati nel pool di memoria zswap. Se le pagine vengono sostituite dalla memoria quando le pagine compresse totali nella RAM superano una determinata dimensione, la pagina compressa LRU (Least recentemente utilizzata) viene scritta sul disco poiché è improbabile che presto sia richiesta.

    • Vantaggi: utilizzo molto efficiente di RAM e swap su disco. Riduce al minimo l'I / O su disco riducendo il numero di scritture e letture richieste (i dati vengono compressi e conservati nella RAM) e riducendo la larghezza di banda di queste operazioni di I / O poiché i dati sono in una forma compressa.
    • Limitazioni: è un miglioramento dei sistemi di swap basati su disco e quindi dipende da una partizione di swap sul disco rigido.
    • Stato: unito al kernel linux 3.11 mainline.
  • ZCache: è un backend per il sistema di memoria trascendente. La memoria trascendente fornisce una memoria simile alla RAM a cui è possibile accedere solo a una pagina alla volta utilizzando pute getchiama. Ciò è diverso dalla normale memoria a cui è possibile accedere un byte alla volta. L' hook frontswape cleancachesystem tenta di scambiare e recuperare rispettivamente le cache delle pagine del file system e di inviarle ai backend di memoria trascendenti. Quando zcache viene utilizzato come backend, i dati vengono compressi e archiviati nella RAM. Quando si riempie, le pagine compresse vengono eliminate dallo scambio. (un backend alternativo è RAMster che condivide un pool di RAM su computer collegati in rete). Usare solo il frontswapfrontend con il zcachebackend funziona esattamente come zswap. (In effetti zswap è un sottoinsieme semplificato di zcache)

    • Vantaggi Fornisce cache compressa sia per la cache di swap sia per il filesystem.
    • Stato: non ancora ottimizzato in quanto è molto complicato e su cui si sta lavorando.

Le migliori risorse che ho trovato sono state:



6
È possibile e / o ragionevole utilizzare sia zram che zswap?
Phlya,

2
Nessuno dei tre deve / deve essere eseguito contemporaneamente. zswap necessita di uno swap basato su disco come backend a differenza di ZRAM che non ha bisogno di una partizione di swap dedicata. Tuttavia, se si dispone di swap, la partizione di swap ZRAM + è molto meno efficace della partizione di swap zswap +.
staticd,

Puoi riassumere qui come attivare zswap. Qui i dettagli askubuntu.com/a/361321/25388
Léo Léopold Hertz 준영

2
Prendi in considerazione l' idea di
Tom Hale,

1
Ogni risposta che afferma che zramè una swapè totalmente sbagliata. zramNON è un swap. L' swapunico CAN può essere archiviato zram. Ma questo è uno dei tanti possibili casi d'uso !. Ecco un esempio: "Alcune delle userecase includono / tmp storage, usano come dischi di swap, varie cache sotto / var e forse molte altre :)" kernel.org/doc/Documentation/blockdev/zram.txt Ad esempio lo uso per memoria temporanea che formatto e monto come qualsiasi altro normale dispositivo a blocchi.
Victor Yarema,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.