AIX : svmon et paging space

svmon est l'outil de réference sur AIX pour avoir une description détaillée de l'utilisation mémoire. Malheureusement, ces rapports sont relativement difficile à lire. Je vais décrire ici un des pièges qui m'a le plus ennuyé lors de l'utilisation de svmon. Il s'agit de la manière dont l'espace mémoire en paging space est décompté.
!!!!Description du "piège"

Lors que l'on utilise svmon pour lister les utilisateurs qui consomment le plus de mémoire sur le système, on peut tomber sur des lignes de ce type :
===============================================================================
User Inuse Pin Pgsp Virtual LPageCap
oracle 4115616 8370 2051075 4953757 -

...............................................................................
SYSTEM segments Inuse Pin Pgsp Virtual
7836 5664 725 8490

Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel segment - 7836 5664 725 8490

...............................................................................
EXCLUSIVE segments Inuse Pin Pgsp Virtual
210714 2706 90191 304157

Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
296c51 70000000 work default shmat/mmap - 42155 0 31861 52843
Le but ici était de savoir quel quantité de mémoire utilisé par l'utilisateur Oracle était actuellement en paging space.
Si on prend comme base :
  • Inuse : mémoire physique en cours d'utilisation par l'utilisateur.
  • Pgsp : espace utilisé en paging space par l'utilisateur.
  • Pin : espace en mémoire physique ne pouvant pas être swappé sur le paging space.
  • Virtual : mémoire virtuelle consommé par l'utilisateur.
La réponse rapide serait donc de dire 2051075 pages de 4ko.
Mais le problème est que lorsque l'on additionne Pgsp et Inuse, on dépasse Virtual :
4115616 + 2051075 = 6166691

Explication


L'explication tient dans l'algorithme d'allocation du paging space utilisé par AIX. Par défaut à partir d'AIX 5.2, l'algorithme Deferred Paging Space Allocation est utilisé.Une description rapide serait de dire qu'il consiste à allouer une page mémoire en paging space au moment où la page mémoire d'un processus est paginé et à conserver la réservation pour la page en  paging space jusqu'à la fin du processus.

Donc avec cet algorithme, il suffit d'avoir eu à un moment des processus qui ont été swappé puis sont revenu en mémoire physique pour que lorsqu'on additionne Inuse et Pgsp cela dépasse Virtual.

On peut donc calculer la quantité de mémoire réellement swappé à un moment donné de la manière suivante : Virtual - Inuse


Cela permet aussi de comprendre pourquoi on peut avoir un paging space utilisé alors que toute la mémoire physique n'est pas utilisée, comme dans le graphique ci-dessous :


Cette image tiré de ganglia illustre bien cette réservation du paging space par les processus. On voit que le paging space diminue uniquement quand certains processus s'arrêtent (ici vers 20h) et que lorsque l'occupation du paging space augmente, elle ne diminue plus et ce même si la mémoire physique n'est plus entiérement utilisée. Le serveur ici est un serveur avec des bases Oracle donc typiquement avec des processus associés à des grandes quantités de mémoire(SGA) durant longtemps.


Conclusion


Je dois admettre que j'ai cherché un bon moment l'explication du phénomène la première fois où j'ai remarqué ça :-).
L'autre point important est que j'ai pu enfin glisser un graphique extrait de Ganglia. Il s'agit de mon outil de monitoring/capacity planning favori en ce moment et je compte bien en parler plus souvent à l'avenir.


Commentaires

1. Le lundi, octobre 26 2009, 10:41 par Abdel

Bonjour à tous,
D'abord Bravo pour ce blog...
Je viens vers vous car j'ai un ptit souci avec la commance svmon sur AIX5.3
Je supervice mes server AIX avec Nagios et je me suis apercus que depuis m'a migration de server AIX5.2 vers AIX5.3 je me retrouve avec des Pb de check Nagios. et après quelques recherches, il s'avère que le check Nagios s'appuis sur la commande svmon -F qui -n'existe plus sur AIX5.3 TL09. Je sais que l'option est toujours bonne en TL06 et je ne sais pas depuis quand elle a été retiré.
Avez-vous des infos à me communiquer quant à cette remarque.
D'avance merci pour vos retours.
Cordialement

2. Le mercredi, octobre 28 2009, 22:13 par Alain Dejoux

Hello,

Il faudrait que je regarde un peu plus en détail pour voir quand l'option a disparu mais je pense que c'est avec l'arrivée des nouvelles options de svmon du TL9. Il est maintenant possible de connaitre la quantité de mémoire disponible pour les applications avec cette option :
svmon -O summary=basic

Un excellent post expliquant cela un peu plus en détail se trouve ici :
https://www.ibm.com/developerworks/...

Cordialement,

Alain

3. Le mercredi, janvier 26 2011, 11:05 par Terminator

Bonjour,

Pouvez vous m'expliquer pourquoi pouvons nous avoir une valeur virtual inférieur au Iuse + Pgsp ==>
Inuse = 994032
Pgsp = 1644
Virtual = 176326
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd 16MB
3170456 oracle 994032 65584 1644 176326 Y N N

PageSize Inuse Pin Pgsp Virtual
s 4 KB 916400 0 1644 98694
m 64 KB 756 3 0 756

Merci

4. Le jeudi, avril 21 2011, 10:53 par Alain Dejoux

Hello,

En fait, il manque une explication dans l'article. Le inuse contient aussi les pages en mémoire physiques utilisés pour le cache fichier. Il faut retirer les segment clnt et pers de inuse avant de faire le calcul.

5. Le mercredi, août 24 2011, 18:16 par rafrith

Bonjour,
Super ce blog! Enfin..
Ton Ganglia est tres interessant, j'essai de l'installer sur un aix6.1 avec des agents en aix5.3 et je galère beaucoup malgré les tuto.
Aurais-tu une url ou tuto, blog... pour m'aider?

Merci!