Come viene calcolato il valore Y per il grafico della pressione della memoria in Activity Monitor?


41

In che modo vm.memory_pressureil valore è limitato / calcolato su OS X 10.10.2 - Yosemite?

Ho cercato diverse risposte a questa domanda e sto provando alcune cose sulla riga di comando per ottenere valori esatti piuttosto che guardare i grafici in Activity Monitor.

Con il sistema sotto carico leggero:

~ ❯❯❯ 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

Il kern.memorystatus_vm_pressure_level sembra corretto e sembra essere quello che usa per colorare il grafico (verde per 1-NORMALE, giallo per 2-WARN, rosso per 4-CRITICO). Tuttavia, vm.memory_pressure è 0 e il grafico ha una certa quantità di verde, ed è frastagliato, il che significa che il valore sta cambiando chiaramente nel tempo, non solo seduto a 0.

Sotto carico pesante sembra così:

❯❯❯ 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 questo...

~ ❯❯❯ 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 questo...

~ ❯❯❯ 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

Ecco dove sono confuso. Nessuno di questi valori da solo potrebbe essere il valore Y del grafico per un paio di motivi.

Innanzitutto, vm.memory_pressure si trova a 0 quasi sempre sotto carico normale e il grafico non si trova a 0.

In secondo luogo, non sono coerenti tra loro. Guardando il valore memory_pressure, è inferiore quando in realtà aveva desiderato pagine (3220 voluto e pressione di solo 1) rispetto a quando aveva 5431 libero e nessuno voleva (la pressione era 277). E in qualche modo questa è anche una pressione inferiore rispetto a quando aveva 32572 libero (e aveva una pressione di 1693).

Quindi, quando traccia quel grafico, qual è il calcolo per il valore Y e come posso ottenere i dati necessari per calcolarli dalla riga di comando? Sto cercando di creare uno strumento da riga di comando che sputi una percentuale di quanto sarebbe alta la linea corrente su quel grafico, quindi ho bisogno di sapere come calcolare il valore in qualsiasi momento, nonché quale sia l'intervallo di i valori possibili sono.


7
Ottima domanda Activity Monitor mostra una pressione su una scala dallo 0% al 100% ma non ho trovato alcun riferimento nei commenti della riga di comando di questo. Vedrò se riesco a scavare abbastanza per una risposta questa settimana. Possiamo presumere che tu sia interessato solo a 10.10.x?
bmike

3
Grazie. E sì, sono il 10.10.2, quindi è l'unico di cui mi occupo per questo.
Raugturi,

5
Punti dati affascinanti. Non mi è ancora chiaro come sia progettato o codificato l'algoritmo - o anche se rimane lo stesso da una versione all'altra. Vedi apple.stackexchange.com/questions/107126/… per alcuni bei commenti e ulteriori dati su questo.
bmike

Risposte:


2

Questa è attualmente solo una risposta parziale. Questa risposta non è completa fino a quando questa frase non è stata rimossa.

La cosa su questa domanda è che, a prima vista, il grafico della pressione della memoria non ha molto senso se confrontato con ciò che è riportato nel Terminale quando si utilizza il comando indicato dall'OP:

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

Tuttavia, il problema qui è che questo comando limita i valori di VM che sta riportando indietro. In realtà, in realtà ci sono 105 valori in totale, ma questo comando riporta solo i seguenti cinque valori:

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

NOTA: i valori numerici compaiono normalmente dopo i due punti (:), tuttavia non li ho inclusi.

Ovviamente, la stragrande maggioranza dei valori di 105 vm non fa parte del calcolo effettivo che determina la pressione della memoria, ma il problema qui è che i cinque valori sopra indicati non sono i soli utilizzati per calcolare la pressione della memoria .

Ad esempio, mentre l'output sopra riportato fornisce alcuni dei vari valori liberi , non fornisce alcun valore inattivo , ecc.

Questi valori sono importanti perché l'algoritmo della pressione della memoria calcola un rapporto tra tali valori e la relazione tra tali valori non è evidente dall'output prodotto dal comando nella domanda dell'OP.

Penso che potrei avere alcune informazioni tecniche che possono far luce su questo. Aggiornerò questa risposta in entrambi i modi entro la settimana.

[AGGIORNAMENTO DI STATO]

Non sono stato in grado di trovare le informazioni tecniche che stavo cercando. Tuttavia, sono abbastanza sicuro di averlo ancora - probabilmente su alcuni vecchi backup di CDR / DVDR. Aggiornerò questa risposta una volta trovata o dopo che sono certo di non trovarla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.