Linux zram (compcache) + SwapCached


3

Ho una domanda su zram + swapcached. So che zram è uno scambio compresso in memoria, ma Linux usa la propria area SwapCached interna per archiviare le pagine di scambio recenti anche in memoria. Ho un laptop da 512 MB con un'unità di scambio zram ~ 128 MB.

zram_stats dice:

orig_data_size:     97419264 
compr_data_size:    40315919 

e:

grep SwapCache /proc/meminfo 
    SwapCached:        90200 kB

Significa che ho queste pagine di scambio nella RAM due volte? Il primo è compresso e il secondo non compresso dalla funzione di swapcache interna di Linux?

Se vero, non è molto utile salvare ~ 57 MB mentre è anche in RAM con ~ 90 MB.

Posso disabilitare la funzione swapcache di Linux quando cambio a zram? O posso limitare la massima area scambiata?

Risposte:


2

La risposta breve è che non è una copia; è solo "diverso".

La risposta lunga è che SwapCache è in realtà pagine che vengono estratte dallo swap (usando il termine "swap" genericamente, indipendentemente dal backing store, dove zram e HDD swap sono due esempi di backing store) e vengono temporaneamente decompressi mentre sono necessari per accedere attivamente. Ricorda: non è possibile accedere direttamente alle pagine nella RAM compressa , poiché i dati sono compressi ed è quindi illeggibile (bene, illeggibile se si desidera leggere i dati originali). Quindi deve essere conservato da qualche partequando il sistema dice "OK, ora ho bisogno di una pagina dalla cache compressa!". Se lo decomprimi "al volo" ogni volta che hai bisogno di qualcosa da Zram, ciò richiederebbe un intenso utilizzo della CPU e probabilmente comporterebbe un rallentamento generale del sistema che sarebbe peggio della lettura da swap sul disco rigido. Quindi il sistema mantiene una cache di alcune delle tue pagine scambiate in memoria, dove "alcune" sono definite dalle pagine che sono state necessarie di recente.

Inoltre, nel caso in cui si evidenzi in modo intelligente che le pagine scambiate sul disco rigido non sono compresse: swapcache viene ancora utilizzato lì, perché invece di un elevato sovraccarico della CPU durante l'accesso a tali pagine, si ottiene una latenza elevata durante l'attesa della ricerca dell'HDD e recuperare i settori e riportarli in memoria dove possono essere aggiunti alla cache di scambio.

Questa strategia di gestione consente di ottimizzare per un caso d'uso in cui si avviano molti programmi; spingere alcuni dei set di lavoro dei programmi in scambio compresso all'aumentare della pressione della memoria (zram); quindi decomprimere il gruppo di lavoro dei singoli programmi (un programma alla volta) in swapcache non compresso, quando / se si accede a quel programma in primo piano o se esegue un'attività in background.

Questo non è troppo diverso dal modo in cui lo swap funziona in generale, indipendentemente dal suo archivio di backup (cache compressa nella RAM o nello swap). Se avessi un vero disco rigido lento con molti programmi aperti e molto spazio di swap utilizzato, noteresti i seguenti sintomi:

  1. Generalmente buone prestazioni sul programma "in primo piano" (la finestra con cui stai interagendo in questo momento )

  2. Un lungo ritardo e molta rettifica del disco udibile durante il caricamento di tutti i programmi che sono stati in background per molto tempo

Quindi quello che stai ottenendo con la RAM compressa al posto dello scambio di HDD è che il "lungo ritardo e molta rettifica del disco udibile" viene evitato quando porti in primo piano quel programma in background. Invece, la CPU si scatena con l'esecuzione della decompressione sulle pagine compresse e le memorizza temporaneamente nella cache di swap mentre si accede al programma, in modo che l'accesso alla stessa pagina compressa più volte non comporti una decompressione intensiva della CPU ciascuna tempo. Ma personalmente preferirei avere una maggiore attività della CPU sull'I / O del disco elevato e la latenza di accompagnamento.


0

Sì, significa che quelle pagine sono in ram due volte: una volta compresse e una volta non compresse. No, non puoi disabilitarlo.

Speravo che frontswap con zcache potesse aggirare questo problema, ed è stato finalmente unito a Linux 3.5, ma sembra che tu debba ancora avere uno scambio reale o frontswap non funziona.

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.