7 votos

Desactivar el intercambio de memoria inactiva

Antecedentes:

OSX guarda cierta información en la RAM que ya no se utiliza, pero que se ha utilizado recientemente. Esto se llama memoria inactiva y pretende mejorar la experiencia del usuario acelerando algunas acciones:

Por ejemplo, si has estado usando Mail y luego lo dejas, la RAM que Mail estaba utilizando se marca como memoria inactiva. La memoria inactiva está disponible para ser utilizada por otra aplicación, al igual que la memoria libre. Sin embargo, si abre Mail antes de que su memoria Inactiva sea utilizada por una aplicación diferente, Mail se abrirá más rápido porque su memoria Inactiva inactiva se convierte en memoria activa, en lugar de cargarla desde la unidad más lenta.

Suena cuestionable (¿cuánto puede acelerar Mail en una máquina de cuatro núcleos?), pero al menos eso no podría herido ya que dicha memoria puede ser tratada como memoria libre. En realidad, puede :

En OS X, cuando el número de páginas en la lista libre cae por debajo de un el kernel recupera páginas físicas para la lista libre intercambiando libre mediante el intercambio de páginas inactivas fuera de la memoria.

Esto me hace cuestionar si el manejo de la memoria de OSX es de hecho superior; después de todo la misma página menciona que

Cualquier tipo de paginación... afecta negativamente al rendimiento porque obliga al sistema a pasar mucho tiempo leyendo y escribiendo en el disco. La lectura de una página desde el almacén de respaldo toma una cantidad significativa de tiempo y es mucho más lento que leer directamente desde la RAM. Si el sistema tiene que escribir una página en el disco antes de poder leer otra página del disco, el impacto en el rendimiento es aún peor.

Asunto:

Esto (la paginación de la memoria inactiva y la subsiguiente degradación severa del rendimiento) es probable que ocurra incluso durante tareas triviales como la navegación con varias pestañas, incluso si el número de pestañas abiertas simultáneamente se mantiene dentro de lo razonable (tanto Safari como Chrome parecen ser culpables de añadir a la memoria inactiva cada vez que se cierra una pestaña).

La máquina se vuelve apenas utilizable cuando esto sucede - incluso abriendo Terminal y purgar la memoria puede tardar unos minutos.

Pregunta:

¿Se puede desactivar el intercambio de memoria inactiva? O, al no ser esencial la memoria inactiva, ¿puede desactivarse por completo?

Alternativamente, ¿existe un demonio o una aplicación preferentemente de Apple que supervise uso de memoria inactiva (un oxímoron de OSX) y cuando sobrepasa una cantidad arbitraria (¿medio giga?) un purge ¿se realiza?

1 votos

Viendo las etiquetas supongo que todavía no han arreglado la paginación de la memoria inactiva en Mountain Lion.

0 votos

@Pieter: aparentemente no hay nada que arreglar porque la implementación actual es tal y como Apple pretendía :)

0 votos

¿Han confirmado que esto "funciona como estaba previsto"? No entiendo cuáles son los beneficios de intercambiar la memoria inactiva al disco.

7voto

Quantumpanda Puntos 71

He estado investigando esta misma cuestión durante algún tiempo, y he llegado a la conclusión de que, aunque hay varias de las llamadas "soluciones" que se ofrecen en diversos lugares, ninguna de ellas arregla realmente el problema ni hace desaparecer los síntomas. Lo mejor que he encontrado son las técnicas que cambian cuando la memoria inactiva se intercambia, como el uso de la purge comando al que te refieres. Creo que MacLemon tiene razón en que el intercambio sólo se puede deshabilitar en su totalidad y no de forma selectiva, por lo que deshabilitar el intercambio de la memoria inactiva equivaldría en la práctica a deshabilitar la memoria virtual por completo, lo que podría ser una solución viable en una máquina con cantidades realmente grandes de RAM, pero es poco práctica en máquinas con una capacidad máxima de RAM baja, como los MacBooks o Minis.

La razón por la que ninguna de las soluciones de purga ad-hoc mejora significativamente la situación es que realmente sólo hay dos formas de forzar a OS X a borrar la memoria inactiva: el purge o forzar la asignación de toda la memoria libre (y como no estoy seguro de qué método purge usos, estos dos pueden ser en realidad más o menos lo mismo). purge como ha mencionado, lleva una cantidad de tiempo no trivial para completar. La asignación de toda la memoria libre simplemente acelera el proceso por el que el contenido de la memoria inactiva se intercambiaría de forma natural, por lo que sigue ocupando la misma gran cantidad de recursos del sistema. La única ventaja de cualquiera de estas soluciones es que te permiten elegir el momento en que se produce el intercambio, por lo que se puede hacer antes de que normalmente se trate de asignar esa memoria a otra cosa. Que esto sea realmente útil para ti depende de varios factores, así que la forma más sencilla de averiguarlo es simplemente probarlo.

He estado probando algunas de las utilidades de limpieza de memoria que hay por ahí, y he descubierto que para mí, forzar manualmente el intercambio inactivo requiere una supervisión más activa de los niveles de memoria de lo que es práctico mientras estoy trabajando realmente, y el uso de una utilidad que fuerza automáticamente el intercambio cuando la memoria libre cae por debajo de un determinado umbral no es mejor que dejar que el sistema operativo lo haga por sí mismo, ya que todavía no tengo control sobre cuándo se producirá el intercambio y mis aplicaciones se SPOD. Así que aunque hay una aplicación que hará exactamente lo que pide tu pregunta alternativa, eso no hace que la situación sea menos dolorosa.

Hasta que el equipo de desarrollo del sistema operativo de Apple decida que el sistema de gestión de la memoria no está funcionando como se supone que debe hacerlo, y descubran una manera de hacerlo funcionar correctamente, la única solución real es identificar qué aplicaciones están generando la mayor parte de la memoria inactiva y dejar de usarlas. En mi situación, esto ha significado cambiar de navegador web. He estado probando una variedad de ellos, y Chrome es hasta ahora el que parece generar menos memoria inactiva, probablemente en parte porque cada pestaña y cada extensión se ejecuta como un proceso separado, lo que permite que la gestión de la memoria nativa del sistema operativo trate a cada uno por separado en términos de priorizar el intercambio. Safari es el peor que he probado; a partir de Safari 5.1, podía abrir unas cuantas pestañas, no hacer absolutamente nada, y ver cómo la memoria inactiva aumentaba rápidamente en el Monitor de Actividad: pasaba fácilmente de <1 gb inactivo a >3 gb inactivo en unos cinco minutos, ejecutaba el ciclo de intercambio y luego hacía exactamente lo mismo. (De acuerdo, la memoria que no está haciendo nada es exactamente lo que la hace inactiva en primer lugar, pero no debería crear más memoria inactiva de la que se asignó activa en primer lugar). Safari 6 bajo Mountain Lion es un poco mejor, pero no lo suficiente como para que merezca la pena volver a cambiarlo. Firefox, al no estar basado en WebKit, debería ser mejor en esto que Safari o Chrome, pero tiene su propio legado de problemas de gestión de memoria, incluyendo un historial de fugas de memoria, que no lo hacen mejor en la práctica.

Lo que realmente solucionaría el problema es que hubiera una opción, probablemente una opción oculta en el sistema operativo, que le dijera al sistema operativo que simplemente volcara el contenido de la memoria inactiva cuando fuera necesario en lugar de intercambiar su contenido al disco. Pero no espero que Apple ponga nunca a disposición esa opción.

0 votos

"Lo que realmente solucionaría el problema es que (el SO) simplemente volcara el contenido de la memoria inactiva cuando lo necesitara en lugar de intercambiar su contenido al disco". Como se explica en mi respuesta El sistema operativo hace exactamente eso. Simplemente te perdiste esa parte de la documentación.

6voto

scottmarlowe Puntos 2952

¿Cuánta memoria RAM tiene tu Mac? Además, los navegadores (especialmente los Webkit) son conocidos por utilizar enormes cantidades de memoria en estos días. La memoria inactiva se aprovecha en contraposición a la RAM libre, que se queda ahí consumiendo energía. En el caso de un navegador, esto te permite deshacer el cierre de una pestaña y mantener su historial, etc.

Puede desactivar completamente el intercambio de memoria ejecutando sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist y un reinicio. No se puede desactivar selectivamente el intercambio.

Puedes deshacerlo ejecutando sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist y reiniciar de nuevo.

0 votos

" La memoria inactiva se pone a buen recaudo " - +1 .

0 votos

@MacLemon con 4GB de RAM y maverick os, siento que este mac es realmente lento. Tengo cerca de 1,5GB de RAM inactiva.. Solo estoy probando tu sugerencia, pero parece que no funciona bien. ¿alguna otra sugerencia?

0 votos

Nunca he dicho que vaya a funcionar bien y la primera pregunta era sobre la cantidad de RAM del Mac. Responde a tu pregunta. La solución adecuada a tu pregunta es conseguir más RAM.

3voto

Old Pro Puntos 2851

Actualización 2020

Esta pregunta se formuló en 2012 y esta respuesta se escribió en 2020, y algunas cosas han cambiado en el ínterin, pero muchas siguen siendo las mismas.

Creo que la mayor parte de esta pregunta, la respuesta de Quantumpanda, y la descripción del artículo de soporte de Apple sufren de un malentendido de la naturaleza de la "memoria inactiva". El OP apunta a la documentación de Apple que dice

En OS X, cuando el número de páginas en la lista libre cae por debajo de un umbral calculado, el núcleo recupera páginas físicas para la lista libre intercambiando las páginas inactivas fuera de la memoria.

La documentación de Apple lo decía en 2012 y lo sigue diciendo en 2020. Sin embargo, esa cita viene de la sección "Paging Out Process" de la documentación; el OP se perdió la discusión de " Listas de páginas en el núcleo ". La frase clave (para nuestros propósitos actuales) en esa sección es

Si una página inactiva no ha sido modificada y no está permanentemente residente (conectada), es robada (cualquier asignación virtual actual a ella es destruida) y añadida a la lista libre.

De qué hablaba el artículo de apoyo

Por ejemplo, si has estado usando Mail y luego lo dejas, la memoria RAM que estaba usando Mail se marca como memoria inactiva. La memoria inactiva está disponible para ser utilizada por otra aplicación, al igual que la memoria libre. Sin embargo, si abre Mail antes de que su memoria Inactiva sea utilizada por otra aplicación, Mail se abrirá más rápido porque su memoria Inactiva se convierte en memoria Activa, en lugar de cargarla desde la unidad más lenta.

Para ejecutar un programa, Mail en este ejemplo, el código de ese programa se lee del disco y se escribe en la RAM, porque la CPU sólo puede ejecutar código desde la RAM. El sistema operativo lleva la cuenta de que la RAM es una copia de un archivo en el disco, y lleva la cuenta de si los datos en la RAM han sido modificados o no. Cuando el programa de correo sale, la copia de RAM del archivo ya no es necesaria y termina en la lista de "inactivos". Sin embargo, si hay mucha memoria RAM, no hay necesidad de destruir los datos en la RAM, por lo que se dejan como están.

Ahora, si ejecuta el programa de nuevo de inmediato, el SO no tiene que copiar el código del disco a la RAM porque puede ver, mirando a través de la lista inactiva, que ya tiene una copia del archivo en la RAM, por lo que simplemente mueve esa RAM a la lista activa y la asigna al nuevo programa de correo en ejecución. Esto es mucho más rápido que releer el archivo desde el disco.

Sin embargo, Mail es un mal ejemplo, porque no es frecuente detener e iniciar el programa de correo. Sin embargo, hay docenas de pequeños programas que el sistema operativo ejecuta en segundo plano, como por ejemplo para mantener los índices de Spotlight actualizados o para mantener tus datos locales sincronizados con iCloud, que se ejecutan con frecuencia y se cierran cuando terminan. Para estos programas el ahorro de tiempo es mucho más significativo.

El punto crítico: este tipo de memoria inactiva es nunca intercambiado

Este tipo de memoria, que está respaldada por un archivo en el disco y no se modifica, es nunca se escribe en el swap porque ya existe una copia en disco en otro lugar. Este es el tipo de memoria que se menciona en la cita añadida más arriba: "no ha sido modificada y no es residente permanente". Cuando no hay suficiente memoria, este tipo de memoria inactiva no se intercambia, se roba y se coloca directamente en la lista libre.

La memoria inactiva que se intercambia es la memoria que una aplicación en ejecución todavía necesita

La otra forma en que la memoria se vuelve inactiva es si una aplicación no la ha tocado (leído o escrito) en un tiempo. Por ejemplo, si estás trabajando en un procesador de textos y tienes varios archivos abiertos, esto podría ser información sobre uno de los archivos que tienes abiertos pero en el que no estás trabajando. Cuando la memoria se agota, este tipo de memoria es intercambiada al disco para hacer espacio para lo que sea que esté solicitando memoria en este momento y que esté causando que la memoria se agote.

Este tipo de memoria inactiva debe ser intercambiado porque contiene datos que no se guardan en ninguna otra parte. La única manera de evitar que este tipo de memoria se intercambie es deshabilitando el intercambio por completo, y eso es casi siempre una mala elección. Cuando se desactiva el swap por completo, se reduce la capacidad del sistema de forma significativa. Si se limita el sistema a ejecutar sólo lo que puede ejecutar con el swap deshabilitado, funcionará igual de bien con el swap habilitado.

purge es una pista falsa

El purge programa es una pista falsa contraproducente. Forzará que la memoria inactiva que sería robada en lugar de intercambiada sea robada de inmediato. Esto puede parecer bueno para los números, pero en realidad perjudica el rendimiento de dos maneras:

  1. Se necesita tiempo para ejecutar el purge programa
  2. Elimina el rendimiento que se gana al llevar la cuenta de lo que contiene la memoria inactiva y permite reutilizarla.

Conclusión: no intente desactivar el intercambio de memoria inactiva

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X