En ce qui concerne 2., zswap semble décompresser les pages lors de l'écriture différée, confirmant ainsi 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 <[email protected]>
Date: Tue Oct 11 23:59:07 2016 -0700
Donc, zswap est utile dans les situations où le cache in-ram compressé est susceptible d'être oublié peu de temps avant d'être réécrit sur le disque. Ce n'est pas pour les applications avec de grands tas de vie longue qui devront éventuellement être supportés par le périphérique d'échange réel.
Il y a beaucoup de choses sur ces trois systèmes, mais rien de tout cela ne permet une simple comparaison, et encore moins une bonne explication. J'ai essayé de comprendre, mais ma tête a explosé. Puis j'ai pensé l'avoir eu alors j'ai essayé de l'écrire et ma tête a explosé à nouveau. (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 stackexchange demandant des comparaisons par paires entre elles.
ZRAM: Crée un périphérique de swap dans la RAM. Les pages envoyées ici sont compressées au fur et à mesure de leur stockage. Il a une priorité plus élevée que les autres périphériques de swap: les pages qui sont permutées sont de préférence envoyées au périphérique zram jusqu'à ce qu'il soit plein, puis tous les autres périphériques de swap utilisés.
ZSWAP: Le système frontswap
tente de permuter les pages et utilise zswap comme cache-retour pour un disque dur/SSD. swap device: 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 remplacées par trop de mémoire lorsque le nombre total de pages compressées dans RAM dépasse une certaine taille, la page La moins récemment utilisée (LRU) compressée est écrite dans le fichier disque car il est peu probable qu’il soit nécessaire bientôt.
ZCache: C'est un backend pour le système de mémoire Transcendent. La mémoire transcendante fournit une mémoire de type RAM à laquelle une seule page à la fois est accessible à l'aide d'appels put
et get
name__. Cela diffère de la mémoire normale à laquelle on peut accéder octet par octet. Les hooks frontswap
et cleancache
tentent respectivement d'échanger et de récupérer les caches de page de système de fichiers et de les envoyer aux serveurs de mémoire transcendants. Lorsque zcache est utilisé en tant que backend, les données sont compressées et stockées dans la RAM. Quand il se remplit, les pages compressées sont expulsées à l'échange. (un autre serveur est RAMster qui partage un pool de RAM sur des ordinateurs en réseau). L’utilisation exclusive de frontswap
avec le zcache
fonctionne de la même manière que zswap
name__. (En fait, zswap est un sous-ensemble simplifié de zcache)
Les meilleures ressources que j'ai trouvées étaient: