Comment la valeur Y du graphique de pression de la mémoire dans Activity Monitor est-elle calculée?


41

Comment vm.memory_pressurela valeur est-elle liée / calculée sur OS X 10.10.2 - Yosemite?

J'ai cherché plusieurs réponses à cette question et j'essaie quelques choses en ligne de commande pour obtenir des valeurs exactes plutôt que de regarder les graphiques dans Activity Monitor.

Avec le système sous charge légère:

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

Kern.memorystatus_vm_pressure_level semble correct et semble être ce qu'il utilise pour colorer le graphique (vert pour 1-NORMAL, jaune pour 2-WARN, rouge pour 4-CRITICAL). Cependant, vm.memory_pressure vaut 0 et le graphique contient une certaine quantité de vert et est irrégulier, ce qui signifie que la valeur change clairement dans le temps, et non pas uniquement à 0.

Sous forte charge, cela ressemble à ceci:

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

Ou ca...

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

Ou ca...

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

Voici où je suis confus. Aucune de ces valeurs ne pourrait à elle seule être la valeur Y du graphique pour plusieurs raisons.

Premièrement, vm.memory_pressure reste à 0 presque tout le temps sous charge normale, et le graphique ne reste pas à 0.

Deuxièmement, ils ne sont pas compatibles les uns avec les autres. En regardant la valeur memory_pressure, elle est plus basse quand il y avait réellement des pages de recherche (3220 demandées et une pression de 1 seulement) que lorsqu'il avait 5431 pages libres et aucune demande (la pression était de 277). Et d’une manière ou d’une autre, c’est une pression encore plus basse que quand il avait 32572 libres (et 1693 pressions).

Ainsi, quand il trace ce graphique, quel est le calcul de la valeur Y et comment puis-je obtenir les données dont j'ai besoin pour le calculer à partir de la ligne de commande? Je cherche à créer un outil de ligne de commande qui calculera un pourcentage de la hauteur de la ligne actuelle sur ce graphique. J'ai donc besoin de savoir comment calculer la valeur à tout moment, ainsi que la plage de valeurs. les valeurs possibles sont.


7
Excellente question. Le Moniteur d'activité indique la pression sur une échelle de 0% à 100%, mais je n'ai trouvé aucune référence dans les commentaires en ligne de commande correspondants. Je verrai si je peux trouver assez de réponses pour une réponse cette semaine. Pouvons-nous présumer que vous n'êtes intéressé que par 10.10.x?
bmike

3
Merci. Et oui, je suis sur 10.10.2, donc c'est le seul qui m'intéresse pour cela.
Raugturi

5
Points de données fascinants. Je ne comprends toujours pas comment l'algorithme est conçu ou codé - ou même s'il reste le même d'une version à l'autre. Voir apple.stackexchange.com/questions/107126/… pour de jolis commentaires et plus de données à ce sujet.
bmike

Réponses:


2

Ceci n'est actuellement qu'une réponse partielle. Cette réponse n'est pas complète jusqu'à ce que cette phrase soit supprimée.

Le problème avec cette question est qu'à première vue, le graphique de pression de la mémoire n'a pas vraiment de sens si on le compare à ce qui est rapporté dans Terminal lors de l'utilisation de la commande décrite par l'OP:

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

Cependant, le problème ici est que cette commande limite les valeurs vm qu'elle rend compte. En fait, il y a en réalité 105 valeurs au total, mais cette commande ne rapporte que les cinq valeurs suivantes:

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

REMARQUE: les valeurs numériques devraient normalement apparaître après les deux points (:), mais je ne les ai pas incluses.

Évidemment, la très grande majorité des valeurs de 105 vm ne fait pas partie du calcul qui détermine la pression de la mémoire, mais le problème est que les cinq valeurs ci-dessus ne sont pas les seules utilisées pour calculer la pression de la mémoire .

Par exemple, alors que la sortie ci-dessus fournit certaines des diverses valeurs libres , elle ne fournit aucune des valeurs inactives , etc.

Ces valeurs sont importantes car l'algorithme de pression de la mémoire calcule un rapport entre ces valeurs, et la relation entre ces valeurs n'apparaît pas dans la sortie produite par la commande dans la question du PO.

Je pense que je peux avoir des informations techniques qui peuvent apporter plus de lumière à ce sujet. Je mettrai à jour cette réponse d'une manière ou d'une autre dans la semaine.

[MISE À JOUR DU STATUT]

Je n'ai pas pu trouver les informations techniques que je cherchais. Cependant, je suis à peu près certain de l’avoir toujours - probablement sur de vieilles sauvegardes de CDR / DVDR. Je mettrai à jour cette réponse une fois que je l'aurai trouvée ou après être certaine de ne pas la trouver.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.