¿Cómo deshabilitar Mac OS X para que no use swap cuando todavía hay memoria "inactiva"?

¿Cómo deshabilitar Mac OS X para que no use swap cuando todavía hay memoria "inactiva"?

Un fenómeno común en mi uso diario (y en varios otros según varias publicaciones en Internet) de OS X es que el sistema parece volverse lento cada vez que no hay más memoria "libre" disponible. Supuestamente, esto se debe al intercambio, ya que es evidente una gran actividad en el disco y vm_stat informa muchas salidas de página. (Corrígeme del error)

Sin embargo, la cantidad de RAM "inactiva" suele ser de alrededor del 12,5% al ​​25% de toda la memoria disponible (^1.) cuando se inicia/se produce/finaliza el intercambio.

De acuerdo ahttp://support.apple.com/kb/ht1342:

Memoria inactiva

Esta información en la memoria no se utiliza activamente, pero se utilizó recientemente.

Por ejemplo, si ha estado usando Mail y luego lo abandonó, la RAM que estaba usando Mail está marcada como memoria inactiva. Esta memoria inactiva está disponible para que la utilice otra aplicación, al igual que la memoria libre. Sin embargo, si abre Mail antes de que otra aplicación utilice su memoria inactiva, Mail se abrirá más rápido porque su memoria inactiva se convierte en memoria activa, en lugar de cargar Mail desde el disco duro más lento.

Y segúnhttp://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html:

La lista inactiva contiene páginas que residen actualmente en la memoria física pero a las que no se ha accedido recientemente. Estas páginas contienen datos válidos peroPuede ser liberado de la memoria en cualquier momento..

Entonces, básicamente: cuando un programa se cierra, su memoria se marca como Inactiva y debe poder reclamarse en cualquier momento. Aún así, OS X preferirá comenzar a intercambiar memoria con el archivo de intercambio en lugar de simplemente reclamar esta memoria, cada vez que la memoria "libre" esté baja.

¿Por qué? ¿Cuál es la ventaja de este comportamiento sobre, digamos, liberar instantáneamente la memoria inactiva y ni siquiera tocar el archivo de intercambio? Algunas fuentes (^2.) indican que OS X buscaría la memoria "Inactiva" para intercambiarla antes de liberarla, pero eso no tiene sentido ahora si la memoriaPuede ser liberado de la memoria en cualquier momento.? Intercambiar es caro, liberar es barato, ¿verdad?

¿Se puede cambiar este comportamiento mediante alguna preferencia o truco conocido? (Preferiblemente uno que no incluya deshabilitar swap/dynamic_pager por completo y reiniciar...)

Aprecio elpurgacomando, así como el concepto de Reparar permisos de disco para forzar algo de memoria libre, pero esas son formas de forzar dolorosamente más memoria libre que arreglar realmente la lógica de decisión de intercambio/liberación...

Por cierto, aquí se hizo una pregunta similar:http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/y aquí:http://hintsforums.macworld.com/showthread.php?t=87688pero a pesar de que los OP volvieron a formular la pregunta central, ninguna de las respuestas aborda una respuesta...

^1.ACTUALIZACIÓN 17-marzo-2012Desde que publiqué esta pregunta por primera vez, pasé de 4 GB a 8 GB de RAM instalada y el problema persiste. La cantidad de RAM "inactiva" era de 0,5 GB a 1,0 GB antes y ahora suele rondar entre 1,0 y 2,0 GB cuando se inicia/se produce/finaliza el intercambio, es decir, parece que alrededor del 12,5 % al 25 % de la RAM se conserva como inactiva en OSX. lógica del núcleo.

^2. Por ejemplohttps://apple.stackexchange.com/questions/4288/qué-significa-si-tengo-mucha-memoria-inactiva-al-final-de-un-día-laboral:

Una vez que se haya utilizado toda la memoria (la memoria libre es 0), el sistema operativo escribirá la memoria inactiva en el archivo de intercambio para dejar más espacio en la memoria activa.

ACTUALIZACIÓN 17-marzo-2012

Aquí hay un resumen de los métodos que se han sugerido para ayudar hasta ahora:

Elpurgadominio

"Se utiliza para aproximar las condiciones de arranque iniciales con un buffer de disco frío para análisis de rendimiento. No afecta la memoria anónima que se ha asignado a través de malloc, vm_allocate, etc".

Esto es útil para evitar que OSX intercambie el caché del disco (lo cual es ridículo que OSX realmente lo haga en primer lugar), pero con la desventaja de que el caché del disco se libera, lo que significa que si el caché del disco no estaba a punto de ser intercambiado, uno simplemente terminaría con un caché de búfer de disco frío, lo que probablemente afectaría negativamente el rendimiento.

ElAplicación FreeMemoryy/oReparar permisos de disco para forzar algo de memoria libre

no ayudaliberandocualquier memoria, moviendo solo algunos gigabytes de contenido de memoria de la RAM al disco duro. Al final, esto provoca muchos intercambios cuando intento usar las aplicaciones que estaban abiertas mientras liberaba memoria, ya que muchas de sus máquinas virtuales ahora están en intercambio.

Acelerar la asignación de swaps usandoenvoltura de paginación dinámica

Parece algo bueno para acelerar el uso del intercambio, pero no soluciona el problema del intercambio de OSX en primer lugar mientras todavía hay memoria inactiva.

Deshabilitar el intercambio deshabilitandobuscapersonas dinámicoy reiniciando

Esto obligará a OSX a no utilizar el intercambio porque el precio del sistema se bloquea cuando se utiliza toda la memoria. No es una alternativa viable...

Deshabilitar el intercambio usandoun buscapersonas dinámico pirateado

De manera similar a deshabilitar el paginador dinámico anterior, algunos extractos de los comentarios de la publicación del blog indican que esta no es una solución viable: "La memoria inactiva es alta, como de costumbre". "cuando su sistema se está quedando sin memoria, todo el sistema operativo se bloquea...", "si consume toda la memoria del Mac, es probable que la máquina se bloquee"

Para resumir, todavía no conozco una forma de desactivar el uso de intercambio en Mac OS X cuando todavía hay memoria "inactiva". Si no es posible, tal vez al menos haya una explicación en alguna parte de por qué OSX prefiere intercambiar la memoria quePuede ser liberado de la memoria en cualquier momento.?

Respuesta1

Por definición, la memoria inactiva es memoria que está lista para ser paginada, y paginarla puede implicar escribirla para intercambiarla.Esto no es ningún tipo de problema.o tema que debería optimizarse; es de hechoOS X funciona según lo diseñado.

Desafortunadamente, los redactores de soporte técnico no son desarrolladores de kernel, y la cita del artículo de soporte de la Base de conocimientos de Apple es simplemente incorrecta cuando afirma que la memoria inactiva es memoria no utilizada por los programas. Cuando sales de un programa, toda su memoria residente queda libre; no se detiene en Inactivo. Sin embargo, el segundo vínculo con elsitio de desarrolladordescribir cómo funciona la gestión de la memoria es un buen recurso, si se lee en su totalidad.

Hay muchos conceptos erróneos sobre lo que significa "memoria inactiva" en OS X. Contrariamente a los conceptos erróneos, no toda la memoria inactiva está vacía, no se utiliza, es caché o se puede purgar. De hecho, la memoria activa también se puede almacenar en caché o purgar, si se ha accedido a ella recientemente. Gran parte de la memoria inactiva también contiene datos que no pueden descartarse simplemente. Si se descartara, los programas fallarían, porque las páginas descartadas habrían contenido datos válidos (como dice la cita del lado del desarrollador de OS X) y los programas esperan que los datos que han almacenado en la memoria (virtual) no simplemente desaparezcan.

La memoria inactiva contiene los mismos tipos de datos que la memoria activa. La única diferencia es que OS X ha notado que algunas partes de la memoria no se han leído ni escrito en un tiempo.

La razón por la que OS X clasifica parte de la memoria como inactiva y otras regiones como "activas" tiene que ver con la paginación. Cuando la memoria se agote, tendrá que paginar algunos datos. La pregunta es ¿qué datos? Si pagina datos que un programa vuelve a necesitar inmediatamente, se pierde tiempo y no se logra nada. Por lo tanto, desea paginar la memoria que un programa no necesitará volver a utilizar inmediatamente.

Anticipar qué páginas probablemente serán innecesarias en el futuro es difícil porque un programa puede usar su memoria virtual como quiera y no decirle nada al sistema operativo sobre cuáles son sus planes. Pero como heurística, la mayoría de los programas son "fijos" en el uso de la memoria; si no han usado algún fragmento de memoria por un tiempo, es probable que continúen sin usar esa memoria y que continúen usando la memoria que han usado recientemente.

Entonces, cuando el sistema operativo decide paginar algunos datos, adopta la estrategia de intercambiar páginas que no se han utilizado recientemente. Esta es la razón por la que OS X clasifica la memoria ocupada por los programas en dos pilas: "activa" e "inactiva". Elenlace publicado arribaal sitio del desarrollador, si se lee en su totalidad, se explica cómo ocurre ese proceso:

  • Cuando la memoria comienza a agotarse, el sistema operativo comienza a revisar las páginas de memoria activa y establece una bandera en cada una.
  • Si un programa lee o escribe en una página, la bandera se borra.
  • Si, después de algún retraso, la bandera no se borra, esa página se clasifica en la pila "inactiva".
  • Si su programa accede a una página "inactiva", se vuelve a colocar en la pila "activa".
  • Cuando se agota la memoria, las páginas "inactivas" se eliminan.

Tenga en cuenta que este proceso de clasificación para decidir qué memoria intercambiar es similar en todos los sistemas operativos modernos. Linux tiene las mismas dos listas de páginas activas e inactivas, como se describe enComprender el administrador de memoria virtual de Linux. Windows podría usar algo un poco diferente con más de dos clases de actualidad; No puedo encontrar una descripción técnica reciente y confiable en este momento. Se analizan más implementaciones en la página de Wikipedia titulada"Algoritmo de reemplazo de página". La única diferencia con OS X era cómo se mostraban las estadísticas: alguien decidió que sería una buena idea mostrar números separados para activos e inactivos en el topMonitor de actividad. En retrospectiva, probablemente esto no fue una buena idea (y esto ha cambiado en OS X 10.9).

Este proceso de configurar y borrar indicadores y mantener montones activos/inactivos requiere un poco de potencia del procesador. Por ese motivo OS X no lo hace cuando hay mucha memoria libre. Por lo tanto, los primeros programas que inicie aparecerán como toda la memoria "activa" hasta que la memoria libre comience a agotarse.

Entonces, a medida que comienza desde cero y abre más y más programas, puede esperar ver la siguiente progresión en Activity Monitor:

  • En primer lugar, hay mucha memoria "libre" y muy poca inactiva. Esto se debe a que el indicador de memoria no ha comenzado a ejecutarse.
  • A medida que la cantidad de memoria libre disminuye, OS X comenzará a ejecutar su indicador de memoria y comenzará a ver cómo aumenta la cantidad de "inactivos". Cada bit de "inactivo" estaba previamente "activo".
  • Cuando se quede sin memoria libre, las páginas de la pila "inactiva" se eliminarán. El indicador de memoria también estará funcionando a toda velocidad clasificando la memoria en activa e inactiva. Por lo general, verá muchos mensajes "inactivos" mientras se escribe en el intercambio, lo que indica que el indicador de memoria está haciendo lo que se supone que debe hacer.

paginasdebeser clasificados como inactivos antes de ser intercambiados. Eso es lo que significa la cita del sitio de desarrolladores de Apple cuando dice "Estas páginas contienen datos válidos pero pueden liberarse de la memoria en cualquier momento". Esto va en contra de las páginas activas, que no se publicarán hasta que hayan sido degradadas a inactivas. Hay varias formas de publicar páginas; Si la página se asignó a partir de un archivo y no se modificó, se puede eliminar inmediatamente y volver a leer cuando se solicite. De manera similar, si se trata de memoria que se intercambió previamente y no se modificó desde que se intercambió. Los programas también pueden asignar explícitamente caché y memoria purgable, para almacenar datos que se pueden olvidar y recrear a pedido (pero la razón por la que un programa asignaría caché es si se necesita mucho tiempo para recrear esos datos). Pero gran parte de la memoria inactiva es memoria en la que los programas han escrito datos válidos, y la paginación de estos datos requiere escritura para intercambiar.

Por lo tanto, observar la cantidad de memoria "inactiva" en el Monitor de actividad y ver que hay mucha inactiva al mismo tiempo que la computadora escribe para intercambiar, solo le indica que el sistema está funcionando según lo diseñado.

También existe una confusión entre la memoria inactiva y el caché de archivos. No estoy seguro de por qué existe esa confusión, porque Activity Monitor ya los enumera en títulos separados. La caché es la memoria que se utiliza para almacenar datos recientes que se han leído o escrito desde el sistema de archivos, en caso de que sea necesario acceder a ellos nuevamente. Cuando la memoria es baja, OS X tiende a deshacerse del caché primero. Si tiene intercambio de mensajes y el monitor de actividad muestra una gran cantidad de caché (NO inactivo), entoncesesoSería un problema. Pero la memoria inactiva es una cosa diferente.

En caso de duda, ignore la distinción entre "inactivo" y "activo". Considérelos como un trozo de "memoria utilizada por los programas" y sume los dos números. Esto es lo que hacen todos los demás sistemas operativos cuando le informan sobre el uso de la memoria.

NOTA para OS X 10.9:Mavericks introdujo la "compresión de memoria", que es, más o menos, otra capa de intercambio. Las páginas activas ahora se clasifican como inactivas, luego se comprimen (lo que puede aparecer como memoria del kernel dependiendo de las herramientas que esté utilizando) y luego se escriben para intercambiarse a medida que aumenta el uso de la memoria. Mavericks también dejó de mostrar números separados para activos e inactivos en el Monitor de actividad, ya que resulta no ser algo útil de ver, especialmente teniendo en cuenta los conceptos erróneos que lo rodean.

Respuesta2

Actualmente no existe una manera fácil de ajustar el comportamiento de intercambio (o así se llama) de macOS X. Sin embargo, hay algunos trucos disponibles (requiere una cuenta de desarrollador y un SDK):

http://cestdelamerde.com/archives/22-Killing-Mac-OS-X-Swapping-How-To-Disable-dynamic_pager.html

http://dropsafe.crypticide.com/article/3848

¡Buena suerte!

Posdata. Supongo que es posible que desees leer esta respuesta (también mía) para tener una revisión más general de qué memorias activas, inactivas y otras memorias hay en MacOSX:Memoria cableada frente a memoria activa en OS X

Respuesta3

No es una solución permanente, pero al menos puede ayudar a recuperar parte de la memoria inactiva, evitando potencialmente el temido intercambio:http://itunes.apple.com/nz/app/freememory/id460931672?mt=12

La herramienta es gratuita y bastante fácil de usar. Una vez iniciado, seleccione la opción "Liberar memoria" en la barra de herramientas/menú del sistema.

A diferencia de la pantalla de memoria de ActivityMonitor, solo muestra memoria libre, lo que parece ser un mejor indicador de si el intercambio se realiza o no.

Respuesta4

Apuesto a que no hay una respuesta correcta para esto. Lo mismo ocurre con la memoria que permanece activa cuando pones tu Mac a dormir, simplemente crece y crece con cada sueño que haces.

En el lado "divertido" (también conocido como caro), puede actualizar su memoria o reemplazar el disco duro con un SSD, por lo que el intercambio no afectará el rendimiento. Elegí la primera opción, ya que la memoria Corsair ahora está disponible a un precio razonable.

16 GB de RAM

información relacionada