¿A qué escala o medida se adhieren las "presiones de memoria" de Mavericks y Yosemite?

57
El Monitor de actividad de

Mavericks (y también de Yosemite) muestra un nuevo diagrama, la presión de memoria . Lamentablemente, su texto de ayuda solo explica vagamente lo que mide exactamente. ¿Cómo se calcula la presión de la memoria?

Lascredencialesdefotovana esta respuesta de una pregunta de la encuesta sobre la mejor característica nueva de Mavericks.

    
pregunta Jens Erat 27.10.2013 - 17:49

3 respuestas

51

La presión de la memoria no es un simple indicador del porcentaje de memoria libre y parece ser un gráfico de 0 a 100%. El valor sysctl de vm.memory_pressure se calcula en relación con un objetivo calculado que rastrea la proporción entre las páginas de memoria libre e inactiva y las páginas activas y con cable. Los contadores absolutos se visualizan utilizando la herramienta de línea de comandos vm_stat para inspeccionar la asignación detallada de la memoria virtual. Jonathan Levin tiene una excelente documentación en enlace que cubre la memoria virtual de macOS e iOS y cómo calculan la presión de la memoria, así como las acciones tomadas cuando el índice de presión es alto.

La memoria virtual relevante (vm) que alimenta el cálculo de vm.memory_pressure es:

  • vm.page_free_count : un recuento absoluto de páginas gratuitas
  • vm.vm_page_free_target : un objetivo u objetivo calculado para una situación "libre de presión"
  • vm.page_free_wanted : lo que el sistema de vm quisiera liberar para aliviar el índice de presión calculado actual

Entonces, si está realizando un seguimiento de la presión de su memoria con el Monitor de actividad (o si está verificando los valores de sysctl de manera programática o en el shell de la línea de comandos), debería hacer un seguimiento de estos cuatro valores:

sysctl -a vm | egrep "page_free|pressure"

Se introdujo un nuevo comando memory_pressure con Mavericks y cuando lo ejecuto para llevar el subsistema de memoria a un estado de advertencia, puede ver el aumento de la presión de la memoria en un rango amarillo.

Laherramientaasignóaproximadamente4GBdememoriaalaherramienta,yaqueelgráficodepresiónaumentóconstantementeaesteestadodondeaparentementesegraficaelnivelde"advertencia": sudo memory_pressure -l warn . Como puede ver, el sistema antes de la presión tenía 5,9 GB utilizados y después se usaba hasta 7,99 GB, que ni siquiera necesita sumarse debido al intercambio y la compresión.

Después de ver cómo vm_stat 15 mostró el resultado de advertencia en una paginación no medible, salí de la herramienta (Control-C) y luego volví a ejecutar la herramienta para hacer que la presión de la memoria fuera crítica: sudo memory_pressure -l critical

No dejé que esto se ejecutara durante más de unos pocos minutos cuando comenzaba la paginación y una vez que la herramienta dijo que tenía 5 GB de RAM en el disco, no quise llenar mi unidad y salir de la herramienta. / p>

PuedeobservarlarapidezconlaqueelsistemaliberólaRAMdespuésdequefinalizólaadvertenciaytambiéncómoseintrodujoenelterritorio"rojo" para mostrar que el sistema de memoria virtual no pudo comprimir suficientes páginas para evitar el intercambio al disco. Mi conjetura es que la presión en rojo indica que el intercambio y la asignación excesiva y / o un momento en que las páginas gratuitas están por debajo de la cantidad que el sistema prefiere y está purgando activamente las páginas inactivas y / o las páginas de intercambio que se espera utilizar para intercambiar. De manera similar, el sistema se recupera rápidamente una vez que se liberan las asignaciones y se elimina la presión del sistema de memoria virtual.

    
respondido por el bmike 28.10.2013 - 02:22
30

Para aclarar y hacer que la suposición sea más precisa: la presión de la memoria es una métrica utilizada por el kernel (xnu) con un hilo dedicado llamado memory_status (anteriormente conocido como Jetsam). Este hilo es responsable de detectar cuando la memoria RAM disponible es baja, lo que en OS X puede forzar el intercambio, y en iOS mata la aplicación que más memoria consume (ya que no hay intercambio). En Mavericks, los dos sistemas operativos están más juntos. Memorystatus emite una nota del kernel, que el tiempo de ejecución de Obj-C finalmente se traduce en una appDidReceiveLowMemoryWarning. Se supone que las aplicaciones purgan la memoria no utilizada o extraña (por ejemplo, cachés). La libC de Darwin también purga la memoria automáticamente.

Hay una llamada al sistema específica (aunque no documentada), vm_pressure_monitor (# 296, si recuerdo bien), que permite a un cliente escuchar eventos de presión y ver cuántas páginas físicas se pueden reclamar.

Puede ver los eventos de presión en Mavericks utilizando Process Explorer para OS X - descargable desde enlace . Eso muestra el "indicador" de presión, así como los eventos de presión.

    
respondido por el Just helping 31.10.2013 - 05:53
14

La presión de la memoria se define mediante dos contadores que Mach mantiene internamente:

  • vm_page_free_count : ¿Cuántas páginas de RAM hay actualmente libres?
  • vm_page_free_target : cuántas páginas de RAM, como mínimo, deberían ser óptimamente libres.

Puedes verlos fácilmente usando sysctl:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

si la cantidad de páginas libres cae por debajo de la cantidad objetivo, tenemos una situación de presión.

De enlace

    
respondido por el Nay 01.02.2014 - 21:36

Lea otras preguntas en las etiquetas