Deshabilitar el intercambio de memoria inactiva

7

Fondo:

OSX mantiene cierta información en la RAM que ya no se usa, pero que se usó recientemente. Esto se denomina memoria inactiva , y su objetivo es mejorar la experiencia del usuario al acelerar algunas acciones:

  

Por ejemplo, si ha estado usando Mail y luego lo ha cerrado, la RAM que   El correo que estaba usando está marcado como Memoria inactiva. Memoria inactiva es   Disponible para ser utilizado por otra aplicación, al igual que la memoria libre.   Sin embargo, si abre Mail antes de que su memoria inactiva sea utilizada por un   aplicación diferente, Mail se abrirá más rápido porque está inactivo   memoria se convierte en memoria activa, en lugar de cargarla desde el   unidad más lenta.

Suena cuestionable (¿cuánto puede acelerar el correo en una máquina de cuatro núcleos?), pero al menos eso no podría perjudicar a ¡ya que dicha memoria puede tratarse como memoria libre! En realidad, puede :

  

En OS X, cuando el número de páginas en la lista libre cae debajo de un   umbral calculado, el kernel reclama páginas físicas para el libre   lista cambiando las páginas inactivas 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

  

La paginación de cualquier tipo ... afecta el rendimiento negativamente porque   obliga al sistema a pasar mucho tiempo leyendo y escribiendo en el disco.   Leer una página desde la tienda de respaldo requiere una cantidad significativa de   Es mucho más lento que leer directamente desde la memoria RAM. Si el sistema   tiene que escribir una página en el disco antes de que pueda leer otra página del disco,   el impacto en el rendimiento es aún peor.

Problema:

Es probable que esto (la paginación de la memoria inactiva y la subsiguiente degradación severa del rendimiento) ocurra incluso durante tareas triviales como la navegación con múltiples pestañas, incluso si el número de pestañas abiertas simultáneamente se mantiene dentro de un valor razonable (parece que tanto Safari como Chrome ser culpable de agregar a la memoria inactiva cada vez que se cierra una pestaña).

La máquina se vuelve difícil de usar cuando esto sucede, incluso abriendo Terminal y purgar la memoria puede demorar unos minutos.

Pregunta:

¿Se puede desactivar el intercambio de memoria inactiva? O, como la memoria inactiva no es esencial, ¿se puede desactivar por completo?

Alternativamente, ¿hay un demonio o una aplicación de Apple disponible que supervise uso de memoria inactiva (un oxímoron de OSX) y cuando pasa por una cantidad arbitraria (¿medio concierto?) a purge se realiza?

    
pregunta o.v. 11.08.2012 - 09:25

2 respuestas

8

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

La razón por la que ninguna de las soluciones de purga ad-hoc hace que la situación sea significativamente mejor es que en realidad solo hay dos formas de forzar a OS X a borrar la memoria inactiva: el comando purge , o forzar la asignación de toda la memoria libre ( y como no estoy seguro de qué método utiliza purge , estos dos pueden ser más o menos iguales. purge , como mencionaste, toma una cantidad de tiempo no trivial para completar. La asignación de toda la memoria libre simplemente acelera el proceso mediante el cual los contenidos de la memoria inactiva se intercambian de forma natural y, por lo tanto, aún ocupa la misma gran cantidad de recursos del sistema. La única ventaja de cualquiera de estas soluciones es que le permiten elegir cuándo se produce el intercambio, por lo que puede hacerse antes de que normalmente intente asignar esa memoria a otra cosa. Si eso es realmente útil para usted depende de varios factores, por lo que la forma más sencilla de averiguarlo es simplemente probarlo.

He estado probando algunas de las utilidades de borrado de memoria por ahí, y he encontrado que para mí, forzar manualmente el intercambio inactivo requiere un monitoreo más activo de los niveles de memoria de lo que es práctico mientras estoy trabajando, y el uso de una utilidad que fuerza automáticamente el intercambio cuando la memoria libre cae por debajo de un cierto umbral no es mejor que dejar que el sistema operativo lo haga por sí solo, ya que todavía no tengo control sobre cuándo ocurrirá el intercambio y mis aplicaciones SPOD. Entonces, si bien hay una aplicación que hará exactamente lo que pide tu pregunta alternativa, en realidad 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 administración de la memoria no funciona de la manera en que debería hacerlo, y encuentran una manera de hacerlo funcionar correctamente, la única solución real es identificar qué aplicaciones generan la mayor parte de las inactivas. Memoria y dejar de usarlos. En mi situación, esto ha significado cambiar los navegadores web. He estado probando una variedad de ellos, y hasta ahora Chrome es el que parece generar la menor memoria inactiva, probablemente en parte porque cada pestaña y cada extensión se ejecutan como un proceso separado, lo que permite que la administración de memoria nativa del SO trate cada una de ellas. uno por separado en términos de priorizar el intercambio. Safari es lo peor que he probado; a partir de Safari 5.1, podría abrir algunas pestañas, no hacer absolutamente nada y ver cómo aumenta rápidamente la memoria inactiva en el Monitor de actividad; fácilmente pasaría de < 1 gb inactivo a > 3 gb inactivo en unos cinco minutos, ejecute el ciclo de intercambio , y luego hacer exactamente lo mismo. (Por supuesto, la memoria que no hace 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 suficientemente mejor como para que valga la pena volver atrás. Firefox, al no estar basado en WebKit, debería ser mejor que Safari o Chrome, pero tiene su propio legado de problemas de administración de memoria, incluido un historial de pérdidas de memoria, que no lo hacen mejor en la práctica.

Lo que realmente solucionaría el problema es si hubiera una opción, probablemente una opción oculta en el sistema operativo, que le diga al usuario que simplemente descargue el contenido de la memoria inactiva cuando sea necesario en lugar de intercambiar su contenido en el disco. Pero no espero que Apple alguna vez haga disponible una opción así.

    
respondido por el Quantumpanda 26.11.2012 - 08:33
5

¿Cuánta RAM tiene tu Mac? Además, se sabe que los navegadores (especialmente los de Webkit) usan enormes cantidades de memoria en estos días. La memoria inactiva se pone en buen uso a diferencia de la memoria RAM libre que simplemente se queda allí consumiendo energía. En el caso de un navegador, esto le permite deshacer el cierre de una pestaña y aún así conservar su historial, etc.

Puede desactivar completamente el intercambio de memoria ejecutando sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist y reiniciando. No puedes deshabilitar selectivamente el intercambio.

Puedes deshacer esto ejecutando sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist y reiniciando de nuevo.

    
respondido por el MacLemon 23.11.2012 - 12:15

Lea otras preguntas en las etiquetas