4.6. Informations spécifiques à Red Hat Enterprise Linux

En raison de la complexité inhérente à un système d'exploitation doté d'une mémoire virtuelle paginée à la demande, le contrôle des ressources associées à la mémoire peut être quelque peu déroutant sous Red Hat Enterprise Linux. Il est par conséquent préférable de commencer avec les outils simples et d'avancer progressivement.

À l'aide de la commande free, il est possible d'obtenir un aperçu concis (bien qu'élémentaire) de l'utilisation de la mémoire et du swap, comme le montre l'extrait ci-dessous :

             total       used       free     shared    buffers     cached
Mem:       1288720     361448     927272          0      27844     187632
-/+ buffers/cache:     145972    1142748
Swap:       522104          0     522104
      

Notez que ce système ne dispose que de 1,2 Go de mémoire vive (RAM) dont seulement 350 Mo sont réellement utilisés. Comme on peut le supposer avec un système doté d'une telle quantité de RAM libre, aucune partie des 500 Mo de la partition swap n'est utilisée.

Comparez maintenant l'exemple ci-dessus avec celui qui suit :

             total       used       free     shared    buffers     cached
Mem:        255088     246604       8484          0       6492     111320
-/+ buffers/cache:     128792     126296
Swap:       530136     111308     418828
      

Ce système dispose d'environ 256 Mo de RAM dont la majorité est utilisée, ne laissant qu'environ 8 Mo de libre. Plus de 100 Mo des 512 Mo de la partition swap sont utilisés. Bien que le système en question soit certainement plus limité en termes de mémoire que le système de notre premier exemple, il est nécessaire d'examiner la situation plus en profondeur afin de déterminer si la limitation de mémoire entraîne des problèmes de performance.

Bien que la commande vmstat soit plus énigmatique que free, elle a l'avantage de fournir plus d'informations que les seules statistiques sur l'utilisation de la mémoire. Ci-après figure la sortie de la commande vmstat 1 10 :

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 2  0  0 111304   9728   7036 107204   0   0     6    10  120    24  10   2  89
 2  0  0 111304   9728   7036 107204   0   0     0     0  526  1653  96   4   0
 1  0  0 111304   9616   7036 107204   0   0     0     0  552  2219  94   5   1
 1  0  0 111304   9616   7036 107204   0   0     0     0  624   699  98   2   0
 2  0  0 111304   9616   7052 107204   0   0     0    48  603  1466  95   5   0
 3  0  0 111304   9620   7052 107204   0   0     0     0  768   932  90   4   6
 3  0  0 111304   9440   7076 107360  92   0   244     0  820  1230  85   9   6
 2  0  0 111304   9276   7076 107368   0   0     0     0  832  1060  87   6   7
 3  0  0 111304   9624   7092 107372   0   0    16     0  813  1655  93   5   2
 2  0  2 111304   9624   7108 107372   0   0     0   972 1189  1165  68   9  23
      

Dans cet extrait de 10 secondes, la quantité de mémoire libre (le champ free) change quelque peu et il y a une certaine activité d'E/S associée au swap (les champs si et so), mais d'une manière générale, ce système fonctionne bien. Ceci étant, il est difficile de connaître l'importance de la charge de travail supplémentaire que le système pourrait accepter, étant donné l'utilisation actuelle de mémoire.

Lors de toute recherche de problème en relation avec la mémoire, il est souvent nécessaire de déterminer comment le sous-système de mémoire virtuelle de Red Hat Enterprise Linux utilise la mémoire du système. À l'aide de la commande sar, il est possible d'examiner cet aspect de la performance du système de manière plus détaillée.

En parcourant le rapport sar -r suivant, il est possible d'examiner en détail l'utilisation de la mémoire et du swap :

Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com)      07/22/2003

12:00:01 AM kbmemfree kbmemused  %memused kbmemshrd kbbuffers  kbcached
12:10:00 AM    240468   1048252     81.34         0    133724    485772
12:20:00 AM    240508   1048212     81.34         0    134172    485600
…
08:40:00 PM    934132    354588     27.51         0     26080    185364
Average:       324346    964374     74.83         0     96072    467559
      

Les champs kbmemfree et kbmemused fournissent des statistiques typiques sur la mémoire libre et la mémoire utilisée, le pourcentage de la mémoire utilisée apparaissant dans le champ %memused. Les champs kbbuffers et kbcached quant à eux indiquent la quantité de kilo-octets de mémoire allouée aux tampons (ou buffers) et au cache de données de tout le système.

Le champ kbmemshrd affiche toujours un zéro pour des systèmes (tels que Red Hat Enterprise Linux) utilisant un noyau Linux 2.4.

Notez que les lignes de ce rapport ont été tronquées afin de tenir sur la page. Ci-après figure la partie restante de chaque ligne à laquelle l'horodatage a été ajouté, afin de faciliter la lecture :

12:00:01 AM   kbswpfree kbswpused  %swpused
12:10:00 AM      522104         0      0.00
12:20:00 AM      522104         0      0.00
…
08:40:00 PM      522104         0      0.00
Average:         522104         0      0.00
      

Pour l'utilisation du swap, les champs kbswpfree et kbswpused précisent en kilo-octets la quantité d'espace swap libre et utilisé, le champ %swpused lui, exprimant en pourcentage la quantité d'espace swap utilisé.

Pour en savoir plus sur l'activité d'échange de mémoire (ou swapping) se produisant, consultez le rapport sar -W dont un exemple figure ci-après :

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pswpin/s pswpout/s
12:10:01 AM      0.15      2.56
12:20:00 AM      0.00      0.00
…
03:30:01 PM      0.42      2.56
Average:         0.11      0.37
      

Comme vous pouvez le remarquer, il y avait trois fois moins de pages provenant de swap (pswpin/s) qu'il n'y en avait allant vers swap (pswpout/s).

Pour mieux comprendre comment les pages sont utilisées, reportez-vous au rapport sar -B suivant :

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM  pgpgin/s pgpgout/s  activepg  inadtypg  inaclnpg  inatarpg
12:10:00 AM      0.03      8.61    195393     20654     30352     49279
12:20:00 AM      0.01      7.51    195385     20655     30336     49275
…
08:40:00 PM      0.00      7.79     71236      1371      6760     15873
Average:       201.54    201.54    169367     18999     35146     44702
      

Il est possible de déterminer ici le nombre de blocs paginés en mémoire par seconde depuis le disque (pgpgin/s) et celui des blocs paginés sur le disque depuis la mémoire (pgpgout/s). Ces statistiques sont utilisées comme baromètre de l'activité globale de la mémoire virtuelle.

Toutefois, il est possible d'obtenir plus d'informations en examinant les autres champs de ce rapport. Le noyau de Red Hat Enterprise Linux identifie toutes les pages comme étant soit actives, soit inactives. Comme le nom l'indique, des pages actives sont d'une manière ou d'une autre en cours d'utilisation (en temps que pages de processus ou tampon par exemple) alors que des pages inactives ne le sont pas. Notre exemple de rapport montre que la liste des pages actives (le champ activepg) est en moyenne de 660 Mo[1].

Les autres champs figurant dans ce rapport se concentrent sur la liste des pages inactives — des pages qui pour une raison ou une autre n'ont pas été récemment utilisées. Le champ inadtypg indique le nombre de pages inactives qui sont sales (ou dirty, c'est-à-dire qui ont été modifiées) et peuvent être enregistrées sur le disque. Le champ inaclnpg d'autre part, spécifie le nombre de pages inactives qui sont propres (ou clean, c'est-à-dire qui n'ont pas été modifiées) et ne doivent par conséquent pas être enregistrées sur disque.

Le champ inatarpg indique la taille souhaitée de la liste des pages inactives. Cette valeur, calculée par le noyau Linux, est déterminée de sorte que la liste des pages inactives demeure suffisamment grande pour servir de réserve en cas de remplacement de pages.

Pour obtenir des informations supplémentaires sur l'état (et plus particulièrement sur la fréquence à laquelle les pages changent d'état), consultez le rapport sar -R dont un exemple figure ci-après :

Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com)      07/22/2003

12:00:01 AM   frmpg/s   shmpg/s   bufpg/s   campg/s
12:10:00 AM     -0.10      0.00      0.12     -0.07
12:20:00 AM      0.02      0.00      0.19     -0.07
…
08:50:01 PM     -3.19      0.00      0.46      0.81
Average:         0.01      0.00     -0.00     -0.00
      

Les statistiques apparaissant dans le rapport sar ci-dessus sont uniques dans le sens où les valeurs sont positives, négatives ou équivalentes à zéro. Lorsque la valeur est positive, elle indique le taux selon lequel des pages de ce type augmentent. Lorsqu'elle est négative, elle indique le taux selon lequel des pages de ce type diminuent. Finalement, une valeur de zéro indique que des pages de ce type n'augmentent ni ne diminuent.

Dans cet exemple, le dernier échantillon montre qu'une quantité légèrement supérieure à trois pages par seconde est allouée dans la liste des pages libres (le champ frmpg/s) et que presque une page par seconde est ajoutée au cache de pages (le champ campg/s). La liste des pages utilisées comme tampons (le champ bufpg/s) a augmenté d'environ une page toutes les deux secondes, alors que la liste des pages de mémoire partagée (le champ shmpg/s) n'a elle, ni augmenté, ni diminué en nombre.

Notes

[1]

Sous Red Hat Enterprise Linux sur le système x86 qui est utilisé dans cet exemple, la taille de la page est de 4096 octets. Il est fort possible que des systèmes basés sur d'autres architectures aient des tailles de pages différentes.