Une collection diverse d'outils d'analyse des performances en développement et non pris en charge pour Linux ftrace et perf_events (alias la commande "perf"). Ftrace et perf sont tous deux des outils de traçage Linux de base, inclus dans les sources du noyau. Votre système a probablement déjà ftrace, et perf n'est souvent qu'un ajout de package (voir Prérequis).
Ces outils sont conçus pour être faciles à installer (moins de dépendances), fournir une observabilité avancée des performances et être simples à utiliser : faites une chose et faites-la bien. Cette collection a été créée par Brendan Gregg (auteur du DTraceToolkit).
Beaucoup de ces outils utilisent des solutions de contournement afin que les fonctionnalités soient possibles sur les noyaux Linux existants. Pour cette raison, de nombreux outils comportent des mises en garde (voir les pages de manuel) et leur implémentation doit être considérée comme un espace réservé jusqu'à ce que de futures fonctionnalités du noyau ou de nouveaux sous-systèmes de traçage soient ajoutés.
Ceux-ci sont destinés aux noyaux Linux 3.2 et plus récents. Pour Linux 2.6.x, consultez Avertissements.
Ces outils ont été introduits dans la présentation USENIX LISA 2014 : Linux Performance Analysis : New Tools and Old Secrets
Utilisation de ftace :
Utilisation de perf_events :
Utilisation de l'eBPF :
Afficher de nouveaux processus et arguments :
# ./execsnoop Suivi des exécutifs. Ctrl-C pour terminer. PID PPID ARGS 22898 22004 homme cs 22905 22898 préconversion -e UTF-8 22908 22898 téléavertisseur -s 22907 22898 nroff -mandoc -rLL=164n -rLT=164n -Tutf8 22906 22898 cuillères 22911 22910 carte charmante de paramètres régionaux 22912 22907 groff -mtty-char -Tutf8 -mandoc -rLL=164n -rLT=164n 22913 22912 troff -mtty-char -mandoc -rLL=164n -rLT=164n -Tutf8 22914 22912 minable
Mesure de la latence d'E/S du périphérique de bloc depuis l'insertion de la file d'attente jusqu'à la fin :
# ./iolatence -Q Bloc de suivi des E/S. Sortie toutes les 1 secondes. Ctrl-C pour terminer. >=(ms) .. <(ms) : E/S |Distribution | 0 -> 1 : 1913 |#####################################| 1 -> 2 : 438 |######### | 2 -> 4 : 100 |## | 4 -> 8 : 145 |### | 8 -> 16 : 43 |# | 16 -> 32 : 43 |# | 32 -> 64 : 1 |# | [...]
Traçage du point de trace block:block_rq_insert, avec les traces de la pile du noyau, et uniquement pour les lectures :
# ./tpoint -s block:block_rq_insert 'rwbs ~ "*R*"' cksum-11908 [000] d... 7269839.919098 : block_rq_insert : 202,1 R 0 () 736560 + 136 [cksum] cksum-11908 [000] d... 7269839.919107 : => __elv_add_request => blk_flush_plug_list => blk_finish_plug => __do_page_cache_readahead => ondemand_readahead => page_cache_async_readahead => fichier_générique_read_iter => new_sync_read => vfs_read => SyS_read => system_call_fastpath [...]
Comptez les appels de fonction du noyau commençant par "bio_", résumez chaque seconde :
# ./funccount -i 1 'bio_*' Traçage de "bio_*"... Ctrl-C pour terminer. COMPTE DE FONCTION bio_attempt_back_merge 26 bio_get_nr_vecs 361 bio_alloc 536 bio_alloc_bioset 536 bio_endio 536 bio_gratuit 536 bio_fs_destructeur 536 bio_init 536 bio_integrity_enabled 536 bio_put 729 bio_add_page 1004 [...]
Il existe de nombreux autres exemples dans le répertoire des exemples. Consultez également les pages de manuel.
L'intention est aussi peu nombreuse que possible. Par exemple, un serveur Linux 3.2 sans informations de débogage. Consultez la page de manuel de l'outil pour plus de détails.
FTRACE configuré dans le noyau. Vous l'avez peut-être déjà configuré et disponible dans votre version du noyau, car FTRACE a été ajouté pour la première fois dans la version 2.6.27. Cela nécessite CONFIG_FTRACE et d'autres options FTRACE en fonction de l'outil. Certains outils (par exemple, funccount) nécessitent CONFIG_FUNCTION_PROFILER.
Nécessite l'installation de la commande "perf". C'est dans le paquet linux-tools-common. Après avoir installé cela, perf peut vous demander d'installer un paquet linux-tools supplémentaire (linux-tools -kernel_version ). perf peut également être construit sous tools/perf dans les sources du noyau. Voir les prérequis de perf_events pour plus de détails sur le fonctionnement complet de perf_events.
Nécessite un noyau avec l'option CONFIG_DEBUG_FS activée. Comme avec FTRACE, cela peut déjà être activé (debugfs a été ajouté dans 2.6.10-rc3). Le debugfs doit également être monté :
# mount -t debugfs none /sys/kernel/debug
Beaucoup de ces scripts utilisent awk et essaieront d'utiliser mawk ou gawk en fonction du comportement souhaité : mawk pour une sortie tampon (en raison de sa vitesse) et gawk pour une sortie synchrone (comme le fait fflush(), permettant un regroupement plus efficace des fichiers). écrit).
Ce ne sont que des scripts. Soit vous récupérez tout :
git clone --depth 1 https://github.com/brendangregg/perf-tools
Ou utilisez les liens bruts sur github pour télécharger des scripts individuels. Par exemple :
wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop
Cela préserve les onglets (que le copier-coller peut gâcher).
Ftrace a été ajouté pour la première fois à Linux 2.6.27 et perf_events à Linux 2.6.31. Ces premières versions présentaient des bogues de noyau, et des blocages et des paniques ont été signalés sur les noyaux de la série 2.6.32. Cela inclut CentOS 6.x. Si vous devez analyser des noyaux plus anciens, ces outils ne peuvent être utiles que dans un environnement tolérant aux pannes, tel qu'un laboratoire avec des problèmes simulés. Ces outils ont été principalement développés sur les noyaux Linux 3.2 et versions ultérieures.
Selon l'outil, des frais généraux peuvent également être engagés. Voir la section suivante.
perf_events évolue. Le développement de cette collection a commencé vers Linux 3.16, avec les serveurs Linux 3.2 comme cible principale, à une époque où perf_events ne disposait pas de certaines capacités de programmation (par exemple, agrégations personnalisées dans le noyau). Il est possible que ceux-ci soient ajoutés dans une prochaine version du noyau. En attendant, bon nombre de ces outils utilisent des solutions de contournement, des astuces et des hacks pour fonctionner. Certains de ces outils transmettent les données d'événement à l'espace utilisateur pour le post-traitement, ce qui coûte beaucoup plus cher que les agrégations internes au noyau. Les frais généraux de chaque outil sont décrits dans sa page de manuel.
AVERTISSEMENT : Dans des cas extrêmes , votre application cible peut s'exécuter 5 fois plus lentement lors de l'utilisation de ces outils. Selon l'outil et la version du noyau, il peut également y avoir un risque de panique du noyau. Lisez l'en-tête du programme pour connaître les avertissements et testez avant utilisation.
Si les frais généraux posent problème, ces outils peuvent être améliorés. Si un outil ne le fait pas déjà, il pourrait être réécrit en C pour utiliser perf_events_open() et mmap() pour le tampon de trace. Il pourrait également implémenter des décomptes de fréquence en C et fonctionner directement sur mmap(), plutôt que d'utiliser awk/Perl/Python. Des améliorations supplémentaires sont possibles pour les outils basés sur ftrace, telles que l'utilisation d'instantanés et de tampons par instance.
Certains de ces outils sont conçus comme des solutions de contournement à court terme jusqu'à ce que davantage de fonctionnalités du noyau soient disponibles, auquel cas ils peuvent être considérablement réécrits. Les anciennes versions de ces outils seront conservées dans ce référentiel, pour les anciennes versions du noyau.
Comme ma cible principale est une flotte de serveurs Linux 3.2 qui ne disposent pas d'informations de débogage, ces outils essaient de ne pas en avoir besoin. Parfois, cela rend l'outil plus fragile qu'il ne devrait l'être, car j'utilise des solutions de contournement (qui peuvent être spécifiques à la version du noyau et à la plate-forme) au lieu d'utiliser les informations de débogage (qui peuvent être génériques). Consultez la page de manuel pour connaître les conditions préalables détaillées pour chaque outil.
J'ai essayé d'utiliser perf_events ("perf") lorsque cela est possible, puisque cette interface a été développée pour une utilisation multi-utilisateurs. Pour diverses raisons, j'ai souvent dû utiliser ftrace à la place. ftrace est étonnamment puissant (merci Steven Rostedt !), et toutes ses fonctionnalités ne sont pas exposées via perf, ou dans un usage courant. Cette collection d'outils est en quelque sorte une démonstration des fonctionnalités cachées de Linux utilisant ftrace.
Étant donné que les choses changent, il est très possible que certains outils ne fonctionnent pas sur votre version du noyau Linux. Une certaine expertise et un certain assemblage seront nécessaires pour les réparer.
Une étude de cas et un résumé :
Articles connexes :