Perf - Un outil de surveillance et d’analyse des performances pour Linux
Lorsque l’on parle de performance en informatique, on fait référence à la relation entre nos ressources et les tâches qu’elles nous permettent d’accomplir dans un laps de temps donné.
À l’heure de la concurrence féroce entre les entreprises, il est important que nous apprenions à utiliser ce que nous avons au mieux de ses capacités. Le gaspillage de ressources matérielles ou logicielles, ou le manque de capacité à savoir comment les utiliser plus efficacement, finit par être une perte que nous ne pouvons tout simplement pas nous permettre si nous voulons être au sommet de notre art.
Dans le même temps, nous devons veiller à ne pas pousser nos ressources à une limite telle qu’une utilisation soutenue entraînera des dommages irréparables.
Dans cet article, nous allons vous présenter un outil d’analyse des performances relativement nouveau et vous fournir des conseils que vous pouvez utiliser pour surveiller vos systèmes Linux, y compris le matériel et les applications. Cela vous aidera à vous assurer qu’ils fonctionnent de manière à ce que vous soyez capable de produire les résultats souhaités sans gaspiller de ressources ou de votre propre énergie.
Présentation et installation de Perf sous Linux
Linux fournit, entre autres, un outil de surveillance et d’analyse des performances appelé commodément perf. Alors, qu’est-ce qui distingue perf d’autres outils bien connus avec lesquels vous êtes déjà familier ?
La réponse est que perf donne accès à l’unité de surveillance des performances dans le processeur, et nous permet ainsi d’examiner de près le comportement du matériel et ses événements associés.
En outre, il peut également surveiller les événements logiciels et créer des rapports à partir des données collectées.
Vous pouvez installer perf dans des distributions basées sur RPM avec :
# yum update && yum install perf [CentOS / RHEL / Fedora]
dnf update && dnf install perf [Fedora 23+ releases]
Dans Debian et dérivés :
# sudo aptitude update && sudo aptitude install linux-tools-$(uname -r) linux-tools-generic
Si uname -r dans la commande ci-dessus renvoie des chaînes supplémentaires en plus de la version réelle (3.2.0-23-generic dans mon cas), vous devrez peut-être taper linux-tools-3.2.0-23 au lieu d’utiliser la sortie de uname.
Il est également important de noter que perf donne des résultats incomplets lorsqu’il est exécuté dans un invité au-dessus de VirtualBox ou VMWare, car ils ne permettent pas l’accès aux compteurs matériels comme le font d’autres technologies de virtualisation (telles que KVM ou XEN).
De plus, gardez à l’esprit que certaines commandes perf peuvent être limitées à root par défaut, qui peut être désactivée (jusqu’à ce que le système soit redémarré) en procédant comme suit :
# echo 0 > /proc/sys/kernel/perf_event_paranoid
Si vous devez désactiver définitivement le mode paranoïaque, mettez à jour le paramètre suivant dans le fichier /etc/sysctl.conf.
kernel.perf_event_paranoid = 0
Sous-commandes
Une fois que vous avez installé perf, vous pouvez vous référer à sa page de manuel pour une liste des sous-commandes disponibles (vous pouvez considérer les sous-commandes comme des options spéciales qui ouvrent une fenêtre spécifique dans le système). Pour des résultats meilleurs et plus complets, utilisez perf soit comme racine, soit par sudo.
Liste des performances
Perf list (sans options) Renvoie tous les types d’événements symboliques (liste longue). Si vous souhaitez afficher la liste des événements disponibles dans une catégorie spécifique, utilisez la liste de performances suivie du nom de la catégorie ([hw|sw|cache|tracepoint|pmu|event_glob]), par exemple :
Affichage de la liste des événements logiciels prédéfinis sous Linux :
# perf list sw
Statistique de performance
perf stat exécute une commande et collecte des statistiques de performance Linux pendant l’exécution de cette commande. Que se passe-t-il dans notre système lorsque nous exécutons dd ?
# perf stat dd if=/dev/zero of=test.iso bs=10M count=1
Les statistiques ci-dessus indiquent, entre autres :
- L’exécution de la commande dd a pris 21,812281 millisecondes de CPU. Si nous divisons ce nombre par la valeur « secondes de temps écoulé » ci-dessous (23,914596 millisecondes), cela donne 0,912 (CPU utilisé).
- Pendant l’exécution de la commande, 15 commutateurs de contexte (également appelés commutateurs de processus) indiquent que les processeurs ont été commutés 15 fois d’un processus (ou thread) à un autre.
- 2 migrations de processeur est le résultat attendu lorsque dans un processeur à 2 cœurs, la charge de travail est répartie uniformément entre le nombre de cœurs.
Au cours de cette période (21,812281 millisecondes), le nombre total de cycles de processeur consommés était de 62 025 623, ce qui, divisé par 0,021812281 secondes, donne 2,843 GHz. - Si nous divisons le nombre de cycles par le nombre total d’instructions, nous obtenons 4,9 cycles par instruction, ce qui signifie que chaque instruction a nécessité près de 5 cycles CPU (en moyenne). Nous pouvons imputer cela (au moins en partie) au nombre de branches et d’échecs de branches (voir ci-dessous), qui finissent par gaspiller ou abuser des cycles CPU.
- Au moment de l’exécution de l’ordre, un total de 3 552 630 branches ont été rencontrées. Il s’agit de la représentation au niveau du processeur des points de décision et des boucles dans le code. Plus il y a de branches, plus les performances sont faibles. Pour compenser cela, tous les processeurs modernes tentent de prédire le flux que prendra le code. 51 348 erreurs de branche indiquent que la fonction de prédiction était erronée dans 1,45 % des cas.
Le même principe s’applique à la collecte de statistiques (ou en d’autres termes, au profilage) pendant l’exécution d’une application. Il suffit de lancer l’application souhaitée et après une période de temps raisonnable (qui dépend de vous), de la fermer, et vous afficherez les statistiques à l’écran. En analysant ces statistiques, vous pouvez identifier les problèmes potentiels.
Top Perf
Perf top est similaire à top Command, en ce sens qu’il affiche un profil système presque en temps réel (également connu sous le nom d’analyse en direct).
Avec l’option -a, vous afficherez tous les types d’événements connus, tandis que l’option -e vous permettra de choisir une catégorie d’événement spécifique (comme renvoyé par la liste de performances) :
Affichera tous les événements de cycles.
perf top -a
Affichera tous les événements liés à l’horloge du processeur.
perf top -e cpu-clock
La première colonne de la sortie ci-dessus représente le pourcentage d’échantillons prélevés depuis le début de l’exécution, regroupés par fonction Symbole et Objet partagé. D’autres options sont disponibles dans le perf-top homme.
Enregistrement de performance
perf record exécute une commande et enregistre les données statistiques dans un fichier nommé perf.data à l’intérieur du répertoire de travail actuel. Il fonctionne de la même manière que perf stat.
Tapez perf record suivi d’une commande :
# perf record dd if=/dev/null of=test.iso bs=10M count=1
Rapport de performance
Le rapport Perf formate les données collectées dans perf.data ci-dessus dans un rapport de performance :
# sudo perf report
Toutes les sous-commandes ci-dessus ont une page de manuel dédiée qui peut être appelée comme suit :
# man perf-subcommand
où la sous-commande est list, stat, top, record ou report. Il s’agit des sous-commandes les plus fréquemment utilisées. d’autres sont listés dans la documentation (voir la section Résumé pour le lien).
Résumé
Dans ce guide, nous vous avons présenté perf, un outil de surveillance et d’analyse des performances pour Linux. Nous vous encourageons vivement à vous familiariser avec sa documentation qui est conservée dans https://perf.wiki.kernel.org.
Si vous trouvez des applications qui consomment un pourcentage élevé de ressources, vous pouvez envisager de modifier le code source ou d’utiliser d’autres alternatives.
Si vous avez des questions sur cet article ou des suggestions pour l’améliorer, nous sommes tout ouïe. N’hésitez pas à nous contacter en utilisant le formulaire de commentaire ci-dessous.





