zram vs zswap vs zcache Guide ultime: quand utiliser lequel

55
  1. Qu'est-ce qu'ils sont? en quoi sont-ils différents (j'ai écrit ma compréhension dans une réponse ci-dessous)
  2. Dans le système Zswap, quand une page est expulsée du zswap en échange réel, est-elle stockée dans un fichier compressé? (ou est-il décompressé avant de stocker?, AFAICT est toujours compressé mais je ne peux pas en être sûr)
  3. Quel est l'état actuel de zcache? il a apparemment été supprimé ou quelque chose de ce qui est en 3.11. Qu'est-ce que ça veut dire? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )
statique
la source
2
Rép 2. Le message de validation indique clairement que les correctifs (relatifs à zcache) ont été supprimés de la version 3.11, mais seront inclus dans l'arborescence de -mm.
askb
1
@staticd Pourquoi n'avez-vous pas accepté votre propre réponse? C'est très bien!
Léo Léopold Hertz 준영
Lorsqu'une page est expulsée du zswap (cache d'échange compressé), elle est _ décompressée_ et placée dans le périphérique d'échange de sauvegarde, conformément à l'une des références de votre année [ lwn.net/Articles/537422/] ci-dessous ...
Cbhihe
( lwn.net/Articles/537422 - "Lors de la reprise de l'écriture différée, zswap décompresse la page ..."). @mmin ci-dessous suggère que cela peut être inefficace ou même un danger exploitable pour un serveur!
mwfearnley

Réponses:

2

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é sera probablement oublié peu de temps avant d'être réécrit sur le disque. Ce n'est pas pour les applications avec de grands tas de longue vie qui devront éventuellement être supportés par le périphérique d'échange réel.

miish
la source
7
J'ai trouvé un comportement potentiellement dangereux de zswap. Lorsqu'une application alloue de nombreuses pages et leur écrit des données qui compressent très bien (disons une séquence de zéros), zswap les stocke avec bonheur dans la mémoire de la dalle du noyau. Cependant, lorsque quelque chose déclenche un échange réel de disque, les données stockées se mettent soudain à «éclater» - autant de zéros sur les pages qui ne prenaient «que» des giga-octets en mémoire sont maintenant décompressés en centaines de giga-octets sur le disque.
mnish
2
Un attaquant pourrait essayer de stocker des données à faible entropie sur un serveur. Lorsque quelque chose déclenche un échange, le serveur est mort.
Mardi
1
Avez-vous signalé cela en amont?
Ken Sharp
Encore un inconvénient d'écrire des données non compressées Mi
Mihail Malostanidis
Il serait sûrement préférable, dans l’espace et dans les délais, de transférer les données sous une forme décompressée! Cela ressemble à quelque chose que nous voudrions vraiment que ce soit fait. Je ne peux que supposer que la restructuration de la zone de swap pour permettre cela implique soit de réécrire une grande partie du code existant, soit d’exiger un système d’allocation plus complexe.
mwfearnley
75

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.

Résumé de ce qu'il faut utiliser quand:

  1. ZRAM si vous n'avez pas de périphérique d'échange sur le disque dur / SSD.
  2. ZSWAP si vous avez un périphérique d'échange sur le disque dur / SSD.
  3. ZCACHE : Il fait ce que fait ZSWAP et AUSSI compresse et accélère le cache de page du système de fichiers. (C'est beaucoup plus compliqué en interne et ne se trouve pas dans le noyau principal car il est encore en développement).

Résumé de leurs implémentations:

  1. ZRAM est un périphérique d'échange basé sur RAM compressé
  2. ZSWAP est un cache compressé si vous avez déjà un swap.
  3. ZCache est un backend pour un type spécial de mémoire virtuelle (mémoire transcendantale) pouvant être utilisé pour mettre en cache des pages de système de fichiers ou échanger des données.

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 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.

    • Avantages: Indépendamment des autres périphériques 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 périphériques 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, les nouvelles pages à remplacer sont directement envoyées au prochain périphérique d'échange. Par conséquent:
      1. Il existe un risque réel d'inversion de LRU (le moins récemment utilisé): ce seront les dernières données échangées qui iront sur le disque lent, tandis que les pages inactives qui ont été échangées il y a bien longtemps resteront dans la mémoire ZRAM rapide.
      2. Les données envoyées au disque et lues à partir du disque consomment beaucoup de bande passante car elles sont décompressées.
    • Statut: fusionné dans le noyau principal 3.14. Une fois activé sur un système, une configuration de l'espace utilisateur est nécessaire pour configurer les périphériques d'échange et les utiliser.
  • ZSWAP: Le frontswapsystème raccroche tente d'échanger des pages et utilise zswap comme cache d' écriture arrière pour un périphérique d'échange HDD / SSD: Une tentative de compression de la page est effectuée; 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 la RAM dépasse une certaine taille, la page compressée au moins récemment utilisé (LRU) est écrite sur le disque, car il est peu probable qu'elle soit nécessaire bientôt.

    • Avantages: Utilisation très efficace de l’échange de RAM et de disque. Minimise les E / S de disque en réduisant à la fois le nombre d'écritures et de lectures requises (les données sont compressées et conservées dans la RAM) et en réduisant la bande passante de ces opérations d'E / S car les données sont sous une forme compressée.
    • Limitations: Il s'agit d'une amélioration des systèmes de swap basés sur disque et dépend donc d'une partition de swap sur le disque dur.
    • Statut: Fusionné dans le noyau linux principal 3.11.
  • ZCache: C'est un backend pour le système de mémoire Transcendent. La mémoire transcendantale fournit une mémoire de type RAM qui ne peut être accédée d’une page à la fois putqu’à l’ aide de et d’ getappels. Cela diffère de la mémoire normale à laquelle on peut accéder octet par octet. Le système frontswapet les cleancachetentatives de connexion tentent d’échanger et de récupérer les caches de page du 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). Utiliser uniquement le frontswapfrontend avec le zcachebackend fonctionne exactement comme zswap. (En fait, zswap est un sous-ensemble simplifié de zcache)

    • Avantages Fournit une mise en cache compressée pour les caches de swap et de système de fichiers.
    • Statut: toujours pas en ligne car c'est très compliqué et on y travaille.

Les meilleures ressources que j'ai trouvées étaient:


statique
la source
6
Est-il possible et / ou raisonnable d'utiliser à la fois zram et zswap?
Phlya
2
Aucun des trois n'a besoin / ne devrait être exécuté en même temps. zswap nécessite un swap basé sur disque en tant que backend contrairement à ZRAM qui ne nécessite aucune partition de swap dédiée. Cependant, si vous avez un échange, la partition d'échange ZRAM + est beaucoup moins efficace que la partition d'échange zswap +.
statique le
Pouvez-vous s'il vous plaît résumer ici comment vous activez zswap. Voici les détails askubuntu.com/a/361321/25388
Léo Léopold Hertz
1
Toute réponse affirmant que zramc'est un swapest totalement fausse. zramIls ne devraient pas swap. Le swapseul peut être stocké dans zram. Mais c’est l’un des nombreux cas d’utilisation possibles!. Voici un exemple: "Certaines des cas d'utilisation incluent le stockage / tmp, les utiliser comme disques de swap, divers caches sous / var et peut-être bien plus encore :)" kernel.org/doc/Documentation/blockdev/zram.txt Par exemple, je l'utilise pour stockage temporaire que je formate et monte comme tout autre périphérique de bloc normal.
Victor Yarema le