Performance

Tutoriel OProfile

Tutoriel OProfile

OProfile est un profileur de performances pour Linux. Dans cet article, nous allons explorer ce qu'il fait, comment l'installer et le configurer, et comment utiliser les données qu'il assemble.

Vous vous demandez peut-être pourquoi vous auriez besoin d'un tel outil, car de nombreux bons outils d'analyse des performances sont disponibles par défaut sur la plupart des distributions Linux. Chaque installation comprend des outils tels que top et vmstat, et les utilitaires de traçage tels que strace ne sont généralement qu'un moyen de s'évader. Où OProfile s'intègre-t-il?

Les outils mentionnés précédemment sont excellents pour obtenir un instantané d'un système Linux en temps réel. Des outils tels que top ou htop affichent tous les processus en cours, leur consommation actuelle de mémoire et l'utilisation du processeur. Mais savoir quels processus et appels système consomment le plus de ressources devient problématique.

C'est là qu'intervient OProfile. Cette suite d'utilitaires effectue non seulement son analyse à un niveau plus profond, mais enregistre également des données et vous permet de produire des rapports de performances offrant une mine d'informations pouvant vous aider à déboguer même les problèmes de performances les plus insaisissables.

OProfile n'est pas seulement pour les développeurs. Dans un environnement de bureau, OProfile peut vous aider à localiser les tâches d'arrière-plan gourmandes en ressources processeur ou les appels d'E/S qui vous ralentissent et ne sont pas immédiatement évidents. Sur un système chargé avec des priorités de processus changeantes, ces données peuvent être difficiles à collecter, et encore moins à interpréter. La nature multi-processus d'un environnement serveur rend cette tâche encore plus difficile avec les outils traditionnels.

Cela dit, les développeurs tireront sans aucun doute le meilleur parti d'OProfile. Les informations que je présenterai couvriront les bases des deux cas d'utilisation afin que vous puissiez creuser dans les métriques de performance de n'importe quel programme Linux.

Installation

Il y a une note très importante qui doit être faite avant de plonger profondément dans OProfile - vous ne pourrez peut-être pas l'installer dans un environnement virtualisé. Si vous exécutez Linux dans un environnement VirtualBox, VMWare ou similaire, OProfile peut ne pas être en mesure d'accéder aux compteurs de performances nécessaires pour collecter des données. De plus, même si vous pouvez l'utiliser dans un environnement virtuel, le timing précis peut être quelque peu déformé en fonction de la charge du système hôte, alors gardez cela à l'esprit si vous n'exécutez pas sur du matériel natif.

Plusieurs distributions Linux ont OProfile dans leurs systèmes de gestion de packages, ce qui facilite l'installation :

Un exemple simple

Une fois le programme installé, nous allons nous mouiller les pieds avec un exemple trivial mais utile. Le programme "ls" est une commande que vous utilisez probablement tout le temps. Il affiche simplement une liste de fichiers et de dossiers dans le répertoire actuel. Traçons sa sortie :

sudo operf ls

Vous verrez quelque chose de similaire à la capture d'écran ci-dessus. Une fois le profileur terminé, il annoncera "Profiling done.” Il a enregistré ses données dans un dossier appelé oprofile_data qui peut être utilisé pour générer un rapport.

L'exécution de la commande opreport (sans sudo dans ce cas) produit un rapport similaire à celui-ci :

Dans cet exemple, le rapport par défaut indique le nombre d'échantillons lorsque le processeur n'était pas dans un état HALT (en d'autres termes, faisait activement quelque chose). Kallsyms fournit une recherche de symbole utilisée par le profileur, et le ld.ainsi et libc.font donc partie du package glibc, une bibliothèque commune liée à presque tous les exécutables Linux qui fournit des fonctionnalités de base que les développeurs peuvent utiliser pour éviter de réinventer la roue et fournir un niveau générique de compatibilité entre les différents systèmes. Vous pouvez voir que le programme réel ls avait beaucoup moins de temps sans HALT - le gros du travail a été fait par les bibliothèques standard.

Une fois que nous avons terminé avec le rapport, c'est une bonne idée de supprimer le dossier de données ou de l'enregistrer pour une analyse future. Dans cet exemple, nous allons simplement le supprimer car nous exécutons des exemples d'exercices. Puisque nous avons exécuté la commande avec sudo, nous devons supprimer le dossier avec sudo. Fais attention!

sudo rm -Rf oprofile_data

Un exemple plus complexe

Dans cet exemple suivant, nous allons exécuter un programme qui fait en fait quelque chose de plus complexe que de simplement lister les fichiers dans le dossier actuel. Téléchargeons WordPress avec wget.

sudo operf wget http://wordpress.org/dernier.le goudron.gz

Après cet exemple, nous pouvons générer un rapport avec la commande « opreport » :

Vous verrez beaucoup plus d'activité après celui-ci. La commande wget a dû faire beaucoup de travail en coulisse pour obtenir la dernière copie de WordPress. Bien qu'il ne soit pas nécessaire d'examiner chaque élément, les points d'intérêt intéressants sont :

Ce type de données peut fournir une mine d'informations pour un développeur. Mais en quoi est-ce important pour un administrateur système d'un serveur ou un utilisateur avec pouvoir sur un ordinateur de bureau? En sachant quelles parties d'un programme prennent le plus de temps CPU, nous pouvons découvrir ce qui a besoin d'être optimisé ou où le ralentissement se produit, ce qui nous permet de prendre de meilleures décisions sur la façon d'optimiser notre système.

Dans cet exemple, le plus de temps CPU a été pris par les routines crypto/SSL. Ceci est compréhensible car la cryptographie est une tâche qui prend du temps. Avait le wordpress.org ne nous a pas redirigé vers https:// cette bibliothèque n'aurait pas été utilisée, ce qui nous a fait gagner du temps CPU. La couche réseau aurait toujours été utilisée, mais l'utilisation d'une connexion filaire au lieu d'une connexion sans fil aurait probablement été moins exigeante. La désactivation de l'indicateur de progression sur le programme wget (via le commutateur -nv) aurait permis de gagner du temps CPU lors de l'affichage de la progression du téléchargement.

Creuser dans les symboles

Même si le rapport par défaut fournit des informations précieuses et utiles, nous pouvons aller plus loin. En exécutant ceci :

opreport --demangle=smart --symbols

Nous pouvons savoir exactement combien de temps CPU les fonctions consommées dans les bibliothèques :

Dans cet exemple, j'ai utilisé la commande wget ci-dessus mais j'ai utilisé une URL http:// (une qui ne redirige pas vers https://) et vous pouvez voir l'absence de bibliothèques OpenSSL dans la trace. Cependant, au lieu du nom de la bibliothèque, nous avons maintenant une liste complète des fonctions impliquées. Comme vous pouvez le voir, la couche réseau a consommé la majeure partie du temps CPU non-HALT.

Passer au niveau supérieur

Dans les exemples précédents, nous avons utilisé OProfile pour examiner un programme à la fois. Vous pouvez examiner l'ensemble de votre système à la fois à l'aide du commutateur -system-wide :

sudo operf --à l'échelle du système

En utilisant cette technique, OProfile collectera des statistiques de la même manière et s'arrêtera lorsque vous appuyez sur CTRL+C. Ensuite, vous pouvez exécuter la commande opreport. Étant donné que le profileur générera probablement beaucoup plus de données (en particulier sur un ordinateur de bureau ou un serveur occupé).

rapport d'exploitation > rapport.SMS

Le rapport est maintenant visible dans un fichier appelé rapport.SMS

Faibles frais généraux

Il est important de noter que même si OProfile ne devrait pas interférer avec le fonctionnement de vos programmes, il créera un peu de surcharge et ralentira ainsi l'exécution. Dans nos exemples simples ci-dessus, cela n'a pas posé de problème, mais sur un programme avec une exécution longue et des appels de fonction étendus, vous remarquerez probablement une différence. Pour cette raison, je ne recommanderais pas d'utiliser ce programme dans un environnement de serveur de production à moins d'être confronté à un problème de performance critique qui doit être résolu avec une utilisation en direct. Même alors, je l'utiliserais juste assez longtemps pour trouver le problème.

Conclusion

OProfile est un puissant outil de profilage des performances. Il exploite le niveau le plus bas disponible dans Linux pour obtenir des compteurs de performances et des métriques qui vous donnent des informations précieuses sur vos programmes.

Fini le temps des conjectures dans le débogage des performances - vous avez maintenant le pouvoir de savoir précisément ce que fait votre système et comment l'améliorer. En étudiant les rapports générés par OProfile, vous pouvez prendre des décisions éclairées et basées sur les données pour optimiser votre système.

Émulez les clics de souris en survolant à l'aide de la souris sans clic dans Windows 10
L'utilisation d'une souris ou d'un clavier dans la mauvaise posture d'une utilisation excessive peut entraîner de nombreux problèmes de santé, notamme...
Ajoutez des gestes de souris à Windows 10 à l'aide de ces outils gratuits
Ces dernières années, les ordinateurs et les systèmes d'exploitation ont considérablement évolué. Il fut un temps où les utilisateurs devaient utilise...
Contrôlez et gérez le mouvement de la souris entre plusieurs moniteurs dans Windows 10
Gestionnaire de souris à double affichage vous permet de contrôler et de configurer le mouvement de la souris entre plusieurs moniteurs, en ralentissa...