3.3. Informations spécifiques à Red Hat Enterprise Linux

Sous Red Hat Enterprise Linux, le contrôle de l'utilisation de la largeur de bande et du CPU se fait grâce à l'utilisation des outils examinés dans le Chapitre 2 ; il est par conséquent recommandé de lire ce chapitre (si ce n'est pas déjà fait) avant de poursuivre.

3.3.1. Contrôle de la largeur de bande sur Red Hat Enterprise Linux

Comme nous l'avons mentionné dans la Section 2.4.2, il est difficile de contrôler directement l'utilisation de la largeur de bande. Néanmoins, en analysant les statistiques au niveau des périphériques, il est possible d'évaluer grossièrement si une largeur de bande insuffisante pose un problème quelconque pour votre système.

Avec vmstat, il est possible de déterminer si l'activité générale des périphériques est excessive, en examinant les champs bi et bo ; en outre, les champs si et so fournissent des informations un peu plus précises sur le degré d'activité du disque résultant des activités d'E/S associées au swap.

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 248088 158636 480804   0   0     2     6  120   120  10   3  87
        

Dans l'extrait ci-dessus, le champ bi montre que deux blocs par seconde sont écrits sur les périphériques blocs (essentiellement les disques durs), alors que le champ bo indique lui, que six blocs par seconde sont lus depuis les périphériques blocs. Il est également possible de voir qu'aucune partie de cette activité n'est due à un échange de mémoire (aussi appelé swapping) car les champs si et so montrent tous les deux un taux d'activités d'E/S associé auswap équivalent à zéro kilo-octet/seconde.

En utilisant iostat, il est possible d'obtenir des informations plus précises sur l'activité associée au disque :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.34    4.60    2.83   87.24

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev8-0            1.10         6.21        25.08     961342    3881610
dev8-1            0.00         0.00         0.00         16          0
        

Cette sortie montre que le périphérique dont le nombre majeur est 8 (correspondant à /dev/sda, le premier disque SCSI) avait une moyenne légèrement surpérieure à une opération d'E/S par seconde (le champ tsp). La plupart de l'activité d'E/S de ce périphérique était constituée par des opérations d'écriture (le champ Blk_wrtn), avec un peu plus de 25 blocs écrits par seconde (le champ Blk_wrtn/s).

Dans le cas où des informations encore plus détaillées seraient nécessaires, utilisez l'option -x de iostat :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

avg-cpu:  %user   %nice    %sys   %idle
           5.37    4.54    2.81   87.27

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz
/dev/sda    13.57   2.86  0.36  0.77   32.20   29.05    16.10    14.53    54.52
/dev/sda1    0.17   0.00  0.00  0.00    0.34    0.00     0.17     0.00   133.40
/dev/sda2    0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00    11.56
/dev/sda3    0.31   2.11  0.29  0.62    4.74   21.80     2.37    10.90    29.42
/dev/sda4    0.09   0.75  0.04  0.15    1.06    7.24     0.53     3.62    43.01
        

Outre le fait que les lignes plus longues contiennent plus de champs, la première chose dont il faut se souvenir est que cette sortie d'iostat affiche désormais des statistiques au niveau des partitions de manière individuelle. En utilisant df pour associer les points de montage aux noms de périphériques, il est possible d'utiliser ce rapport pour déterminer par exemple si /home est soumis à une charge excessive.

En fait, la sortie renvoyée par la commande iostat -x est composée de lignes plus longues contenant plus d'informations que l'extrait ci-dessus, comme le montre le reste de chaque ligne reproduit ci-après (notez que la colonne relative aux périphériques faisant partie de l'extrait d'origine, a été rajoutée ici pour permettre une lecture plus facile):

Device:    avgqu-sz   await  svctm  %util
/dev/sda       0.24   20.86   3.80   0.43
/dev/sda1      0.00  141.18 122.73   0.03
/dev/sda2      0.00    6.00   6.00   0.00
/dev/sda3      0.12   12.84   2.68   0.24
/dev/sda4      0.11   57.47   8.94   0.17
        

Dans cet exemple, il est intéressant de remarquer que /dev/sda2 est la partition swap du système ; il est évident d'après nombreux champs affichant 0.00 que le swapping ne pose aucun problème pour le système.

Le deuxième élément de la colonne de périphériques,/dev/sda1, est un autre élément intéressant en raison des statistiques inhabituelles de cette partition sont  ; en effet, l'activité globale semble faible et pourtant, la taille moyenne des requêtes d'E/S (le champ avgrq-sz), le temps d'attente moyen (le champ await) et le temps de service moyen (le champ svctm) sont beaucoup plus importants que pour les autres partitons ; pourquoi ? Parce que cette partition contient le répertoire /boot/, qui est l'endroit où le noyau et le disque de mémoire vive initiale (ramdisk) sont stockés. Lorsque le système démarre, les E/S des opérations de lecture (notez bien que seuls les champs relatifs à rsec/s et rkB/s n'affichent pas de zéros ; d'une manière générale, aucune opération d'écriture n'est effectuée ici) utilisées lors de ce processus se font pour de nombreux blocs, entraînant des temps d'attente et de service relativement longs, comme les affiche iostat.

Il est possible d'utiliser sar pour un affichage à plus long terme des statistiques d'E/S ; la commandesar -b affiche par exemple, un rapport d'E/S général comme le montre l'extrait ci-dessous :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       tps      rtps      wtps   bread/s   bwrtn/s
12:10:00 AM      0.51      0.01      0.50      0.25     14.32
12:20:01 AM      0.48      0.00      0.48      0.00     13.32
…
06:00:02 PM      1.24      0.00      1.24      0.01     36.23
Average:         1.11      0.31      0.80     68.14     34.79
        

Ici, comme dans l'affichage initial de iostat, les statistiques sont regroupées pour tous les périphériques blocs.

Un autre rapport sur les E/S peut être créé grâce à sar -d, comme le montre l'extrait suivant :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (raptor.example.com)     07/21/2003

12:00:00 AM       DEV       tps    sect/s
12:10:00 AM    dev8-0      0.51     14.57
12:10:00 AM    dev8-1      0.00      0.00
12:20:01 AM    dev8-0      0.48     13.32
12:20:01 AM    dev8-1      0.00      0.00
…
06:00:02 PM    dev8-0      1.24     36.25
06:00:02 PM    dev8-1      0.00      0.00
Average:       dev8-0      1.11    102.93
Average:       dev8-1      0.00      0.00
        

Ce rapport fournit certes des informations périphérique par périphérique, mais de manière relativement superficielle.

Malgré l'absence de statistiques explicites montrant l'utilisation de la largeur de bande pour un chemin des données ou un bus spécifique, il est au moins possible d'une part de voir l'activité des périphériques et d'autre part, d'utiliser cette dernière afin de déterminer indirectement, le chargement du bus.

3.3.2. Contrôle de l'utilisation CPU sur Red Hat Enterprise Linux

Contrairement à la largeur de bande, le contrôle de l'utilisation CPU est une tâche relativement simple. Que ce soit grâce à un simple pourcentage d'utilisation CPU dans le Moniteur système de GNOME ou aux statistiques plus détaillées rapportées par la commandesar, il est possible de déterminer d'une part combien de puissance CPU est consommée et d'autre part, quel élément la consomme.

Au-delà du Moniteur système de GNOME, il existe un autre outil de contrôle des ressources à savoir, top, le premier outil abordé dans le Chapitre 2, qui fournit lui, une représentation plus détaillée de l'utilisation CPU. Ci-après figure un rapport établi par la commande top depuis un poste de travail à double processeur :

  9:44pm  up 2 days, 2 min,  1 user,  load average: 0.14, 0.12, 0.09
90 processes: 82 sleeping, 1 running, 7 zombie, 0 stopped
CPU0 states:  0.4% user,  1.1% system,  0.0% nice, 97.4% idle
CPU1 states:  0.5% user,  1.3% system,  0.0% nice, 97.1% idle
Mem:  1288720K av, 1056260K used,  232460K free,       0K shrd,  145644K buff
Swap:  522104K av,       0K used,  522104K free                  469764K cached

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
30997 ed        16   0  1100 1100   840 R     1.7  0.0   0:00 top
 1120 root       5 -10  249M 174M 71508 S <   0.9 13.8 254:59 X
 1260 ed        15   0 54408  53M  6864 S     0.7  4.2  12:09 gnome-terminal
  888 root      15   0  2428 2428  1796 S     0.1  0.1   0:06 sendmail
 1264 ed        15   0 16336  15M  9480 S     0.1  1.2   1:58 rhn-applet-gui
    1 root      15   0   476  476   424 S     0.0  0.0   0:05 init
    2 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU0
    3 root      0K   0     0    0     0 SW    0.0  0.0   0:00 migration_CPU1
    4 root      15   0     0    0     0 SW    0.0  0.0   0:01 keventd
    5 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU0
    6 root      34  19     0    0     0 SWN   0.0  0.0   0:00 ksoftirqd_CPU1
    7 root      15   0     0    0     0 SW    0.0  0.0   0:05 kswapd
    8 root      15   0     0    0     0 SW    0.0  0.0   0:00 bdflush
    9 root      15   0     0    0     0 SW    0.0  0.0   0:01 kupdated
   10 root      25   0     0    0     0 SW    0.0  0.0   0:00 mdrecoveryd
          

La première information relative au CPU se trouve sur la toute première ligne : la moyenne de charge. Cette dernière est représentée par un chiffre correspondant au nombre moyen de processus exécutables sur le système. La moyenne de charge est souvent exprimée sous forme de trois groupes de chiffres (de la même manière que top) qui correspondent respectivement à la moyenne de charge de la dernière minute et des 5, 15 dernières minutes ; dans notre exemple, le système n'était pas très occupé.

La ligne suivante, bien que n'étant pas étroitement liée à l'utilisation CPU a tout de même une relation indirecte avec cette dernière, dans la mesure où elle affiche le nombre de processus exécutables (un seul dans le cas présent -- souvenez-vous de ce chiffre car il a une signification particulière dans cet exemple). Le nombre de processus exécutables représente un bon indicateur du degré de limitation dicté par le CPU.

Viennent ensuite deux lignes affichant l'utilisation courante de chacun des deux CPU sur le système. Les statistiques d'utilisation sont ventilées afin de montrer si la prolongation des cycles CPU étaient le résultat d'un traitement au niveau de l'utilisateur ou au niveau du système ; apparaît également ici une statistique indiquant le degré selon lequel le temps CPU a été étendu par les processus aux priorités de programmation modifiées. Finalement, apparaît une statistique relative au temps d'inactivité.

Plus bas dans la section de l'affichage relative aux processus figurent des statistiques montrant que top lui-même est le processus utilisant le plus de puissance CPU ; en d'autres termes, le seul processus sur ce système qui autrement serait autrement, est top prenant une "image" de lui-même.

TuyauAstuce
 

Il est important de ne pas oublier que l'opération consistant à exécuter un moniteur de système a un impact sur les statistiques d'utilisation des ressources que vous obtenez. Tel est le cas, jusqu'à un certain point, pour tous les moniteurs basés sur des logiciels.

Afin d'obtenir de plus amples informations sur l'utilisation CPU, il est nécessaire de changer d'outil. En examinant la sortie de vmstat, la vue d'ensemble du système de notre exemple est légèrement différente, comme le montre l'extrait suivant :

   procs                      memory    swap          io     system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
 1  0  0      0 233276 146636 469808   0   0     7     7   14    27  10   3  87
 0  0  0      0 233276 146636 469808   0   0     0     0  523   138   3   0  96
 0  0  0      0 233276 146636 469808   0   0     0     0  557   385   2   1  97
 0  0  0      0 233276 146636 469808   0   0     0     0  544   343   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  517    89   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0    32  518   102   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    91   2   1  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    72   2   0  98
 0  0  0      0 233276 146636 469808   0   0     0     0  516    88   2   0  97
 0  0  0      0 233276 146636 469808   0   0     0     0  516    81   2   0  97
        

Les informations ci-dessus ont été obtenues grâce à la commande vmstat 1 10 qui recueille des échantillons sur le système toutes les secondes, dix fois de suite. Au premier abord, les statistiques relatives au CPU (à savoir les champs us, sy et id) semblent similaires, voire même légèrement moins détaillées, à celles affichées par top. Néanmoins, contrairement à top, il est possible d'obtenir ici un certain nombre d'informations sur la manière dont le CPU est utilisé.

En examinant les champs system, on peut voir que le CPU traite en moyenne environ 500 interruptions par seconde et qu'il alterne entre les processus de 80 à presque 400 fois par seconde. Si vous pensez que ces chiffres représentent une activité intense, détrompez-vous car les opérations de traitement au niveau de l'utilisateur (le champ us) atteignent seulement 2% en moyenne, alors que celles effectuées au niveau du système (le champs sy) sont généralement inférieures à 1%. Dans cet exemple, il s'agit également d'un système inactif.

En examinant les outils offerts par Sysstat, on peut voir que iostat et mpstat n'offrent que peu d'informations supplémentaires par rapport aux sorties obtenues avec top et vmstat. Toutefois, sar créé un certain nombre de rapports pouvant se révéler utiles lors du contrôle de l'utilisation CPU.

Le premier rapport est obtenu grâce à la commande sar -q qui affiche la longueur de la file d'attente des processus exécutables (run), le nombre total des processus et les moyennes de charge enregistrés lors de la dernière minute et au cours des 5 dernières minutes. Ci-après figure un exemple de ce rapport :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5
12:10:00 AM         3       122      0.07      0.28
12:20:01 AM         5       123      0.00      0.03
…
09:50:00 AM         5       124      0.67      0.65
Average:            4       123      0.26      0.26
        

Dans cet exemple, le système est certes toujours occupé (puisque plus d'un processus est exécutable à tout moment donné), mais il n'est pas excessivement chargé (car ce système précis est doté de plus d'un processeur).

Le rapport sar ci-dessous qui fournit des informations sur le CPU est produit par la commande sar -u :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM       all      3.69     20.10      1.06     75.15
12:20:01 AM       all      1.73      0.22      0.80     97.25
…
10:00:00 AM       all     35.17      0.83      1.06     62.93
Average:          all      7.47      4.85      3.87     83.81
        

Les statistiques contenues dans ce rapport ne sont pas vraiment différentes de celles fournies par de nombreux autres outils. Toutefois, le gros avantage dans le cas présent est que sar fournit ces données de manière constante et par là même, représente une commande beaucoup plus utile pour obtenir des moyennes à long terme ou pour créer des graphiques sur l'utilisation CPU.

Sur des systèmes à processeurs multiples, la commande sar -U permet de fournir des statistiques pour un processeur particulier ou pour tous les processeurs. Ci-après figure un exemple de sortie renvoyée par sar -U ALL :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM       CPU     %user     %nice   %system     %idle
12:10:00 AM         0      3.46     21.47      1.09     73.98
12:10:00 AM         1      3.91     18.73      1.03     76.33
12:20:01 AM         0      1.63      0.25      0.78     97.34
12:20:01 AM         1      1.82      0.20      0.81     97.17
…
10:00:00 AM         0     39.12      0.75      1.04     59.09
10:00:00 AM         1     31.22      0.92      1.09     66.77
Average:            0      7.61      4.91      3.86     83.61
Average:            1      7.33      4.78      3.88     84.02
        

La commande sar -w établit un rapport sur le nombre de changements de contextes par seconde et permet par là même, d'obtenir des informations supplémentaires sur les endroits monopolisant les cycles CPU :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM   cswch/s
12:10:00 AM    537.97
12:20:01 AM    339.43
…
10:10:00 AM    319.42
Average:      1158.25
        

Il est également possible de créer deux rapports sar différents fournissant des informations sur l'activité d'interruption. Le premier (produit à l'aide de la commande sar -I SUM) affiche une seule statistique sur les "interruptions par seconde" :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (falcon.example.com)      07/21/2003

12:00:01 AM      INTR    intr/s
12:10:00 AM       sum    539.15
12:20:01 AM       sum    539.49
…
10:40:01 AM       sum    539.10
Average:          sum    541.00
        

À l'aide de la commande sar -I PROC, il est possible de ventiler les données relatives à l'activité d'interruption par processeur (sur des systèmes à processeurs multiples) et par niveau d'interruption (de 0 à 15) comme le montre l'extrait ci-dessous :

Linux 2.4.21-1.1931.2.349.2.2.entsmp (pigdog.example.com)     07/21/2003

12:00:00 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:10:01 AM    0  512.01    0.00    0.00    0.00    3.44    0.00    0.00

12:10:01 AM  CPU  i000/s  i001/s  i002/s  i008/s  i009/s  i011/s  i012/s
12:20:01 AM    0  512.00    0.00    0.00    0.00    3.73    0.00    0.00
…
10:30:01 AM  CPU  i000/s  i001/s  i002/s  i003/s  i008/s  i009/s  i010/s
10:40:02 AM    0  512.00    1.67    0.00    0.00    0.00   15.08    0.00
Average:       0  512.00    0.42    0.00     N/A    0.00    6.03     N/A
        

Ce rapport (tronqué afin de tenir sur la page) comprend une colonne par niveau d'interruption (le champ i002/s illustrant le taux pour le niveau 2 d'interruption). Si ce système était doté de processeurs multiples, la sortie comprendrait une ligne par période d'échantillonnage et ce, pour chaque CPU.

Un autre point important à noter concernant ce rapport est que sar ajoute ou retire des champs d'interruption spécifiques, si aucune information n'est recueillie pour le champ en question. Comme le montre l'exemple ci-dessus, la fin du rapport inclut des niveaux d'interruption (à savoir 3 et 10) qui n'apparaissaient pas au début de la période d'échantillonnage.

NoteRemarque
 

Il existe deux autres rapports sar fournissant des informations sur les interruptions — sar -I ALL et sar -I XALL. Toutefois, la configuration par défaut de l'utilitaire de recueil de données sadc ne récolte pas les informations nécessaires pour ces rapports. Pour changer la situation, il suffit de modifier le fichier /etc/cron.d/sysstat en modifiant la ligne suivante :

*/10 * * * * root /usr/lib/sa/sa1 1 1
          

de sorte à qu'elle ressemble à la ligne ci-dessous :

*/10 * * * * root /usr/lib/sa/sa1 -I 1 1
          

Notez bien que cette modification donne à sadc l'instruction de recueillir des données supplémentaires et que par conséquent, elle entraîne la création de fichiers de données plus volumineux. Il est donc essentiel de vous assurez que la configuration de votre système peut bien prendre en charge une consommation d'espace supplémentaire.