Wie wird der Y-Wert für das Speicherdruckdiagramm im Aktivitätsmonitor berechnet?

41

Wie wird vm.memory_pressureder Wert unter OS X 10.10.2 - Yosemite begrenzt / berechnet?

Ich habe mehrere Antworten auf diese Frage recherchiert und versuche einige Dinge in der Befehlszeile, um genaue Werte zu erhalten, anstatt die Diagramme in Activity Monitor zu betrachten.

Mit dem System unter leichter Last:

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

Der kern.memorystatus_vm_pressure_level sieht richtig aus und scheint das zu sein, was er zum Färben des Diagramms verwendet (grün für 1-NORMAL, gelb für 2-WARN, rot für 4-KRITISCH). Vm.memory_pressure ist jedoch 0, und das Diagramm weist eine gewisse grüne Farbe auf, und es ist gezackt, was bedeutet, dass sich der Wert im Laufe der Zeit deutlich ändert und nicht nur bei 0 liegt.

Unter Last sieht es so aus:

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

Oder dieses...

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

Oder dieses...

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

Hier bin ich verwirrt. Keiner dieser Werte allein kann möglicherweise aus mehreren Gründen der Y-Wert des Diagramms sein.

Erstens sitzt vm.memory_pressure unter normaler Last fast immer bei 0, und der Graph sitzt nicht bei 0.

Zweitens stimmen sie nicht überein. Betrachtet man den Wert von memory_pressure, so ist er niedriger, wenn tatsächlich Seiten gewünscht wurden (3220 gewünscht und der Druck nur 1), als wenn 5431 frei waren und keiner gewünscht wurde (der Druck war 277). Und irgendwie ist der Druck sogar noch niedriger als bei 32572 (und 1693).

Wenn das Diagramm gezeichnet wird, wie lautet die Berechnung für den Y-Wert, und wie kann ich die Daten abrufen, die ich zur Berechnung über die Befehlszeile benötige? Ich möchte ein Befehlszeilen-Tool erstellen, das einen Prozentsatz der Höhe der aktuellen Linie in diesem Diagramm ausgibt. Daher muss ich wissen, wie der Wert zu einem bestimmten Zeitpunkt berechnet wird und in welchem ​​Bereich er liegt mögliche Werte sind.

Raugturi
quelle
7
Gute Frage. Der Aktivitätsmonitor zeigt den Druck auf einer Skala von 0% bis 100% an, aber ich habe in den Befehlszeilenkommentaren dazu keinen Hinweis gefunden. Ich werde sehen, ob ich in dieser Woche genug für eine Antwort herausfinden kann. Können wir davon ausgehen, dass Sie nur an 10.10.x interessiert sind?
bmike
3
Danke. Und ja, ich bin am 10.10.2, das ist also die einzige, mit der ich mich befasse.
Raugturi
5
Faszinierende Datenpunkte. Mir ist immer noch nicht klar, wie der Algorithmus entworfen oder codiert ist - oder ob er von Version zu Version gleich bleibt. Unter apple.stackexchange.com/questions/107126/… finden Sie einige nette Kommentare und weitere Daten dazu.
bmike

Antworten:

2

Dies ist derzeit nur eine teilweise Antwort. Diese Antwort ist erst vollständig, wenn dieser Satz entfernt wurde.

Die Sache mit dieser Frage ist, dass das Memory Pressure-Diagramm auf den ersten Blick keinen Sinn ergibt, wenn es mit dem verglichen wird, was in Terminal gemeldet wird, wenn der Befehl verwendet wird, der vom OP beschrieben wird:

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

Das Problem hierbei ist jedoch, dass dieser Befehl die vm-Werte begrenzt, die zurückgemeldet werden. Tatsächlich gibt es insgesamt 105 Werte, aber dieser Befehl meldet nur die folgenden fünf Werte:

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

HINWEIS: Numerische Werte werden normalerweise nach dem Doppelpunkt (:) angezeigt, diese sind jedoch nicht enthalten.

Offensichtlich ist die überwiegende Mehrheit der 105-Vm-Werte nicht Teil der tatsächlichen Berechnung, die den Speicherdruck bestimmt. Das Problem hierbei ist jedoch, dass die obigen fünf Werte nicht die einzigen sind, die zur Berechnung des Speicherdrucks verwendet werden .

Während die obige Ausgabe beispielsweise einige der verschiedenen freien Werte liefert , liefert sie keinen der inaktiven Werte usw.

Diese Werte sind wichtig, da der Speicherdruckalgorithmus ein Verhältnis zwischen diesen Werten berechnet und die Beziehung zwischen diesen Werten aus der Ausgabe des Befehls in der Frage des OP nicht ersichtlich ist.

Ich glaube, ich habe einige technische Informationen, die mehr Licht in diese Sache bringen können. Ich werde diese Antwort so oder so innerhalb der Woche aktualisieren.

[STATUS-UPDATE]

Ich konnte die gesuchten technischen Informationen nicht finden. Ich bin mir jedoch ziemlich sicher, dass ich es noch habe - wahrscheinlich auf einigen alten CDR / DVDR-Backups. Ich werde diese Antwort aktualisieren, sobald ich sie gefunden habe oder wenn ich mir sicher bin, dass ich sie nicht finde.

Monomeeth
quelle