Compresión de memoria virtual


De Wikipedia, la enciclopedia libre
  (Redirigido desde la compresión de memoria )
Saltar a navegación Saltar a búsqueda

La compresión de memoria virtual (también conocida como compresión de RAM y compresión de memoria ) es una técnica de administración de memoria que utiliza la compresión de datos para reducir el tamaño o la cantidad 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 almacenan en la memoria física , que generalmente es una memoria de acceso aleatorio (RAM), o se envían comprimidas a un almacenamiento auxiliar, como una unidad de disco duro. (HDD) o unidad de estado sólido (SSD). En ambos casos elEl rango de memoria virtual , cuyo contenido ha sido comprimido, se marca como inaccesible, de modo que los intentos de acceder a las páginas comprimidas pueden desencadenar fallas en la página y la reversión del proceso (recuperación del almacenamiento auxiliar y descompresión). La huella de los datos que se paginan 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 más pequeña y, por lo tanto, lleva menos tiempo. [2] [3]

En algunas implementaciones, incluyendo zswap , zram y Helix Software Company ‘s huracán , todo el proceso se implementa en software. En otros sistemas, como el MXT de IBM, el proceso de compresión ocurre en un procesador dedicado que maneja transferencias entre un caché local y RAM.

La compresión de la memoria virtual es distinta de los sistemas de recolección de basura (GC), que eliminan los bloques de memoria no utilizados y, en algunos casos, consolidan las regiones de memoria utilizadas, lo que reduce la fragmentación y mejora la eficiencia. Compresión de memoria virtual es también distinto de cambio de contexto sistemas, tales como Connectix 's RAM Doubler (aunque también lo hizo la compresión en línea) y Apple OS 7.1, en la que los procesos inactivos se suspenden y después se comprimen como un todo. [4]

Beneficios

Al reducir la actividad de E / S causada por las solicitudes de paginación, la compresión de la memoria virtual puede producir mejoras generales en el rendimiento. El grado de mejora del rendimiento depende de una variedad de factores, incluida la disponibilidad de cualquier coprocesador de compresión, ancho de banda libre en la CPU, velocidad del canal de E / S, velocidad de la memoria física y la compresibilidad del contenido de la memoria física. .

En CPU de varios núcleos y subprocesos, algunos puntos de referencia muestran mejoras de rendimiento de más del 50%. [5] [6]

En algunas situaciones, como en los dispositivos integrados , el almacenamiento auxiliar es limitado o inexistente. En estos casos, la compresión de la memoria virtual puede permitir que funcione un sistema de memoria virtual, donde de lo contrario la memoria virtual tendría que estar deshabilitada. Esto permite que el sistema ejecute cierto software que, de otro modo, no podría funcionar en un entorno sin memoria virtual. [7]

La memoria flash tiene ciertas limitaciones de resistencia en el número máximo de ciclos de borrado que puede sufrir, que puede ser tan bajo como 100 ciclos de borrado. En los sistemas en los que se utiliza la memoria Flash como único sistema de almacenamiento auxiliar, la implementación de la compresión de la memoria virtual puede reducir la cantidad total de datos que se escriben en el almacenamiento auxiliar, lo que mejora la confiabilidad del sistema.

Defectos

Relaciones de compresión bajas

Uno de los problemas principales es el grado en que el contenido de la memoria física se puede comprimir bajo cargas del mundo real. El código del programa y muchos de los datos almacenados en la memoria física a menudo no son altamente comprimibles, ya que las técnicas de programación y las arquitecturas de datos eficientes están diseñadas para eliminar automáticamente la redundancia en los conjuntos de datos. Varios estudios muestran ratios de compresión de datos típicos que van de 2: 1 a 2,5: 1 para datos de programa, [8] [9] similares a los ratios de compresión típicamente alcanzables con compresión de disco . [7]

E / S de fondo

Para que la compresión de la memoria virtual proporcione mejoras de rendimiento medibles, el rendimiento del sistema de memoria virtual debe mejorarse en comparación con el 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 o aplicaciones de E / S con conjuntos de datos altamente comprimibles, las ganancias pueden ser sustanciales. [7]

Mayor paliza

La memoria física utilizada por un sistema de compresión reduce la cantidad de memoria física disponible para los procesos que ejecuta un sistema, lo que puede resultar en una mayor actividad de paginación y una reducción de la 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 la reducción de la cantidad de memoria física disponible para los procesos del sistema da como resultado un aumento exponencial de la actividad de paginación. [10] [11]

En circunstancias en las que la cantidad de memoria física libre es baja y de paginación es bastante frecuente, cualquier beneficio de rendimiento proporcionadas por el sistema de compresión (en comparación a la paginación directamente hacia y desde el almacenamiento auxiliar) pueden ser compensados por un mayor error de página tasa que lleva a thrashingy rendimiento degradado del sistema. En un estado opuesto, donde hay suficiente memoria física disponible y la actividad de paginación es baja, es posible que la compresión no afecte el rendimiento lo suficiente como para ser perceptible. El término medio entre estas dos circunstancias‍ ("RAM baja con alta actividad de paginación y mucha RAM con baja actividad de paginación") es donde la compresión de memoria virtual puede ser más útil. Sin embargo, cuanto más comprimibles son los datos del programa, más pronunciadas son las mejoras de rendimiento, ya que se necesita menos memoria física para almacenar los datos comprimidos.

Por ejemplo, para maximizar el uso de un 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 retendrí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. [12] [4]

Problemas de precio / rendimiento

En las implementaciones de hardware, la tecnología también se basa en las diferencias de precio entre los diversos componentes del sistema, por ejemplo, la diferencia entre el costo de RAM y el costo de un procesador dedicado a la compresión. Las diferencias relativas de precio / rendimiento de los distintos componentes tienden a variar con el tiempo. Por ejemplo, la adición de un coprocesador de compresión puede tener un impacto mínimo en el costo de una CPU.

Priorización

En una implementación típica de memoria virtual, la paginación ocurre sobre la base de un uso menos reciente , lo que potencialmente hace que el algoritmo de compresión use los ciclos de CPU que tratan con 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, la barra de compresión es más alta, ya que el ciclo de E / S que está intentando eliminar es mucho más corto, particularmente en dispositivos de memoria flash.

Compresión mediante cuantificación

Los diseñadores de aceleradores aprovechan la cuantificación para reducir el ancho de bits de los valores y reducir el costo del movimiento de datos. Sin embargo, cualquier valor que no encaje en el ancho de bits reducido resulta en un desbordamiento (nos referimos a estos valores como valores atípicos). Por lo tanto, los aceleradores utilizan la cuantificación para aplicaciones que son tolerantes a los desbordamientos. En la mayoría de las aplicaciones, la tasa de valores atípicos es baja y los valores suelen estar dentro de un rango estrecho [13]brindando la oportunidad de explotar la cuantificación en procesadores de propósito general. Sin embargo, una implementación de software de cuantificación en procesadores de propósito general tiene tres problemas. Primero, el programador tiene que implementar manualmente las conversiones y las instrucciones adicionales que cuantifican y descuantifican los valores, imponiendo el esfuerzo y la sobrecarga de rendimiento del programador. En segundo lugar, para cubrir los valores atípicos, el ancho de bits de los valores cuantificados suele ser mayor o igual que los valores originales. En tercer lugar, el programador debe utilizar un ancho de bits estándar; de lo contrario, la extracción de un ancho de bits no estándar (es decir, 1-7, 9-15 y 17-31) para representar números enteros estrechos exacerba la sobrecarga de la cuantificación basada en software. Un soporte de hardware en la jerarquía de memoria de los procesadores de propósito general para cuantificación puede resolver estos problemas.El soporte de hardware permite representar valores por pocos y flexibles números de bits y almacenar valores atípicos en su formato original en un espacio separado, evitando cualquier desbordamiento. Minimiza los metadatos y la sobrecarga de localizar valores cuantificados mediante una interacción software-hardware que transfiere los parámetros de cuantificación y el diseño de datos al hardware. Como resultado, la cuantificación transparente basada en hardware tiene tres ventajas sobre las técnicas de compresión de caché: (i) menos metadatos, (ii) mayor índice de compresión para valores de punto flotante y bloques de caché con múltiples tipos de datos, y (iii) menor sobrecarga para localizar los bloques comprimidos.Minimiza los metadatos y la sobrecarga de localizar valores cuantificados mediante una interacción software-hardware que transfiere los parámetros de cuantificación y el diseño de datos al hardware. Como resultado, la cuantificación transparente basada en hardware tiene tres ventajas sobre las técnicas de compresión de caché: (i) menos metadatos, (ii) mayor índice de compresión para valores de punto flotante y bloques de caché con múltiples tipos de datos, y (iii) menor sobrecarga para localizar los bloques comprimidos.Minimiza los metadatos y la sobrecarga de localizar valores cuantificados mediante una interacción software-hardware que transfiere los parámetros de cuantificación y el diseño de datos al hardware. Como resultado, la cuantificación transparente basada en hardware tiene tres ventajas sobre las técnicas de compresión de caché: (i) menos metadatos, (ii) mayor índice de compresión para valores de punto flotante y bloques de caché con múltiples tipos de datos, y (iii) menor sobrecarga para localizar los bloques comprimidos.[13]

Historia

La compresión de memoria virtual ha ido ganando popularidad 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 interfaces RAM mejoradas como DDR3 , lo que reduce la necesidad de compresión de memoria virtual, mientras que los procesadores multinúcleo, las granjas de servidores y la tecnología móvil junto con la llegada de flash los sistemas basados ​​hacen que la compresión de memoria virtual sea más atractiva.

Orígenes

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 gestión de pilas y jerarquías de memoria"), y que aparece en ACM SIGPLAN Avisos de enero de 1991. [14]

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

En 1995, el costo de RAM casi $ 50 por megabyte , y Microsoft 's Windows 95 aparece un requisito mínimo de 4 MB de memoria RAM. [15] Debido al alto requerimiento de RAM, se lanzaron varios programas que afirmaban usar tecnología de compresión para ganar "memoria". Más notorio fue el SoftRam programa desde Syncronys Softcorp. Se reveló que SoftRAM era un "software placebo" que no incluía ninguna tecnología de compresión. [16] [7] Otros productos, incluidos Hurricane y MagnaRAM , incluían compresión de memoria virtual, pero implementaban solo codificación de longitud de ejecución , con malos resultados, lo que le daba a la tecnología una reputación negativa.[17]

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

En 1996, IBM comenzó a experimentar con la compresión y en 2000 IBM anunció su Tecnología de expansión de memoria (MXT). [18] [19] MXT era un chip independiente que actuaba como caché de la 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 se dirigían hacia / desde la memoria física. Las pruebas posteriores de la tecnología realizadas por Intel mostraron una mejora general del rendimiento del sistema del 5 al 20%, similar a los resultados obtenidos por PC Magazine con Hurricane. [20]

Desarrollos 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 Chrome OS [21] y Android  4.4
  • En 2010, IBM lanzó Active Memory Expansion (AME) para AIX 6.1, que implementa la compresión de memoria virtual. [22]
  • En 2012, algunas versiones del chip POWER7 + incluían aceleradores de hardware AME que usaban el algoritmo de compresión 842 para soporte de compresión de datos, usado en AIX, para compresión de memoria virtual. [23] Los procesadores POWER más recientes continúan admitiendo la función.
  • En diciembre de 2012, se anunció el proyecto zswap ; se fusionó con la línea 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. [24] [25]
  • Una actualización de " Windows Insider Preview" del 10 de agosto de 2015 para Windows 10 (compilación 10525) agregó soporte para la compresión de RAM. [26]

Ver también

  • Compresión de disco
  • Intercambiar particiones en SSD

Referencias

  1. ^ Wilson, Paul R .; Kaplan, Scott F .; Smaragdakis, Yannis (6 de junio de 1999). El caso del almacenamiento en caché comprimido en sistemas de memoria virtual (PDF) . Conferencia Técnica Anual de USENIX. Monterey, California, Estados Unidos. págs. 101-116.
  2. ^ a b Patente de EE. UU. 5559978 
  3. ^ a b Patente de EE. UU. 5875474 
  4. ^ a b El amplificador de memoria de Mac se actualiza . Revista ComputerWorld. 1996-09-09 . Consultado el 12 de enero de 2015 .
  5. ^ Jennings, Seth. "Compresión de memoria transparente en Linux" (PDF) . linuxfoundation.org . Consultado el 1 de enero de 2015 .
  6. ^ "Números de rendimiento para compcache" . Consultado el 1 de enero de 2015 .
  7. ↑ a b c d Paul, Matthias 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 - Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds [ Consejos y trucos para Novell DOS 7, con un enfoque en detalles indocumentados, errores y soluciones ]. MPDOSTIP . Release 157 (en alemán) (3 ed.). Archivado desde el original el 5 de noviembre de 2016 . Consultado el 11 de enero de 2012 .
  8. Simpson, Matthew (2014). "Análisis de algoritmos de compresión para datos de programa" (PDF) . pag. 6 . Consultado el 9 de enero de 2015 .
  9. ^ Rizzo, Luigi (1996). "Un algoritmo muy rápido para la compresión de RAM" . Revisión de sistemas operativos ACM SIGOPS . 31 (2): 8. doi : 10.1145 / 250007.250012 . S2CID 18563587 . Consultado el 9 de enero de 2015 . 
  10. ^ Denning, Peter J. (1968). "Thrashing: sus causas y prevención" (PDF) . Actas AFIPS, Fall Joint Computer Conference . 33 : 918 . Consultado el 5 de enero de 2015 .
  11. Freedman, Michael J. (16 de marzo de 2000). "La caché de compresión: compresión de memoria virtual para computadoras de mano" (PDF) . Consultado el 9 de enero de 2015 .
  12. ^ a b "El huracán 2.0 exprime la mayor cantidad de memoria de su sistema" . Revista de PC . 1996-10-08 . Consultado el 1 de enero de 2015 .
  13. ↑ a b Lenjani, Marzieh (3 de noviembre de 2019). "Una jerarquía de memoria cuantificada sin desbordamiento en procesadores de propósito general" (PDF) . En Actas del Simposio Internacional IEEE sobre Caracterización de la Carga de Trabajo . Consultado el 16 de marzo de 2020 .
  14. ^ Wilson, Paul R. (1991). "Algunos problemas y estrategias en jerarquías de memoria y gestión de montón". Avisos ACM SIGPLAN . 26 (3): 45–52. doi : 10.1145 / 122167.122173 . S2CID 15404854 . 
  15. ^ "Requisitos de instalación de Windows 95" . Microsoft . Consultado el 1 de enero de 2015 .
  16. ^ "SoftRAM bajo Scruitny" . Revista de PC . 1996-01-23 . Consultado el 1 de enero de 2015 .
  17. ^ a b "Mejoradores del rendimiento" . Revista de PC . 1997-04-08 . Consultado el 1 de enero de 2015 .
  18. ^ "El avance de la investigación de IBM duplica la capacidad de memoria de la computadora" . IBM . 2000-06-26 . Consultado el 1 de enero de 2015 .
  19. ^ "Tecnologías de expansión de memoria" . IBM . Consultado el 1 de enero de 2015 .
  20. Kant, Krishna (1 de febrero de 2003). "Una evaluación de las alternativas de compresión de la memoria" . Intel Corporation . Consultado el 1 de enero de 2015 .
  21. ^ "CompCache" . Código de Google . Consultado el 1 de enero de 2015 .
  22. ^ "Expansión de memoria activa AIX 6.1" . IBM . Consultado el 1 de enero de 2015 .
  23. ^ "Análisis profundo de hardware de sistemas de energía de IBM" (PDF) . IBM . Consultado el 1 de enero de 2015 .
  24. ^ "OS X 10.9 Mavericks: la revisión de Ars Technica" . 2013-10-22.
  25. ^ "El caso del almacenamiento en caché comprimido en sistemas de memoria virtual" .
  26. Aul, Gabe (18 de agosto de 2015). "Anuncio de Windows 10 Insider Preview Build 10525" . Blogging de Windows . Microsoft . Consultado el 19 de agosto de 2015 .
Obtenido de " https://en.wikipedia.org/w/index.php?title=Virtual_memory_compression&oldid=1041782407 "