À quelle échelle ou mesure la «pression de mémoire» de Mavericks et de Yosemite adhère-t-elle?

Jens Erat

À quelle échelle ou mesure la «pression de mémoire» de Mavericks et de Yosemite adhère-t-elle?


Le moniteur d’activité de Mavericks (et également de Yosemite) montre un nouveau diagramme, la pression de la mémoire . Malheureusement, son texte d’aide n’explique que vaguement ce qu’il mesure exactement. Comment la pression mémoire est-elle calculée?

Moniteur d'activité Mavericks - mémoire

Les créateurs d’images vont à cette réponse à partir d’une question de sondage sur la meilleure nouvelle fonctionnalité de Mavericks.

Réponses


 bmike

La pression de la mémoire n’est pas une simple mesure du pourcentage de mémoire libre et semble être un graphique de 0 à 100%. La valeur sysctl de vm.memory_pressure est calculée par rapport à une cible calculée qui suit le rapport entre les pages de mémoire libres et inactives sur les pages câblées et actives. Les compteurs absolus sont affichés à l’aide de l’outil de ligne de commande vm_stat pour inspecter l’allocation détaillée de la mémoire virtuelle. Jonathan Levin a une excellente documentation à http://newosxbook.com/articles/MemoryPressure.html couvrant à la fois la mémoire virtuelle macOS et iOS et comment ils calculent la pression de la mémoire ainsi que les actions prises lorsque l’indice de pression est élevé.

La mémoire virtuelle (vm) pertinente qui alimente le calcul de vm.memory_pressure sont:

  • vm.page_free_count – un nombre absolu de pages gratuites
  • vm.vm_page_free_target – une cible ou un objectif calculé pour une situation « sans pression »
  • vm.page_free_wanted – ce que le système vm aimerait libérer pour alléger l’indice de pression calculé actuel

Donc – si vous suivez la pression de votre mémoire avec le moniteur d’activité (ou si je vérifie les valeurs sysctl par programmation ou sur le shell de ligne de commande), vous feriez bien de regarder ces quatre valeurs:

 sysctl -a vm | egrep "page_free|pressure" 

Il y a une nouvelle commande memory_pressure introduite avec Mavericks et quand je l’exécute pour conduire le sous-système de mémoire dans un état d’avertissement – vous pouvez voir l’augmentation de la pression de la mémoire dans une plage jaune.

résultats du moniteur d'activité de <code> sudo memory_pressure -l warn </code>

L’outil a alloué environ 4 Go de mémoire à l’outil alors que le graphique de pression augmentait régulièrement jusqu’à cet état où apparemment le niveau « d’avertissement » est représenté: sudo memory_pressure -l warn . Comme vous pouvez le voir, le système avant la pression avait utilisé 5,9 Go et après jusqu’à 7,99 Go, ce qui n’a même pas besoin de s’additionner en raison de l’échange et de la compression.

Après avoir vu comment vm_stat 15 montré le résultat de l’avertissement sans pagination mesurable, j’ai quitté l’outil (Control-C), puis relancé l’outil pour rendre la pression mémoire critique: sudo memory_pressure -l critical

Je n’ai pas laissé cela fonctionner pendant plus de quelques minutes au début de la pagination et une fois que l’outil a dit que j’avais 5 Go de RAM paginée sur le disque, je ne voulais pas remplir mon lecteur et quitter l’outil.

résultats du moniteur d'activité de <code> sudo memory_pressure -l critique </code>

Vous pouvez observer la rapidité avec laquelle le système a libéré la RAM après la fin de l’avertissement et également la manière dont il est entré en territoire « rouge » pour montrer que le système de mémoire virtuelle n’a pas pu compresser suffisamment de pages pour éviter de basculer sur le disque. Ma supposition éclairée est rouge sur la pression indique un échange et une sur-allocation dramatique et / ou un moment où les pages gratuites sont inférieures au montant que le système préfère et il purge activement les pages inactives et / ou les pages de permutation qui devraient être utilisées pour l’échange. De même, le système se rétablit rapidement une fois que les allocations sont libérées et que la pression est supprimée du système de mémoire virtuelle.

Muhammad Hassan Nasr

Merci pour la clarification. Je voudrais savoir s’il existe une commande (ou un ensemble de commandes) qui calcule les paramètres de mémoire virtuelle, de cache de fichiers et de mémoire d’application dans la capture d’écran ci-dessus.

bmike ♦

@MuhammadHassan La réponse ci-dessous couvre un joli résumé d’ingénierie inverse de l’algorithme et indique où chercher dans l’open source xnu pour les internes. J’ai sorti les 4 valeurs couvertes qui sont les plus pertinentes pour l’affichage de la pression de l’interface graphique.


 Juste aider

Pour clarifier quelque peu et rendre cette supposition plus précise: la pression de la mémoire est une métrique utilisée par le noyau (xnu) avec un thread dédié appelé memory_status (précédemment connu sous le nom de Jetsam). Ce thread est chargé de détecter lorsque la RAM disponible est faible – ce qui sous OS X peut forcer l’échange, et dans iOS tue l’application consommant le plus de mémoire (car il n’y a pas d’échange). Dans Mavericks, les deux systèmes d’exploitation sont plus proches l’un de l’autre. Memorystatus émet une note de noyau, que le runtime Obj-C traduit finalement en appDidReceiveLowMemoryWarning. Les applications sont censées purger la mémoire inutilisée ou superflue (par exemple, les caches). La libC de Darwin purge également la mémoire automatiquement.

Il existe un appel système spécifique (bien que non documenté), vm_pressure_monitor (# 296, si je me souviens bien), qui permet à un client d’écouter les événements de pression et de voir combien de pages physiques peuvent être récupérées.

Vous pouvez afficher les événements de pression sur Mavericks à l’aide de Process Explorer pour OS X – téléchargeable sur http://newosxbook.com/index.php?page=downloads . Cela vous montre à la fois la « jauge » de pression, ainsi que les événements de pression.

user61711

Ce site Web contient également un article détaillé – newosxbook.com/articles/MemoryPressure.html – détaillant la pression de la mémoire et la gestion sous OS X et iOS

bmike ♦

Des détails impressionnants sur les similitudes et les différences entre Mavericks et le noyau iOS. Merci pour le lien vers Process Explorer.


 Non

La pression mémoire est définie par deux compteurs que Mach conserve en interne:

  • vm_page_free_count : Combien de pages de RAM sont actuellement libres
  • vm_page_free_target : Combien de pages de RAM, au minimum, devraient être libres de manière optimale.

Vous pouvez les voir facilement en utilisant sysctl:

 [email protected] (~/ Documents )   %  sysctl - a vm |  grep page_free vm . vm_page_free_target :   2000 vm . page_free_wanted :   0 vm . page_free_count :   73243 

si le nombre de pages gratuites tombe en dessous du montant cible – nous avons une situation de pression.


Depuis http://newosxbook.com/articles/MemoryPressure.html

 

#à, #de, #et, #la, #ou, adhère-t-elle?, échelle, Mavericks, mémoire, mesure, pression?, quelle, Yosemite

 

wiki

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *