zswap es una función del kernel de Linux que proporciona una caché de escritura diferida comprimida para páginas intercambiadas , como una forma de compresión de memoria virtual . En lugar de mover páginas de memoria a un dispositivo de intercambio cuando se van a intercambiar, zswap realiza su compresión y luego las almacena en un grupo de memoria asignado dinámicamente en la RAM del sistema . Posteriormente, la escritura diferida en el dispositivo de intercambio real se aplaza o incluso se evita por completo, lo que resulta en una E / S significativamente reducida para los sistemas Linux que requieren intercambio; la compensación es la necesidad de CPU adicionalciclos para realizar la compresión. [1] [2] [3]
Desarrollador (es) | Seth Jennings y otros |
---|---|
Escrito en | C |
Sistema operativo | Linux |
Tipo | Características del kernel de Linux |
Licencia | GNU GPL |
Sitio web | kernel |
Como resultado de la reducción de E / S, zswap ofrece ventajas a varios dispositivos que usan almacenamiento basado en flash , incluidos dispositivos integrados , netbooks y dispositivos de hardware de gama baja similares, así como a otros dispositivos que usan unidades de estado sólido (SSD) para almacenamiento. La memoria flash tiene una vida útil limitada debido a su naturaleza , por lo que evitar que se utilice para proporcionar espacio de intercambio evita que se gaste rápidamente. [4]
Internos
zswap se integra en el resto del subsistema de memoria virtual del kernel de Linux utilizando la API proporcionada por frontswap , que es un mecanismo del kernel de Linux que abstrae varios tipos de almacenamiento que se pueden usar como espacio de intercambio. [5] Como resultado, zswap opera como un controlador de backend para frontswap al proporcionar lo que es internamente visible como un dispositivo pseudo-RAM. En otras palabras, la API frontswap hace que zswap sea capaz de interceptar páginas de memoria mientras se intercambian, y capaz de interceptar fallas de página para las páginas ya intercambiadas; el acceso a esas dos rutas permite que zswap actúe como una caché de escritura diferida comprimida para las páginas intercambiadas. [1] [6]
Internamente, zswap usa módulos de compresión proporcionados por la API de cifrado del kernel de Linux , lo que hace posible, por ejemplo, descargar las tareas de compresión de la CPU principal utilizando cualquiera de los aceleradores de compresión de hardware compatibles con el kernel de Linux. La selección del módulo de compresión deseado se puede realizar dinámicamente en el momento del arranque mediante el valor del parámetro de arranque del kernel zswap.compressor ; si no se especifica, selecciona la compresión Lempel – Ziv – Oberhumer (LZO). A partir de la versión 3.13 del kernel de Linux, zswap también debe habilitarse explícitamente especificando el valor 1 para el parámetro de arranque del kernel zswap.enabled . [1] [2] [4]
El tamaño máximo de la agrupación de memoria que utiliza zswap se puede configurar a través del parámetro sysfsmax_pool_percent , que especifica el porcentaje máximo de RAM total del sistema que puede ocupar el grupo. El grupo de memoria no está preasignado a su tamaño máximo configurado, sino que crece y se reduce según sea necesario. Cuando se alcanza el tamaño máximo de grupo configurado como resultado del intercambio realizado, o cuando el crecimiento del grupo es imposible debido a una condición de falta de memoria , las páginas intercambiadas se expulsan del grupo de memoria a un dispositivo de intercambio en el que se haya utilizado menos recientemente ( LRU) base. Este enfoque convierte a zswap en un verdadero caché de intercambio, ya que las páginas almacenadas en caché más antiguas se desalojan a un dispositivo de intercambio una vez que el caché está lleno, lo que deja espacio para que las páginas intercambiadas más nuevas se compriman y almacenen en caché. [1] [4] [7]
zbud es un asignador de memoria de propósito especial utilizado internamente por zswap para almacenar páginas comprimidas, implementado como una reescritura del asignador zbud utilizado por zcache de Oracle , [8] que es otra implementación de compresión de memoria virtual para el kernel de Linux. Internamente, zbud funciona almacenando hasta dos páginas comprimidas (" amigos ", de ahí el nombre del asignador) por página de memoria física, lo que trae tanto ventajas debido a la fácil unión y reutilización del espacio liberado como desventajas debido a una posible menor utilización de memoria. Sin embargo, como resultado de su diseño, zbud no puede asignar más espacio de memoria del que ocuparían originalmente las páginas sin comprimir. [3] [9]
Historia
Tanto zswap como zbud fueron creados por Seth Jennings. El primer anuncio público fue en diciembre de 2012, y el desarrollo continuó hasta mayo de 2013, momento en el que la base de código alcanzó su madurez, aunque todavía tiene el estado de una función de kernel experimental. [10] [11]
zswap (junto con zbud) se fusionó en la línea principal del kernel de Linux en la versión 3.11 del kernel, que se lanzó el 2 de septiembre de 2013. [4] [12]
Desde la versión 3.15 del kernel de Linux, que se lanzó el 8 de junio de 2014, zswap admite correctamente varios dispositivos de intercambio. [13] [14]
Alternativas
Una de las alternativas a zswap es zram , que proporciona un mecanismo de "intercambio de páginas comprimidas a RAM" similar pero diferente al del kernel de Linux.
La principal diferencia es que zram proporciona un dispositivo de bloque comprimido que utiliza RAM para almacenar datos, que actúa como un dispositivo de intercambio normal e independiente.
En comparación, zswap actúa como un caché basado en RAM para dispositivos de intercambio. Esto proporciona a zswap un mecanismo de desalojo para las páginas intercambiadas menos utilizadas, del que carece zram. Sin embargo, como resultado de su diseño, se requiere al menos un dispositivo de intercambio ya existente para que se utilice zswap. [15]
Ver también
- Caché (informática)
- Intercambio de Linux
- Intercambiar particiones en SSD
Referencias
- ↑ a b c d Seth Jennings (12 de febrero de 2013). "El caché de intercambio comprimido zswap" . LWN.net . Consultado el 22 de enero de 2014 .
- ^ a b Jenifer Hopper (11 de diciembre de 2012). "Nueva funcionalidad de compresión zswap de Linux" . IBM . Consultado el 31 de enero de 2014 .
- ^ a b Michael Larabel (11 de julio de 2013). "Zswap se fusionó con el kernel de Linux 3.11" . Phoronix . Consultado el 5 de febrero de 2014 .
- ^ a b c d "Documentación del kernel de Linux: Documentation / vm / zswap.txt" . kernel.org . 22 de noviembre de 2013 . Consultado el 22 de enero de 2014 .
- ^ Dan Magenheimer (22 de abril de 2010). "Frontswap [PATCH 0/4] (era memoria trascendente): descripción general" . gmane.org . Consultado el 23 de diciembre de 2014 .
- ^ Jonathan Corbet (4 de mayo de 2010). "Cleancache y Frontswap" . LWN.net . Consultado el 26 de marzo de 2014 .
- ^ "Árbol de fuentes del kernel de Linux: kernel / git / torvalds / linux.git: zswap: agregar a mm /" . kernel.org . 11 de julio de 2013 . Consultado el 5 de febrero de 2014 .
- ^ Dan Magenheimer (29 de marzo de 2012). "Zcache y RAMster (oh, y frontswap también): descripción general y algunas evaluaciones comparativas" (PDF) . oss.oracle.com . pag. 12 . Consultado el 19 de agosto de 2015 .
- ^ "Árbol de fuentes del kernel de Linux: kernel / git / torvalds / linux.git: zbud: agregar a mm /" . kernel.org . 11 de julio de 2013 . Consultado el 5 de febrero de 2014 .
- ^ "[PATCH 0/8] zswap: caché de intercambio comprimido" . gmane.org . 11 de diciembre de 2012 . Consultado el 5 de enero de 2014 .
- ^ "[PATCHv10 0/4] zswap: caché de intercambio comprimido" . gmane.org . 8 de mayo de 2013 . Consultado el 5 de enero de 2014 .
- ^ "Linux kernel 3.11, sección 9. Zswap: un caché de intercambio comprimido" . kernelnewbies.org . 2 de septiembre de 2013 . Consultado el 22 de enero de 2014 .
- ^ "Linux kernel 3.15, sección 4. Gestión de memoria" . kernelnewbies.org . 8 de junio de 2014 . Consultado el 15 de junio de 2014 .
- ^ "Árbol de fuentes del kernel de Linux: kernel / git / torvalds / linux.git: mm / zswap: admite varios dispositivos de intercambio" . kernel.org . 7 de abril de 2014 . Consultado el 15 de junio de 2014 .
- ^ Dan Magenheimer (3 de abril de 2013). "Compresión de memoria en el núcleo" . LWN.net . Consultado el 8 de marzo de 2014 .
enlaces externos
- Documentación del kernel de zswap Linux
- Compresión de memoria transparente de Linux en YouTube , 30 de septiembre de 2013, por Seth Jennings
- Zswap: un complemento de página comprimida para Linux kswapd , Universidad de Lieja, 15 de marzo de 2013, por Sylvain Martin
- The Compression Cache: Virtual Memory Compression for Handheld Computers , 16 de marzo de 2000, por Michael J. Freedman