TP PowerShell – RAM & SWAP

Salut à tous,

J’ai eu quelques questions sur le fonctionnement du swap récemment. Donc une explication rapide.

Kézako le Swap ?

La « mémoire swap », communément appelé « swap », correspond en fait à un espace sur le disque dur utilisé par le système d’exploitation lorsque la mémoire RAM (la vrai) arrive à saturation.

Et comme le disque dur pédale dans la semoule vachement moins rapidement que la mémoire RAM ; quand vous avez trop de données qui partent dans le Swap : ça ralentie tout, car les programmes attendent de récupérer leurs données sur le disque pour continuer à travailler.

Comment on règle le swap pour les $null ?
(sous Windows 7)

Bouton droit sur l’icône de l’ordinateur et propriété, puis paramètres système avancé, Paramètres de performances. Dans l’onglet avancé => mémoire virtuelle-> modifier; décocher gestion automatique et gérer manuellement vos paramètres.

À quoi ça correspond ?

Le swap Windows augmente automatiquement en fonction des besoins. Avec un minimum alloué de 16Mo et qui pourrait monter jusqu’à 3.5Go

Sous Linux, en général, le swap est une partition définie lors de l’installation de l’OS.

Sous Windows, c’est le fichier pagefile.sys (caché) que vous trouvez à la racine du disque système, ce qui explique la possibilité de modifier les réglages aussi facilement.

Le plus curieux d’entre vous remarqueront les fichiers swapfile.sys et hiberfil.sys également présent :

  • Hiberfil est utilisé pour la mise en veille prolongé et conserve une image complète de la RAM sur le disque pendant l’hibernation ; et
  • Swapfile (que vous ne verrez pas sur vos postes W7 car Windows 8 only) est utilisé par ModernUI pour améliorer les performances, et n’a donc pas d’usage en tant que SWAP au sens système d’exploitation

Et qui ne concerne en rien le swap dont on parle là.

et après ?

Récupérons la taille de la RAM total déjà :

PS H:\> (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory/1GB
 3,95794296264648

J’ai donc environ 4G de barrettes RAM sur mon poste.
Et les informations d’utilisation de la RAM :

PS H:\> $Info = Get-WmiObject Win32_OperatingSystem

Il y a beaucoup de données là, donc je vous ai fait un résumé des valeurs intéressantes ci-dessous :

PS H:\> $Info.FreeVirtualMemory*1KB/1MB 
 #Mémoire RAM libre en Mo
 2214,8125
 PS H:\> $Info.TotalVirtualMemorySize*1KB/1MB 
 4756,93359375
 # Mémoire totale disponible en Mo

Mais ce n’est pas correct !, on a vu 3 lignes plus haut que je n’ai que 4Go de RAM alors d’où sortent ces 756Mo en trop ?
Mais on a vu que j’avais +- 700Mo de fichier swap, du coup si on regarde

PS H:\> $Info. SizeStoredInPagingFiles*1KB/1MB # Mémoire swap disponible sur le système.
 704
 PS H:\> $Info.SizeStoredInPagingFiles+$Info.TotalVisibleMemorySize -eq $info.TotalVirtualMemorySize
 True

Et c’est beau quand même… en fait, sous Windows : Mémoire-virtuelle = RAM + SWAP ; alors que la MémoireRAM = TotalVisibleMemorySize

Bon et quand est-ce qu’on sait quand Windows est en train de swapper et qu’on y connaît rien ?

Alors là c’est plus chaud, le fonctionnement réel de l’OS avec la RAM n’est malheureusement pas aussi simple que :
« J’ai plus de place dans les barrettes je mets sur disque »
C’est lié au fonctionnement interne des pages mémoire inutilisé depuis un certain temps (qui sont swappée en premier), au nombre de fautes matérielles (voir définition ci-dessous) et à l’espace RAM réel encore disponible (vers 90% à priori).
Mais je n’ai pas trouvé, la règle de calcul exacte pour Windows.

Définition – PageFault : Une faute matérielle (appelée aussi défaut de page) se produit lorsque la page de l’adresse référencée ne réside plus dans la mémoire physique dont elle a été sortie ou si elle est disponible sur un fichier de sauvegarde sur le disque. Il ne s’agit pas d’une erreur. Un nombre important de fautes matérielles peut cependant expliquer le temps de réponse élevé d’une application, si celle-ci doit continuellement lire les données sur le disque plutôt que dans la mémoire physique.

Par contre, on peut déjà monitorer de base quelques trucs pour savoir si notre système swap sur disque :

  • Taille du swap, vu que la taille est dynamique : plus il est gros, plus il y a des chances pour qu’on l’utilise beaucoup :
PS H:\> Info. SizeStoredInPagingFiles*1KB/1MB
  • Mémoire Libre, moins il y en a de libre, plus le système va swapper des pages sur le disque :
PS H:\> Info. SizeStoredInPagingFiles*1KB/1MB

Bon et quand est-ce qu’on sait quand Windows est en train de swapper et qu’on est super bon ?

Et bah là on utilise les compteurs :
(En fait on pourrait presque les utiliser depuis le départ, mais je m’en suis rendu compte que là, comme j’avais pas envie de tout me retaper pour ce TP…)

PS H:\> Get-Counter -Counter (Get-Counter -ListSet Memory).paths
 Timestamp CounterSamples
 --------- --------------
 28/11/2014 15:03:23 \\mon-srv\memory\page faults/sec :
 3,00146262556695
\\mon-srv\memory\available bytes :
 2832154624

Je vous laisse regarder le reste des valeurs existantes, mais là on a le choix ! Au hasard, un bon début :

\\\mon-srv\memory\page faults/sec :
 3,00146262556695 #ici mon système est presque au repos
 \\\mon-srv\memory\available mbytes :
 2700

La machine était tranquille alors je l’ai secoué un peu (c’est-à-dire, j’ai alloué tout plein de mémoire pour l’obliger à swapper sur disque) et voir si la valeur du compteur est modifié fortement :
Et là aussi, c’est beau :

PS C:\Users\_ADM_LADENTE> $tab = 1..100000000 
 #Astuce toute con, pour allouer de la mémoire en PowerShell, instancier un, très, très, gros tableau
 
PS C:\Users\_ADM_LADENTE> Get-Counter -Counter (Get-Counter -ListSet Memory).paths
Timestamp CounterSamples
 --------- --------------
 28/11/2014 15:13:31 \\idf-vert\memory\page faults/sec :
 11295,9965155017

Pour conclure :

La RAM c’est pas infini, quand y’en a plus : l’OS envoie les données sur disque, le disque pédale moins vite que la RAM et si on en met dessus trop ça « rame » (alors que justement de la RAM y’en a plus…).
Ça fonctionne pareil sous Windows et sous Linux, et dans les 2 cas on est capable de mesurer à peu près ce qui se passe et pas se retrouver comme une poule devant un couteau.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.