OS X Server : évaluation des performances

Cet article décrit comment vous pouvez utiliser un script pour commencer à évaluer les performances d’un serveur exécutant Mac OS X Server 10.4 ou version ultérieure. L’objectif principal est d’identifier l’utilisation des ressources clés : processeur, stockage sur disque et mise en réseau.

Utilisation des ressources

Vous pouvez utiliser ce script Perl (nommé « top_guide.pl ») pour évaluer l’utilisation à long terme des ressources clés sur votre serveur. Ce script est compatible avec Mac OS X Server 10.4 ou version ultérieure.

Le script exécute top -d, mais extrait et résume l’utilisation à long terme des ressources clés. En l’absence d’arguments, le résultat du script top_guide.pl ressemble à ceci :

-------- ----------- ------------ ------------- ------------- ------------- ------------- ------ CPU usage: 300-s Reads/sec: Writes/sec: Net in/sec: Net out/sec: kernel Time: user sys Idle avg. number MB number MB pkts Mb pkts Mb CPU% -------- ----- ----- ----- ----- ------ ------ ------ ------ ------ ------ ------ ------ ------ 08:44:36 0.1 0.1 99.8 99.8 0 0.0 0 0.0 11 0.0 0 0.0 0.4 08:44:46 0.1 0.3 99.6 99.8 0 0.0 0 0.1 12 0.0 0 0.0 0.4 08:44:56 0.0 0.2 99.8 99.8 0 0.0 0 0.0 17 0.0 0 0.0 0.4 08:45:06 0.0 0.2 99.8 99.8 0 0.0 0 0.0 6 0.0 0 0.0 0.4 08:45:16 0.0 0.2 99.8 99.8 0 0.0 0 0.0 9 0.0 0 0.0 0.4 08:45:26 8.7 24.6 66.7 98.6 43 0.8 98 0.6 803 1.0 1399 1.1 5.0 08:45:37 5.7 83.6 10.7 95.7 48 0.4 1085 116.9 95366 1053.1 61830 35.4 72.4 08:45:47 11.5 88.5 0.0 92.4 23 0.2 3228 426.9 337955 3843.6 207872 114.0 284.8 08:45:58 4.6 95.4 0.0 89.0 4 0.0 594 596.7 447499 5215.5 266449 140.9 370.0

Vous pouvez voir les trois domaines clés identifiés : le processeur, les E/S de disque et la mise en réseau. Les colonnes sont les suivantes :

  • Time (Heure) : heure de fin de la ligne de récapitulatif la plus récente. La durée par défaut entre chaque échantillon est de 10 secondes.

  • CPU usage : user (Utilisation du processeur : utilisateur) : utilisation du processeur en mode utilisateur. La valeur correspond à un pourcentage du total des ressources du processeur disponibles sur le système. Par exemple, sur un système à huit processeurs, un pourcentage d’utilisation de 50 % du processeur en mode utilisateur signifierait que quatre processeurs sont nécessaires à l’exécution de toutes les applications actives.

  • CPU usage : sys (Utilisation du processeur : système) : utilisation du processeur en mode noyau, en pourcentage du total du processeur disponible.

  • Idle (Inactif) : processeur inactif, en pourcentage du total des ressources disponibles.

  • 300-s avg (Moyenne sur 300 secondes) : moyenne lissée du pourcentage de processeur non utilisé au cours des 300 dernières secondes. (Notez que le nom de cette colonne change si vous utilisez l’option -r pour ajuster l’intervalle de la moyenne.)

  • Reads/sec - number (Nombre de lectures/seconde) : nombre d’opérations de lecture de disque uniques effectuées au cours de la période d’échantillonnage.

  • Reads/sec - MB (Mo lus/seconde) : volume total de données en Mo lues à partir des disques pendant la période d’échantillonnage.

  • Writes/sec - number (Nombre d’écritures/seconde) : nombre d’opérations d’écriture uniques effectuées au cours de la période d’échantillonnage.

  • Writes/sec - MB (Mo écrits/seconde) : volume total de données en Mo écrites pendant la période d’échantillonnage.

  • Net in/sec - pkts (Paquets d’entrées réseau/seconde) : total des paquets reçus au cours de la période d’échantillonnage.

  • Net in/sec - Mb (Entrées réseau/seconde en Mo) : volume total d’entrées réseau en Mo par seconde pendant la période d’échantillonnage.

  • Net out/sec - pkts (Paquets de sorties réseau/seconde) : total des paquets réseau envoyés pendant la période d’échantillonnage.

  • Net out/sec - Mb (Sorties réseau/seconde en Mo) : volume total des sorties réseau en Mo par seconde pendant la période d’échantillonnage.

Les autres options prises en charge par le script sont les suivantes :

  • -h : affiche toutes les informations relatives à l’utilisation.

  • -o filename : place une copie des résultats dans un fichier dont les valeurs sont séparées par des tabulations. Ce format de résultat peut être importé dans une feuille de calcul ou dans tout autre script d’analyse de données. La première ligne comprend les en-têtes de colonne afin que les résultats soient toujours compréhensibles.

  • -d : affiche la date et l’heure. Ceci est particulièrement utile pour la consignation à long terme sur un serveur où l’administrateur souhaiterait conserver un historique.

  • -S processNames : surveille les processus à instance unique. Ceci est utile si un service particulier qui n’a qu’un seul identifiant de processus est particulièrement intéressant sur un serveur, par exemple un serveur utilisé principalement comme serveur AFP. Dans ce cas, utilisez les arguments -S AppleFileServer afin d’ajouter une colonne distincte relative à l’utilisation du processeur par l’utilisateur pour le processus AppleFileServer. Vous pouvez répertorier plusieurs processus en les séparant par des virgules.

  • -M processNames : semblable à -S, sauf qu’elle est employée lorsque l’application utilise plusieurs processus. Par exemple, smbd utilise un processus par connexion. Sur un système majoritairement utilisé pour Samba, utilisez -M smbd pour obtenir une colonne qui récapitule l’utilisation du processeur par l’utilisateur pour toutes les activités Samba.

Bien que l’analyse complète des performances du serveur dépasse le cadre de cet article, le résultat du script top_guide.pl fournit un récapitulatif de l’utilisation des ressources du processeur, du disque et de la mise en réseau du système. Un administrateur peut comparer ces données avec le matériel et la charge du système afin de décider quel domaine étudier plus en détail. Des outils supplémentaires pouvant être utiles à l’analyse de chaque domaine sont décrits ci-dessous.

Utilisation du processeur

Si l’utilisation du processeur est élevée, alors l’objectif principal de l’analyse est d’améliorer les performances de l’application. Ce sujet n’est pas approfondi dans cet article, mais le processeur n’est parfois pas utilisé. Plusieurs outils peuvent vous aider à analyser les cas où il y a suffisamment de ressources réseau et sur disque pour une charge plus élevée, mais où une part importante du processeur reste inactive.

Voici deux explications à la sous-utilisation d’un processeur :

  • Verrouillage des fils de l’application

  • Verrouillage des ressources du noyau

Intégrée à Mac OS X Leopard 10.5, la commande plockstat(1) peut être exécutée sur une application spécifique pour examiner les conflits de verrouillage pthread. Vous pouvez identifier les processus qui pourraient avoir un conflit de verrouillage pthread en examinant le résultat de top -d pour les processus disposant d’un nombre élevé de commutations de contexte (colonne CSW). Une fois que vous avez identifié un processus pour lequel une analyse de conflit de verrouillage pthread est nécessaire, utilisez la commande suivante : # plockstat -C -e 10 -p .

Mutex block Count nsec Lock Caller ------------------------------------------------------------------------------- 8540 29622 0x805eb0 a.out`process_request+0x3d1 8361 28284 0x805eb0 a.out`release_block+0xac R/W reader block Count nsec Lock Caller ------------------------------------------------------------------------------- 1 3014987 0xa781e8 a.out`key_find+0x121 5 78831 0xa3d158 a.out`key_find+0x121 2 120532 0xa3d158 a.out`key_delete+0x137 R/W writer block Count nsec Lock Caller ------------------------------------------------------------------------------- 10 5336318 0xa781e8 a.out`key_replace+0x80 13 3827632 0xa75fe8 a.out`key_replace+0x80 3 3644946 0xa5fde8 a.out`key_create+0x37 6 161055 0xa3d158 a.out`key_replace+0x80 1 785267 0xa37758 a.out`key_create+0x37

Vous pouvez examiner le résultat et consulter la quantité totale de nsec bloqués derrière divers verrouillages. Si cette valeur est élevée par rapport au total, le temps d’exécution est ralenti par les conflits de verrouillage. Ces informations peuvent être utiles au rédacteur de l’application pour isoler les problèmes et améliorer les performances de l’application. Si des symboles sont disponibles, le champ Caller (Appelant) contiendra le nom symbolique de la fonction bloquée. De plus, si le nombre total de blocages est élevé (supérieur à environ 250 par seconde), alors la reprogrammation entre les fils a un impact négatif sur les performances de l’application. Bien qu’ils ne soient pas suffisants pour être considérés comme des facteurs de ralentissement des performances, les taux de blocage élevés doivent être examinés, car ils entraînent dans la plupart des cas une perte d’efficacité.

Parfois, les problèmes de conflits des ressources concernent les ressources du noyau. Le noyau Mac OS X gère la plupart des ressources multifils avec des mutex de noyau et des verrouillages lecteur-rédacteur. Les conflits de mutex peuvent être évalués à l’aide de scripts dtrace(1M) tels que :

lockstat:::adaptive-block { @often[arg0, stack(5)] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); }

Une liste hiérarchisée est alors imprimée. Elle présente les verrouillages et les chemins les plus courants au bas de chaque blocage de sortie imprimé après cinq secondes d’échantillonnage. Voici un exemple de résultat :

375517140 mach_kernel`lck_mtx_lock_wait_x86+0x1c7 mach_kernel`lck_mtx_lock+0x217 mach_kernel`ip_output_list+0xd34 mach_kernel`tcp_setpersist+0x18b mach_kernel`tcp_output+0x17a0 0 375571960 mach_kernel`lck_mtx_lock_wait_x86+0x1c7 mach_kernel`lck_mtx_lock+0x217 mach_kernel`vnode_ref+0x32 mach_kernel`fcntl_nocancel+0x4b3 mach_kernel`unix_syscall64+0x26d 0

Dans ce cas, le script signale que le mutex du noyau à l’adresse 375517140 est bloqué par un chemin sur lequel la fonction tcp_output() entraîne la fonction tcp_setpersist(), qui entraîne elle-même la fonction ip_output_list(). Le nombre de blocages par seconde étant nul sur ces deux verrouillages, le conflit de verrouillage ne pose donc pas de problème. Notez que cette forme de script ne répertorie pas toutes les instances d’un seul verrouillage. Si le script était le suivant :

lockstat:::adaptive-block { @often[arg0] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); }

Le résultat pourrait être :

1301055072 9 1417504384 9 353318336 10 359381776 10 1301055088 11 5387344 165

Cela indique que le verrouillage situé à l’adresse de noyau 5387344 présente un conflit non négligeable, mais pas inquiétant, car inférieur à 250.

Enfin, le script peut se concentrer sur les verrouillages lecteur-rédacteur du noyau s’il est modifié de la manière suivante :

lockstat:::rw-block { @often[arg0, stack(4)] = count(); } profile:::tick-5sec { normalize(@often, 5); printa(@often); clear(@often); }

Voici quelques éléments à retenir concernant l’utilisation des scripts lockstat dtrace(1M) et plockstat(1) :

  • La collecte de statistiques de verrouillage affecte les performances. Ces outils peuvent ralentir le système. Utilisez-les avec précaution, et rappelez-vous que l’impact sur les performances ajoutera un conflit qui n’est pas présent en temps normal.

  • Certaines conceptions ne sont pas affectées par le simple blocage des verrouillages. Envisagez de placer un verrouillage sur une ressource qui subit peu de modifications afin de la gérer plus facilement. Le verrouillage peut être maintenu en attendant qu’une opération de longue durée soit terminée.

Les temps d’attente de ces verrouillages sont susceptibles d’être plus longs, sans toutefois avoir d’impact sur les performances.

Utilisation du disque

iopending(1) donne une indication sur la profondeur des files d’attente d’E/S, sous forme d’histogrammes. Par exemple :

2008 May 21 10:35:26, load: 0.99, disk_r: 0 KB, disk_w: 392 KB

value ------------- Distribution ------------- count < 0 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 9298 1 | 12 2 | 5 3 | 4 4 | 2 5 | 3 6 | 2 7 | 2 8 | 3 9 | 2 10 | 3 11 | 2 12 | 2 13 | 2 14 | 2 15 | 0

Cela indique une certaine activité sur le disque. Une telle activité n’est toutefois pas préoccupante, car presque toute la file d’attente d’E/S présente une longueur nulle. De plus, vous pouvez utiliser iopending pour vous concentrer sur un disque ou un volume de système de fichiers en particulier. Par exemple, pour vous concentrer sur /Volumes/MyRAID, utilisez iopending -m MyRAID.

Enfin, vous pouvez attribuer une E/S à des processus spécifiques et évaluer la latence à l’aide de fs_usage(1). Pour en savoir plus sur l’utilisation de Shark et fs_usage(1), consultez le document Developer Connection.

Utilisation du réseau

De nombreux serveurs peuvent disposer de plusieurs interfaces réseau et de plusieurs clients à différentes distances sur le réseau. L’analyse des performances peut donc s’avérer complexe. Cependant, dans le cas de réseaux LAN où les clients sont directement connectés par le biais d’une vitesse connue, les mesures rapportées par le script top_guide.pl ainsi que l’option netstat -i fourniront des informations sur l’utilisation des capacités disponibles. Lors de l’interprétation de ces valeurs, gardez à l’esprit les indications suivantes :

Réseaux Gigabit - Full Duplex, MTU de 1 500 octets

Taux maximaux - petits paquets : 1 488 Kp/s 762 Mbit/s

Taux maximaux pour paquets - paquets de 1 500 octets : 81 Kp/s 987 Mbit/s

(Kp/s = milliers de paquets par seconde)

Lors de l’analyse des performances du réseau, il est également utile de consulter les résultats de netstat -s pour les problèmes tels que des taux de retransmission de paquets excessifs (problème qui dépasse le cadre de cet article).

Informations supplémentaires

Les informations se rapportant à des produits non fabriqués par Apple, ou à des sites Web indépendants qui ne sont ni contrôlés ni testés par Apple, sont fournies uniquement à titre indicatif et ne constituent aucune recommandation. Apple ne saurait être tenu responsable de problèmes liés à l’utilisation de tels sites ou produits tiers, ou à leurs performances. Apple ne garantit en aucune façon la fiabilité d’un site Web tiers ni l’exactitude des informations que ce dernier propose. Contactez le fournisseur pour plus d’informations.

Date de publication: