Wie wird vm.memory_pressure
der 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.