zram vs zswap vs zcache Guía definitiva: cuándo usar cuál

55
  1. ¿Qué demonios son ellos? en qué se diferencian (he escrito mi entendimiento en una respuesta a continuación)
  2. En el sistema Zswap, cuando una página se desaloja del zswap al intercambio real, ¿se almacena en un archivo comprimido? (¿o está descomprimido antes de almacenarlo? AFAICT todavía está comprimido pero no puedo estar seguro)
  3. ¿Cuál es el estado actual de zcache? aparentemente fue eliminado o algo en 3.11. ¿Qué significa esto? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )
estático
fuente
2
Respuesta 2. El mensaje de confirmación indica claramente que los parches (pertenecientes a zcache) se han eliminado de 3.11, pero se incluirán en el árbol principal -mm.
askb
1
@staticd ¿Por qué no has aceptado tu propia respuesta? ¡Es muy bueno!
Léo Léopold Hertz 준영
Cuando se desaloja una página del zswap (caché de intercambio comprimido), se descomprime y se coloca en el dispositivo de intercambio de respaldo, según una de sus referencias [ lwn.net/Articles/537422/] a continuación ...
Cbhihe
( lwn.net/Articles/537422 - "Durante la reescritura reanudada, zswap descomprime la página ..."). ¡@mmin a continuación sugiere que esto puede ser ineficiente o incluso un peligro explotable para un servidor!
mwfearnley

Respuestas:

2

Con respecto a 2., zswap parece descomprimir las páginas en reescritura, confirmando el comentario de @ Cbhihe.

mm / zswap.c , línea 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

Por lo tanto, zswap es útil para situaciones en las que es probable que se olvide el caché comprimido en la memoria RAM poco antes de volver a escribirse en el disco. No es para aplicaciones con montones grandes y duraderos que eventualmente necesitarán ser respaldados por el dispositivo de intercambio real.

terminar
fuente
77
Encontré un comportamiento potencialmente peligroso de zswap. Cuando una aplicación asigna muchas páginas y les escribe datos que se comprimen muy bien (por ejemplo, una secuencia de ceros), zswap las almacena felizmente en la memoria de la losa del núcleo. Sin embargo, cuando algo desencadena el intercambio real de discos, los datos almacenados repentinamente 'explotan', es decir, que muchos ceros en las páginas que tomaron "solo" gigabytes en memoria ahora se descomprimen en cientos de gigabytes en disco.
acabado el
2
Un atacante podría intentar almacenar datos de baja entropía en un servidor. Cuando algo activa el intercambio, el servidor estaría muerto.
acabado el
1
¿Reportaste esto río arriba?
Ken Sharp
Otro inconveniente de escribir datos sin comprimir 🤷
Mihail Malostanidis
¡Seguramente sería mejor en el espacio y en el tiempo volcar los datos en forma descomprimida! Suena como algo que realmente queremos que haga. Solo puedo suponer que reestructurar el área de intercambio para permitir esto implica reescribir una gran cantidad de código existente o requiere un sistema de asignación más complejo.
mwfearnley
75

Hay un montón de cosas sobre estos tres sistemas, pero nada de eso hace una comparación simple entre ellos y mucho menos explicarlos bien. Traté de darle sentido, pero mi cabeza explotó. Entonces pensé que lo tenía, así que intenté escribirlo y mi cabeza explotó nuevamente. (vea el resumen de implementaciones). Pensé que sería útil publicar esto aquí ya que había muchas preguntas de intercambio de pila que preguntaban sobre comparaciones por pares entre ellas.

Resumen de qué usar cuando:

  1. ZRAM si no tiene un dispositivo de intercambio en HDD / SSD.
  2. ZSWAP si tiene un dispositivo de intercambio en HDD / SSD.
  3. ZCACHE : hace lo que hace ZSWAP y TAMBIÉN comprime y acelera la memoria caché de la página del sistema de archivos. (Internamente es mucho más complicado y no está en el núcleo de la línea principal ya que todavía está en desarrollo).

Resumen de sus implementaciones:

  1. ZRAM es un dispositivo de intercambio basado en RAM comprimido
  2. ZSWAP es una caché comprimida si ya tiene un intercambio.
  3. ZCache es un back-end para un tipo especial de memoria RAM virtual (memoria trascendente) que se puede usar para almacenar en caché las páginas del sistema de archivos o intercambiar datos.

Detalles:

  • ZRAM: hace un dispositivo de intercambio en la RAM. Las páginas enviadas aquí se comprimen a medida que se almacenan. Tiene una prioridad más alta que otros dispositivos de intercambio: las páginas que se intercambian se envían preferentemente al dispositivo zram hasta que esté lleno, solo entonces se utilizan otros dispositivos de intercambio.

    • Beneficios: Independiente de otros dispositivos de intercambio (físicos). Se puede usar cuando no hay una partición de intercambio para expandir la memoria disponible.
    • Desventajas: si hay otros dispositivos de intercambio (HDD / SSD), no se utilizan de manera óptima. Como el dispositivo zram es un dispositivo de intercambio independiente, una vez que está lleno, todas las páginas nuevas que deban intercambiarse se envían directamente al siguiente dispositivo de intercambio, por lo tanto:
      1. Existe una posibilidad real de inversión de LRU (menos utilizada recientemente): serán los datos intercambiados más recientemente que van al disco lento, mientras que las páginas inactivas que se intercambiaron hace mucho tiempo permanecerán en la ZRAM rápida
      2. Los datos enviados y leídos desde el disco consumirán mucho ancho de banda ya que no se comprimen.
    • Estado: fusionado con el núcleo de la línea principal 3.14. Una vez habilitado en un sistema, requiere cierta configuración de espacio de usuario para configurar los dispositivos de intercambio y usarlos.
  • ZSWAP: el frontswapsistema engancha los intentos de intercambiar páginas y utiliza zswap como caché de reescritura para un dispositivo de intercambio de HDD / SSD: se intenta comprimir la página y, si contiene datos poco compresibles, se escribe directamente en el disco. Si los datos están comprimidos, se almacenan en el conjunto de memoria zswap. Si las páginas se intercambian de la memoria cuando el total de páginas comprimidas en la RAM excede un cierto tamaño, la página comprimida menos utilizada recientemente (LRU) se escribe en el disco, ya que es poco probable que se requiera pronto.

    • Beneficios: uso muy eficiente de RAM e intercambio basado en disco. Minimiza la E / S del disco al reducir la cantidad de escrituras y lecturas requeridas (los datos se comprimen y se mantienen en la RAM) y al reducir el ancho de banda de estas operaciones de E / S, ya que los datos están comprimidos.
    • Limitaciones: es una mejora de los sistemas de intercambio basados ​​en disco y, por lo tanto, depende de una partición de intercambio en el disco duro.
    • Estado: se fusionó con el núcleo de Linux de la línea principal 3.11.
  • ZCache: es un back-end para el sistema de memoria Trascendent. La memoria trascendente proporciona una memoria tipo RAM a la que solo se puede acceder una página a la vez utilizando puty getllamadas. Esto es diferente a la memoria normal a la que se puede acceder un byte a la vez. El enlace frontswapy los cleancachesistemas intentan intercambiar y reclamar cachés de página del sistema de archivos respectivamente y enviarlos a los backends de memoria trascendentes. Cuando se usa zcache como back-end, los datos se comprimen y almacenan en la RAM. Cuando se llena, las páginas comprimidas se expulsan al intercambio. (un backend alternativo es RAMster, que comparte un grupo de RAM entre las computadoras en red). Usar solo el frontswapfrontend con el zcachebackend funciona igual que zswap. (De hecho, zswap es un subconjunto simplificado de zcache)

    • Beneficios Proporciona almacenamiento en caché comprimido tanto para intercambio como para cachés del sistema de archivos.
    • Estado: todavía no está marcado, ya que es muy complicado y se está trabajando en ello.

Los mejores recursos que encontré fueron:


estático
fuente
66
¿Es posible y / o razonable usar zram y zswap?
Phlya
2
Ninguno de los tres necesita / debe ejecutarse al mismo tiempo. zswap necesita un intercambio basado en disco como backend a diferencia de ZRAM que no necesita una partición de intercambio dedicada. Sin embargo, si tiene swap entonces, la partición ZRAM + swap es mucho menos efectiva que la partición zswap + swap.
staticd
¿Puede resumir aquí cómo se activa zswap? Aquí detalles askubuntu.com/a/361321/25388
Léo Léopold Hertz 준영
1
Cada respuesta que dice que zrames un swapes totalmente incorrecta. zramNO ES a swap. El swapúnico PUEDE ser almacenado en zram. ¡Pero este es uno de los muchos casos de uso posibles! Aquí hay un ejemplo: "Algunos de los casos de uso incluyen / tmp storage, uso como discos de intercambio, varios cachés en / var y quizás muchos más :)" kernel.org/doc/Documentation/blockdev/zram.txt Por ejemplo, lo uso para almacenamiento temporal que formateo y monto como cualquier otro dispositivo de bloque normal.
Victor Yarema