¿Cómo se calcula el valor Y para el gráfico de presión de memoria en el Monitor de actividad?

¿Cómo se vm.memory_pressurelimita/calcula el valor de en OS X 10.10.2 - Yosemite?

He investigado varias respuestas a esta pregunta y estoy probando algunas cosas en la línea de comandos para obtener valores exactos en lugar de mirar los gráficos en el Monitor de actividad.

Con el sistema bajo carga ligera:

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 2683717
vm.memory_pressure: 0
kern.memorystatus_vm_pressure_level: 1

El kern.memorystatus_vm_pression_level se ve bien y parece ser lo que usa para colorear el gráfico (verde para 1-NORMAL, amarillo para 2-WARN, rojo para 4-CRITICAL). Sin embargo, vm.memory_pression es 0 y el gráfico tiene una cierta cantidad de verde, y está irregular, lo que significa que el valor cambia claramente con el tiempo, no solo en 0.

Bajo carga pesada se ve así:

❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 32572
vm.memory_pressure: 1693
kern.memorystatus_vm_pressure_level: 4

O esto...

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 5431
vm.memory_pressure: 277
kern.memorystatus_vm_pressure_level: 4

O esto...

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 3220
vm.page_free_count: 805
vm.memory_pressure: 1
kern.memorystatus_vm_pressure_level: 4

Aquí es donde estoy confundido. Ninguno de estos valores por sí solo podría ser el valor Y del gráfico por un par de razones.

Primero, vm.memory_pression simplemente se encuentra en 0 casi todo el tiempo bajo carga normal, y el gráfico no se encuentra en 0.

En segundo lugar, no son consistentes entre sí. En cuanto al valor de memory_pression, es más bajo cuando realmente tenía páginas deseadas (3220 deseadas y una presión de solo 1) que cuando tenía 5431 libres y ninguna deseada (la presión era 277). Y de alguna manera esa es una presión aún más baja que cuando tenía 32572 libres (y tenía 1693 de presión).

Entonces, cuando traza ese gráfico, ¿cuál es el cálculo del valor Y y cómo puedo obtener los datos que necesito para calcularlo desde la línea de comando? Estoy buscando hacer una herramienta de línea de comando que escupa un porcentaje de qué tan alta sería la línea actual en ese gráfico, así que necesito saber cómo calcular el valor en un momento dado, así como cuál es el rango de los valores posibles son.

Gran pregunta. El Monitor de actividad muestra la presión en una escala del 0 % al 100 %, pero no he encontrado ninguna referencia en los comentarios de la línea de comandos de esto. Veré si puedo desenterrar lo suficiente para obtener una respuesta esta semana. ¿Podemos suponer que solo está interesado en 10.10.x?
Gracias. Y sí, estoy en 10.10.2, así que ese es el único que me preocupa por esto.
Puntos de datos fascinantes. Todavía no me queda claro cómo se diseña o codifica el algoritmo, o incluso si sigue siendo el mismo de una versión a otra. Consulte apple.stackexchange.com/questions/107126/… para obtener algunos buenos comentarios y más datos sobre esto.

Respuestas (1)

Actualmente, esta es solo una respuesta parcial. Esta respuesta no está completa hasta que se elimine esta oración.

Lo que pasa con esta pregunta es que, a primera vista, el gráfico de presión de memoria no tiene mucho sentido al compararlo con lo que se informa en la Terminal cuando se usa el comando descrito por el OP:

sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level

Sin embargo, el problema aquí es que este comando limita los valores de máquina virtual que informa. De hecho, en realidad hay 105 valores en total, pero este comando solo informa los siguientes cinco valores:

vm.vm_page_free_target:
vm.page_free_wanted:
vm.page_free_count:
vm.memory_pressure:
kern.memorystatus_vm_pressure_level:

NOTA: Los valores numéricos normalmente aparecerían después de los dos puntos (:); sin embargo, no los he incluido.

Obviamente, la gran mayoría de los valores de 105 vm no son parte del cálculo real que determina la presión de la memoria, pero el problema aquí es que los cinco valores anteriores no son los únicos que se usan para calcular la presión de la memoria .

Por ejemplo, mientras que la salida anterior proporciona algunos de los diversos valores gratuitos , no proporciona ninguno de los valores inactivos , etc.

Estos valores son importantes porque el algoritmo de presión de la memoria calcula una relación entre esos valores, y la relación entre esos valores no es evidente en el resultado producido por el comando en la pregunta del OP.

Creo que puedo tener alguna información técnica que puede arrojar más luz sobre esto. Actualizaré esta respuesta de cualquier manera dentro de la semana.

[ACTUALIZACIÓN DE ESTADO]

No he podido encontrar la información técnica que estaba buscando. Sin embargo, estoy bastante seguro de que todavía lo tengo, probablemente en algunas copias de seguridad antiguas de CDR/DVDR. Actualizaré esta respuesta una vez que la haya encontrado, o después de estar seguro de que no la encontraré.