- Qu'est-ce que c'est ? En quoi sont-ils différents (j'ai écrit ma compréhension dans une réponse ci-dessous)
- Dans le système Zswap, lorsqu'une page est expulsée du zswap vers le swap réel, est-elle stockée sous forme compressée (ou est-elle décompressée avant d'être stockée) ?
- Quel est l'état actuel de zcache ? Il a apparemment été supprimé ou quelque chose comme ça dans la version 3.11. Qu'est-ce que cela signifie ? http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )
Réponses
Trop de publicités?Il existe un grand nombre d'informations sur ces trois systèmes, mais aucune ne permet de faire une comparaison simple entre eux et encore moins de les expliquer correctement. J'ai essayé de trouver un sens à tout cela, mais ma tête a explosé. Puis j'ai pensé que j'avais compris et j'ai essayé de l'écrire et ma tête a de nouveau explosé. (voir le résumé des implémentations) J'ai pensé qu'il serait utile de poster ceci ici car il y avait beaucoup de questions sur stackexchange demandant des comparaisons par paires entre eux.
Résumé de ce qu'il faut utiliser et quand :
- ZRAM si vous n'avez pas de dispositif d'échange sur le disque dur/SSD.
- ZSWAP si vous avez un dispositif d'échange sur le disque dur/SSD.
- ZCACHE : Il fait ce que fait ZSWAP et compresse et accélère AUSSI le cache des pages du système de fichiers. (Il est beaucoup plus compliqué en interne et n'est pas dans le noyau principal car il est toujours en développement).
Résumé de leurs mises en œuvre :
- ZRAM est une RAM comprimée basée sur périphérique de permutation
- ZSWAP est un comprimé Cache si vous avez déjà un swap.
- ZCache est un backend pour un type spécial de Le truc de la RAM virtuelle (Mémoire transcendante) qui peut être utilisée pour mettre en cache les pages du système de fichiers ou les données de swap.
Détails :
-
ZRAM : Crée un périphérique d'échange dans la RAM. Les pages envoyées ici sont compressées au fur et à mesure qu'elles sont stockées. Il a une priorité plus élevée que les autres périphériques d'échange : les pages qui sont échangées sont préférentiellement envoyées au périphérique zram jusqu'à ce qu'il soit plein, alors seulement les autres périphériques d'échange sont utilisés.
- Avantages : Indépendamment des autres dispositifs d'échange (physiques). Il peut être utilisé lorsqu'il n'y a pas de partition d'échange pour étendre la mémoire disponible.
-
Inconvénients : Si d'autres dispositifs d'échange (HDD/SSD) sont présents, ils ne sont pas utilisés de manière optimale. Comme le périphérique zram est un périphérique d'échange indépendant, une fois qu'il est plein, toutes les nouvelles pages qui doivent être échangées sont envoyées directement au périphérique d'échange suivant, donc :
- Il existe un risque réel d'inversion LRU (least recently used) : Ce seront les données les plus récemment échangées qui iront sur le disque lent, tandis que les pages inactives qui ont été échangées il y a longtemps resteront dans la mémoire ZRAM rapide.
- Les données envoyées et lues sur le disque consomment beaucoup de bande passante car elles ne sont pas compressées.
- Statut : Fusionné dans le noyau principal 3.14. Une fois activé sur un système, il nécessite une certaine configuration de l'espace utilisateur pour mettre en place les périphériques d'échange et les utiliser.
-
ZSWAP : Le site
frontswap
Le système crochète les tentatives d'échange de pages et utilise zswap en tant qu'outil d'échange de pages. cache en arrière-plan pour un dispositif d'échange de disque dur/SSD : Une tentative est faite pour compresser la page et si elle contient des données peu compressibles, elle est directement écrite sur le disque. Si les données sont compressées, elles sont stockées dans le pool de mémoire zswap. Si les pages sont échangées hors de la mémoire lorsque le total des pages compressées dans la RAM dépasse une certaine taille, la méthode LRU (Least Recently Used) comprimé est écrite sur le disque car il est peu probable qu'elle soit requise prochainement.- Avantages : Utilisation très efficace de la RAM et du swap sur disque. Minimise les E/S sur disque en réduisant à la fois le nombre d'écritures et de lectures nécessaires (les données sont compressées et conservées en RAM) et en réduisant la bande passante de ces opérations d'E/S puisque les données sont sous une forme compressée.
- Limitations : Il s'agit d'une amélioration des systèmes d'échange basés sur le disque et dépend donc d'une partition d'échange sur le disque dur.
- Statut : Fusionné dans le noyau linux 3.11 mainline.
-
ZCache : Il s'agit d'un backend pour le système de mémoire Transcendent. La mémoire transcendante fournit une mémoire de type RAM à laquelle on ne peut accéder qu'une page à la fois en utilisant
put
yget
appels. Ceci est différent de la mémoire normale à laquelle on peut accéder un octet à la fois. Le sitefrontswap
ycleancache
Les systèmes accrochent les tentatives d'échange et de récupération des caches de pages du système de fichiers respectivement et les envoient aux backends de la mémoire transcendante. Lorsque zcache est utilisé comme backend, les données sont compressées et stockées dans la RAM. Lorsqu'elle se remplit, les pages compressées sont expulsées vers le swap. (un autre backend est RAMster qui partage un pool de RAM sur des ordinateurs en réseau). En utilisant uniquement lafrontswap
front-end avec lezcache
fonctionne exactement commezswap
. (En fait zswap est un sous-ensemble simplifié de zcache)- Avantages Fournit une mise en cache compressée à la fois pour le swap et pour les caches du système de fichiers.
- Statut : Il n'a pas encore été mis en ligne car il est très compliqué et fait l'objet de travaux.
Les meilleures ressources que j'ai trouvées sont :
- La mémoire transcendante en quelques mots
- [PATCH 0/8] zswap : mise en cache de swap compressé
- Compression de la mémoire dans le noyau
- LSFMM : compression de la mémoire dans le noyau
- Le cache de swap compressé zswap
En ce qui concerne le point 2, zswap semble décompresser les pages lors de la réécriture, ce qui confirme le commentaire de @Cbhihe.
mm/zswap.c , ligne 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
Ainsi, zswap est utile dans les situations où le cache compressé en mémoire vive est est susceptible d'être oublié rapidement avant d'être réécrit sur le disque. Ce n'est pas pour les applications avec de grands longévité qui devront éventuellement être soutenus par le périphérique d'échange réel.