Articulo de referencia

Compresión de memoria virtual

La compresión de memoria virtual (también conocida como compresión de RAM o compresión de memoria ) es una técnica de gestión de memoria que utiliza la compresión de datos para ...

La compresión de memoria virtual (también conocida como compresión de RAM o compresión de memoria ) es una técnica de gestión de memoria que utiliza la compresión de datos para reducir el tamaño o el número de solicitudes de paginación hacia y desde el almacenamiento auxiliar . [ 1 ] En un sistema de compresión de memoria virtual, las páginas que se van a paginar desde la memoria virtual se comprimen y se almacenan en la memoria física , que suele ser memoria de acceso aleatorio (RAM), o se envían comprimidas a un almacenamiento auxiliar como un disco duro (HDD) o una unidad de estado sólido (SSD). En ambos casos, el rango de memoria virtual , cuyo contenido se ha comprimido, se marca como inaccesible, de modo que los intentos de acceder a las páginas comprimidas pueden provocar fallos de página y la reversión del proceso (recuperación del almacenamiento auxiliar y descompresión). El tamaño de los datos paginados se reduce mediante el proceso de compresión; en el primer caso, la RAM liberada se devuelve al grupo de memoria física disponible, mientras que la parte comprimida se mantiene en la RAM. En el segundo caso, los datos comprimidos se envían al almacenamiento auxiliar, pero la operación de E/S resultante es menor y, por lo tanto, requiere menos tiempo. [ 2 ] [ 3 ]

En algunas implementaciones, como zswap , zram y Hurricane de Helix Software Company , todo el proceso se implementa mediante software. En otros sistemas, como MXT de IBM, el proceso de compresión se realiza en un procesador dedicado que gestiona las transferencias entre una caché local y la RAM.

La compresión de memoria virtual se distingue de los sistemas de recolección de basura (GC), que eliminan bloques de memoria no utilizados y, en algunos casos, consolidan regiones de memoria utilizadas, reduciendo la fragmentación y mejorando la eficiencia. La compresión de memoria virtual también se distingue de los sistemas de cambio de contexto , como el RAM Doubler de Connectix (aunque también realizaba compresión en línea) y Apple OS 7.1, en los que los procesos inactivos se suspenden y luego se comprimen en su conjunto. [ 4 ]

Tipos

Existen dos tipos generales de compresión de memoria virtual  : (1) enviar páginas comprimidas a un archivo de intercambio en la memoria principal, posiblemente con un almacenamiento de respaldo en almacenamiento auxiliar, [ 1 ] [ 5 ] [ 6 ] y (2) almacenar páginas comprimidas junto con páginas sin comprimir. [ 1 ]

El primer tipo (1) suele utilizar algún algoritmo de compresión de diccionario de clase LZ combinado con codificación de entropía , como LZO o LZ4 , [ 6 ] [ 5 ] para comprimir las páginas que se intercambian. Una vez comprimidas, se almacenan en un archivo de intercambio en la memoria principal o se escriben en un almacenamiento auxiliar, como un disco duro. [ 6 ] [ 5 ] En su lugar, se puede utilizar un proceso de dos etapas en el que existe un almacenamiento de respaldo en almacenamiento auxiliar y un archivo de intercambio en la memoria principal, y las páginas que se desalojaron del archivo de intercambio en memoria se escriben en el almacenamiento de respaldo con un ancho de banda de escritura mucho mayor (por ejemplo, páginas/seg) para que la escritura en el almacenamiento de respaldo tome menos tiempo. Este último esquema aprovecha los beneficios de los dos métodos anteriores  : acceso rápido a datos en memoria con un gran aumento en la cantidad total de datos que se pueden intercambiar y un mayor ancho de banda en la escritura de páginas (páginas/seg) en el almacenamiento auxiliar. [ 6 ] [ 5 ] [ 1 ]

Un ejemplo de una clase de algoritmos para la compresión de memoria virtual de tipo (2) es la clase de algoritmos de compresión WK (Wilson-Kaplan et al). Estos aprovechan las regularidades de datos en memoria presentes en punteros y enteros. [ 1 ] [ 7 ] Específicamente, en (el segmento de datos - los algoritmos WK no son adecuados para la compresión de instrucciones [ 1 ] ) el código objetivo generado por la mayoría de los lenguajes de programación de alto nivel, tanto los enteros como los punteros suelen estar presentes en registros cuyos elementos están alineados a palabras. Además, los valores almacenados en enteros suelen ser pequeños. Asimismo, los punteros cercanos entre sí en la memoria tienden a apuntar a ubicaciones que a su vez están cerca en la memoria. Adicionalmente, patrones de datos comunes como una palabra de todos ceros pueden codificarse en la salida comprimida mediante un código muy pequeño (dos bits en el caso de WKdm). Utilizando estas regularidades de datos, la clase de algoritmos WK utiliza un diccionario muy pequeño (16 entradas en el caso de WKdm ) para lograr una relación de compresión de hasta 2:1, al tiempo que consigue velocidades mucho mayores y tiene menos sobrecarga que los esquemas de compresión de diccionario de la clase LZ. [ 1 ] [ 7 ]

Beneficios

Al reducir la actividad de E/S causada por las solicitudes de paginación, la compresión de memoria virtual puede generar mejoras en el rendimiento general. El grado de mejora depende de diversos factores, como la disponibilidad de coprocesadores de compresión, el ancho de banda disponible en la CPU, la velocidad del canal de E/S, la velocidad de la memoria física y la compresibilidad del contenido de la memoria física.

En CPUs multinúcleo y multihilo, algunos benchmarks muestran mejoras de rendimiento de más del 50%. [ 8 ] [ 9 ]

En algunas situaciones, como en dispositivos integrados , el almacenamiento auxiliar es limitado o inexistente. En estos casos, la compresión de memoria virtual permite que un sistema de memoria virtual funcione, cuando de otro modo tendría que deshabilitarse. Esto permite que el sistema ejecute cierto software que, de otro modo, no podría funcionar en un entorno sin memoria virtual. [ 10 ]

deficiencias

Relaciones de compresión bajas

Uno de los problemas principales es el grado en que el contenido de la memoria física puede comprimirse bajo cargas reales. El código del programa y gran parte de los datos almacenados en la memoria física a menudo no son altamente compresibles, ya que las técnicas de programación eficientes y las arquitecturas de datos están diseñadas para eliminar automáticamente la redundancia en los conjuntos de datos. Varios estudios muestran índices de compresión de datos típicos que van de 2:1 a 2,5:1 para los datos del programa, [ 7 ] [ 11 ] similares a los índices de compresión que se suelen lograr con la compresión de disco . [ 10 ]

E/S en segundo plano

Para que la compresión de memoria virtual proporcione mejoras de rendimiento medibles, el rendimiento del sistema de memoria virtual debe mejorarse en comparación con su equivalente sin comprimir. Por lo tanto, la cantidad adicional de procesamiento introducida por la compresión no debe aumentar la latencia general. Sin embargo, en sistemas con limitaciones de E/S o aplicaciones con conjuntos de datos altamente compresibles, las ganancias pueden ser sustanciales. [ 10 ]

Aumento de los movimientos bruscos

La memoria física utilizada por un sistema de compresión reduce la cantidad de memoria física disponible para los procesos que ejecuta el sistema, lo que puede provocar un aumento de la actividad de paginación y una menor eficacia general de la compresión de la memoria virtual. Esta relación entre la actividad de paginación y la memoria física disponible es aproximadamente exponencial, lo que significa que reducir la cantidad de memoria física disponible para los procesos del sistema produce un aumento exponencial de la actividad de paginación. [ 12 ] [ 13 ]

En circunstancias donde la cantidad de memoria física libre es baja y la paginación es bastante frecuente, cualquier mejora de rendimiento que proporcione el sistema de compresión (en comparación con la paginación directa hacia y desde el almacenamiento auxiliar) puede verse contrarrestada por un aumento en la tasa de fallos de página que provoca sobrecarga y degradación del rendimiento del sistema. En el caso opuesto, donde hay suficiente memoria física disponible y la actividad de paginación es baja, la compresión puede no tener un impacto significativo en el rendimiento. El punto intermedio entre estas dos circunstancias —pocaRAM con alta actividad de paginación y mucha RAM con baja actividad de paginación— esdonde la compresión de memoria virtual puede ser más útil. Sin embargo, cuanto más compresibles sean los datos del programa, más pronunciadas serán las mejoras de rendimiento, ya que se necesita menos memoria física para almacenar los datos comprimidos.

Por ejemplo, para maximizar el uso de una caché de páginas comprimidas, Hurricane 2.0 de Helix Software Company  proporciona un umbral de rechazo de compresión configurable por el usuario. Al comprimir los primeros 256 a 512 bytes de una  página de 4 KiB, este sistema de compresión de memoria virtual determina si se puede alcanzar el umbral de nivel de compresión configurado para una página en particular; si es posible, el resto de la página se comprimiría y se conservaría en una caché comprimida, y de lo contrario, la página se enviaría al almacenamiento auxiliar a través del sistema de paginación normal. La configuración predeterminada para este umbral es una relación de compresión de 8:1. [ 14 ] [ 4 ]

sobrecarga de utilización de la CPU

En las implementaciones de hardware, la tecnología también se basa en las diferencias de precio entre los distintos componentes del sistema; por ejemplo, la diferencia entre el coste de la memoria RAM y el de un procesador dedicado a la compresión. La relación precio-rendimiento de los distintos componentes tiende a variar con el tiempo. Por ejemplo, la incorporación de un coprocesador de compresión puede tener un impacto mínimo en el coste de la CPU.

Priorización

En una implementación típica de memoria virtual, la paginación se realiza según el uso menos reciente , lo que puede provocar que el algoritmo de compresión consuma ciclos de CPU al procesar los datos de menor prioridad. Además, el código del programa suele ser de solo lectura y, por lo tanto, nunca se pagina. En su lugar, el código simplemente se descarta y se vuelve a cargar desde el archivo de almacenamiento auxiliar del programa si es necesario. En este caso, el umbral de compresión es más alto, ya que el ciclo de E/S que se intenta eliminar es mucho más corto, especialmente en dispositivos de memoria flash.

Historia

La compresión de memoria virtual ha gozado de popularidad intermitente como tecnología. El precio y la velocidad de la RAM y el almacenamiento externo se han desplomado debido a la Ley de Moore y a las mejoras en las interfaces de RAM, como la DDR3 , lo que ha reducido la necesidad de compresión de memoria virtual. Por otro lado, los procesadores multinúcleo, los centros de datos y la tecnología móvil, junto con la aparición de los sistemas basados ​​en memoria flash, hacen que la compresión de memoria virtual sea más atractiva.

Orígenes

La variante Unix de Acorn Computers , RISC iX , se suministró como sistema operativo principal para su estación de trabajo R140 lanzada en 1989. [ 15 ] RISC iX proporcionaba soporte para la paginación bajo demanda de archivos ejecutables comprimidos. Sin embargo, la principal motivación para proporcionar archivos ejecutables comprimidos era alojar un sistema Unix completo en un disco duro de tamaño relativamente modesto. Los datos comprimidos no se paginaban al disco bajo este esquema. [ 16 ] [ 17 ]

Paul R. Wilson propuso el almacenamiento en caché comprimido de páginas de memoria virtual en 1990, en un documento distribuido en el taller ACM OOPSLA/ECOOP '90 sobre recolección de basura ("Algunos problemas y estrategias en la administración de montones y jerarquías de memoria"), y que apareció en ACM SIGPLAN Notices en enero de 1991. [ 18 ]

Helix Software Company fue pionera en la compresión de memoria virtual en 1992, presentando una solicitud de patente para el proceso en octubre de ese año. [ 2 ] En 1994 y 1995, Helix perfeccionó el proceso utilizando compresión de prueba y cachés de memoria secundaria en tarjetas de video y otros dispositivos. [ 3 ] Sin embargo, Helix no lanzó un producto que incorporara compresión de memoria virtual hasta julio de 1996 con el lanzamiento de Hurricane  2.0, que utilizaba el algoritmo de compresión Lempel-Ziv-Stac de Stac Electronics y también utilizaba RAM de video fuera de pantalla como búfer de compresión para obtener beneficios de rendimiento. [ 14 ]

En 1995, la RAM costaba casi 50 dólares por megabyte , y Windows 95 de Microsoft indicaba un requisito mínimo de 4 MB de RAM. [ 19 ] Debido al alto requisito de RAM, se lanzaron varios programas que afirmaban utilizar tecnología de compresión para obtener “memoria”. El más notorio fue el programa SoftRAM de Syncronys Softcorp. SoftRAM fue desenmascarado como falso porque no realizaba ninguna compresión. [ 20 ] [ 10 ] Otros productos, incluidos Hurricane y MagnaRAM , incluían compresión de memoria virtual, pero solo implementaban codificación de longitud de ejecución , con resultados deficientes, lo que le dio a la tecnología una reputación negativa. [ 21 ] 

En su edición del 8 de abril de 1997, PC Magazine publicó una prueba exhaustiva de las afirmaciones de mejora del rendimiento de varias herramientas de compresión de memoria virtual de software. En sus pruebas, PC Magazine encontró una mejora mínima (5% en general) del rendimiento con el uso de Hurricane, y ninguna en absoluto con ninguno de los otros paquetes. [ 21 ] Sin embargo, las pruebas se realizaron en sistemas Intel Pentium que tenían un solo núcleo y eran de un solo hilo, por lo que la compresión impactó directamente en toda la actividad del sistema.

En 1996, IBM comenzó a experimentar con la compresión, y en 2000 anunció su tecnología Memory eXpansion Technology (MXT). [ 22 ] [ 23 ] MXT era un chip independiente que actuaba como caché de CPU entre la CPU y el controlador de memoria. MXT tenía un motor de compresión integrado que comprimía todos los datos que entraban y salían de la memoria física. Las pruebas posteriores de la tecnología realizadas por Intel mostraron una mejora del rendimiento general del sistema de entre el 5 % y el 20 %, similar a los resultados obtenidos por PC Magazine con Hurricane. [ 24 ]

Novedades recientes

  • A principios de 2008, se lanzó un proyecto de Linux llamado zram (originalmente llamado compcache); en una actualización de 2013, se incorporó a ChromeOS [ 25 ] y Android 4.4
  • En 2010, IBM lanzó Active Memory Expansion (AME) para AIX 6.1, que implementa la compresión de memoria virtual. [ 26 ]
  • En 2012, algunas versiones del chip POWER7 + incluían aceleradores de hardware AME que utilizaban el algoritmo de compresión 842 para la compresión de datos, utilizado en AIX, para la compresión de memoria virtual. [ 27 ] Los procesadores POWER más recientes siguen siendo compatibles con esta función.
  • En diciembre de 2012 se anunció el proyecto zswap , que se integró en la rama principal del kernel de Linux en septiembre de 2013.
  • En junio de 2013, Apple anunció que incluiría compresión de memoria virtual en OS X Mavericks , utilizando el algoritmo Wilson-Kaplan WKdm. [ 28 ] [ 29 ]
  • Una actualización del 10 de agosto de 2015 de " Windows Insider Preview" para Windows 10 (compilación 10525) agregó soporte para compresión de RAM. [ 30 ]

Véase también

Referencias

  1. 1 2 3 4 5 6 7 Wilson, Paul R.; Kaplan, Scott F.; Smaragdakis, Yannis (1999-06-06). El caso del almacenamiento en caché comprimido en sistemas de memoria virtual (PDF) . Conferencia Técnica Anual de USENIX. Monterey, California, EE. UU. pp. 101–116 . 
  2. 1 2 US 5559978 , Spilo, Michael L., "Método para aumentar la eficiencia de un sistema de memoria virtual mediante la compresión selectiva del contenido de la memoria RAM", publicado el 24 de septiembre de 1996, asignado a Helix Software Co., Inc. 
  3. 1 2 US 5875474 , Fabrizio, Daniel y Spilo, Michael L., "Método para almacenar en caché la paginación de memoria virtual y las solicitudes de entrada/salida de disco utilizando memoria de vídeo fuera de pantalla", publicado el 23-02-1999, asignado a Helix Software Co., Inc. 
  4. 1 2 "Mac Memory Booster se actualiza" . Computerworld . 30 (37). IDG Enterprise: 56. 9 de septiembre de 1996. ISSN 0010-4841 . Consultado el 12 de enero de 2015 . 
  5. 1 2 3 4 Gupta, Nitin. ""zram: Dispositivos de bloques basados ​​en RAM comprimida"" . docs.kernel.org . La comunidad de desarrollo del kernel . Consultado el 29-12-2023 .
  6. 1 2 3 4 ""zswap"" . www.kernel.org . La comunidad de desarrollo del kernel . Consultado el 29-12-2023 .
  7. 1 2 3 Simpson, Matthew (2014). "Análisis de algoritmos de compresión para datos de programas" (PDF) . págs. 4–14 . Recuperado el 09-01-2015 . 
  8. Jennings, Seth. "Compresión de memoria transparente en Linux" (PDF) . linuxfoundation.org . Archivado del original (PDF) el 4 de enero de 2015. Consultado el 1 de enero de 2015 .
  9. "Datos de rendimiento de compcache" . Consultado el 1 de enero de 2015 .
  10. ^ Paul, Matías R. ( 30 de julio de 1997) [ 14 de abril de 1996]. "Kapitel II.18. Mit STACKER Hauptspeicher 'virtuell' verdoppeln…" [ Utilizando STACKER para 'virtualmente' duplicar la memoria principal… ] . NWDOS-TIPs : consejos y trucos para Novell DOS 7, con Blick auf undokumentierte Detalles, errores y soluciones [ NWDOS-TIPs : consejos y trucos para Novell DOS 7, centrados en detalles, errores y soluciones no documentados ] . Versión 157 (en alemán) (3 ed.). Archivado desde el original el 5 de noviembre de 2016 . Consultado el 11 de enero de 2012 . 
  11. Rizzo, Luigi (1996). "Un algoritmo muy rápido para la compresión de RAM" . ACM SIGOPS Operating Systems Review . 31 (2): 8. doi : 10.1145/250007.250012 . S2CID 18563587. Recuperado el 9 de enero de 2015 . 
  12. Denning, Peter J. (1968). "Thrashing: Its causes and prevention" (PDF) . Proceedings AFIPS, Fall Joint Computer Conference . 33 : 918. Recuperado el 5 de enero de 2015 .
  13. Freedman, Michael J. (2000-03-16). "The Compression Cache: Virtual Memory Compression for Handheld Computers" (PDF) . Recuperado el 2015-01-09 .
  14. 1 2 "Hurricane 2.0 exprime al máximo la memoria de tu sistema" . PC Magazine . 8 de octubre de 1996. Consultado el 1 de enero de 2015 .
  15. Cox, James (diciembre de 1989). "Poder para el pueblo" . Acorn User . págs. 66–67 , 69, 71. Recuperado el 6 de septiembre de 2020 . 
  16. Taunton, Mark (1991). "Ejecutables comprimidos: un ejercicio de pensamiento en pequeño" . Actas de la Conferencia USENIX de verano de 1991, Nashville, TN, EE. UU ., junio de 1991. Asociación USENIX. págs. 385–404 . 
  17. Taunton, Mark (1991-01-22). "Ejecutables comprimidos" . Grupo de noticias : comp.unix.internals . Usenet: 4743@acorn.co.uk . Consultado el 10 de octubre de 2020 .  
  18. Wilson, Paul R. (1991). "Algunos problemas y estrategias en la gestión de montones y jerarquías de memoria". ACM SIGPLAN Notices . 26 (3): 45– 52. doi : 10.1145/122167.122173 . S2CID 15404854 . 
  19. "Requisitos de instalación de Windows 95" . Microsoft . Consultado el 1 de enero de 2015 .
  20. "SoftRAM bajo escrutinio" . PC Magazine . 23 de enero de 1996. Consultado el 1 de enero de 2015 .
  21. 1 2 "Mejora del rendimiento" . PC Magazine . 8 de abril de 1997. Consultado el 1 de enero de 2015 .
  22. "Un avance de investigación de IBM duplica la capacidad de memoria de las computadoras" . IBM . 26 de junio de 2000. Archivado del original el 22 de junio de 2013. Consultado el 1 de enero de 2015 .
  23. "Tecnologías de expansión de memoria" . IBM . Archivado del original el 4 de enero de 2015. Consultado el 1 de enero de 2015 .
  24. Kant, Krishna (1 de febrero de 2003). "Una evaluación de alternativas de compresión de memoria" . Intel Corporation . Archivado del original el 4 de marzo de 2016. Consultado el 1 de enero de 2015 .
  25. "CompCache" . Código de Google . Consultado el 1 de enero de 2015 .
  26. "AIX 6.1 Expansión de memoria activa" . IBM . Archivado del original el 4 de enero de 2015. Consultado el 1 de enero de 2015 .
  27. "Análisis en profundidad del hardware de IBM Power Systems" (PDF) . IBM . Archivado del original (PDF) el 4 de enero de 2015. Consultado el 1 de enero de 2015 .
  28. "OS X 10.9 Mavericks: Reseña de Ars Technica" . 22 de octubre de 2013.
  29. "Argumentos a favor del almacenamiento en caché comprimido en sistemas de memoria virtual" .
  30. Aul, Gabe (18 de agosto de 2015). "Anuncio de la compilación 10525 de Windows 10 Insider Preview" . Blog de Windows Insider . Microsoft . Consultado el 3 de agosto de 2024 .