Performances Linux
(brendangregg.com)- La page Linux Performance de Brendan Gregg est un hub de liens qui réunit au même endroit les ressources d’observabilité, d’analyse, de benchmarking et de tuning nécessaires pour démarrer une investigation sur les performances Linux
- Le parcours d’outils central passe par perf, eBPF, bcc, bpftrace et Flame Graphs, avec un accès direct aux exemples de commandes, aux outils de tracing et à la visualisation
- La documentation s’étend à l’article de Netflix de 2015 sur l’analyse des performances, au tuning d’EC2, aux Linux load averages, aux frame pointers, aux exemples gdb et à deux livres sur les performances
- La liste des conférences propose des parcours d’apprentissage selon le contexte, comme une vue d’ensemble en 40 minutes, un tutoriel outils en 90 minutes, l’analyse des performances des conteneurs ou une checklist SRE
- Pour chaque carte d’outils, il faut vérifier sa fraîcheur via l’année indiquée en bas à droite de l’image, et le diagramme intégré n’est pas aussi complet que les autres diagrammes individuels
Hub de ressources sur les performances et cartes d’outils
- Cette page est un hub de liens qui rassemble les ressources Linux performance créées par Brendan Gregg
- L’image de la carte d’outils à droite a été conçue avec une grande police pour s’adapter aux présentations, et dans un format qui peut aussi être imprimé et affiché sur un mur de bureau
- Les cartes d’outils présentent le travail sur les performances Linux en le répartissant dans les domaines suivants
- Pour savoir à quel point chaque image est à jour, il faut vérifier l’année en bas à droite
- Un diagramme haute résolution combinant l’observabilité, le tuning statique des performances et perf-tools/bcc est également fourni séparément
Principaux outils directement accessibles
- perf : perf one-liners, exemples et ressources de visualisation
- eBPF tools : outils de tracing BPF/bcc et exemples
- perf-tools : ensemble d’outils perf basés sur Ftrace
- bcc : ensemble d’outils de performance BPF/bcc
- bpftrace : ensemble d’outils de performance BPF/bpftrace
- Flame Graphs : guide d’utilisation des Flame Graphs avec perf et d’autres profileurs
Documentation et ressources d’apprentissage
- Linux Performance Analysis in 60,000 Milliseconds est une ressource Netflix de 2015 qui récapitule les 10 premières commandes à utiliser pour démarrer une investigation sur les performances
- Performance Tuning Linux Instances on EC2 inclut les paramètres de tuning EC2 Linux utilisés chez Netflix
- Linux Load Averages: Solving the Mystery traite de la signification du Linux load average et de la raison pour laquelle l’état uninterruptible sleep y est inclus
- The Return of the Frame Pointers explique le rôle des frame pointers, les raisons de leur retour dans les principales distributions Linux et d’autres techniques de stack walking
- gdb Debugging Full Example est un tutoriel gdb incluant l’utilisation d’outils perf/debugging
- Systems Performance: Enterprise and the Cloud, 2nd Edition couvre les méthodologies d’analyse des performances et les outils Linux, dont perf, Ftrace et eBPF
- BPF Performance Tools couvre plus de 100 outils d’analyse des performances eBPF, ainsi qu’un bref résumé des outils traditionnels
- Si Systems Performance 2nd Edition constitue le volume 1, ce livre a le caractère d’un volume 2
- Des ressources distinctes sont également fournies pour créer des Flame Graphs sous Linux avec perf et eBPF
Articles approfondis sur eBPF, ftrace et perf
- Les articles consacrés à eBPF, bcc et bpftrace s’étendent de 2015 à 2023
- Ftrace: The Hidden Light Switch est un article de lwn.net consacré à des cas d’usage de Linux ftrace
- Les articles sur perf-tools basés sur ftrace ont été publiés entre 2014 et 2015, et couvrent notamment iosnoop, opensnoop, execsnoop, tcpretrans, Page Cache Hit Ratio, uprobe et USDT
- Les ressources basées sur perf couvrent perf_events et l’échantillonnage CPU, les static tracepoints, les heat maps, le comptage, le traçage des lignes du noyau, les off-CPU flame graphs, le profiling Linux chez Netflix, les flame graphs Java en mode mixte et perf sched
- Working Set Size Estimation est une ressource consacrée à l’estimation de la working set size sous Linux
- KPTI/KAISER Meltdown Initial Performance Regressions traite des régressions de performance liées à Meltdown en 2018
- CPU Utilization is Wrong aborde le problème croissant des memory stall cycles qui dominent l’indicateur %CPU
- USE Method: Linux Performance Checklist et Off-CPU Analysis Method sont des ressources méthodologiques pour l’analyse des performances Linux
Conférences recommandées selon le contexte
-
Linux Systems Performance, USENIX LISA 2019
-
Linux Performance 2018, PerconaLive 2018
- Résume en keynote de 20 minutes les évolutions et fonctionnalités récentes de Linux performance en 2018
- youtube, slideshare, PDF
-
Linux Performance Tools, Velocity 2015
- Tutoriel de 90 minutes couvrant l’observabilité des performances, le benchmarking, le tuning, le tuning statique des performances, les outils et méthodologies de tracing, ainsi que des démonstrations en direct
- youtube playlist, slideshare, PDF
-
How Netflix Tunes EC2 Instances for Performance, AWS re:Invent 2017
- Met l’accent sur le tuning plutôt que sur l’observabilité des performances, et couvre le contexte de Netflix, les types et fonctionnalités d’instances AWS EC2, les paramètres ajustables du noyau Linux et l’observabilité
- youtube, slideshare
-
Container Performance Analysis, DockerCon 2017
- Explique comment localiser un goulot d’étranglement entre l’hôte et les conteneurs, profiler des applications conteneurisées et descendre plus profondément dans le noyau
- youtube, slideshare
-
Broken Linux Performance Tools, SCaLE14x 2016
- Couvre les problèmes fréquents dans les outils système Linux, les métriques, les statistiques, les visualisations, la surcharge de mesure et les benchmarks, avec des conseils « What You Can Do »
- youtube, slideshare, PDF
-
Using Linux perf at Netflix, Kernel Recipes 2017
- Se concentre sur le profiling CPU et le fonctionnement des Flame Graphs, en incluant les propriétés de perf_events et les problèmes de stack traces et de symbols lors du profiling de Java, Node.js, de VM et de conteneurs
- youtube, slideshare
-
Give me 15 minutes and I'll change your view of Linux tracing, LISA 2016
- Démonstration présentant ftrace, perf et bcc/BPF
- youtube, full talk video, slides
-
Performance analysis superpowers with Linux eBPF, O’Reilly Velocity 2017
- Couvre l’utilisation de l’enhanced BPF, ou eBPF, ajouté à la série Linux 4.x pour l’analyse de performances, l’observabilité et le débogage
- Le front-end est le projet open source bcc, qui fournit des interfaces et un ensemble d’outils BPF
- youtube, slideshare, PDF
-
Linux Performance Analysis: New Tools and Old Secrets, LISA 2014
- Couvre les outils ftrace et perf_events, ainsi que perf-tools, qui utilise principalement ftrace
- Présente ftrace comme un traceur intégré au noyau Linux depuis de nombreuses années, mais resté largement méconnu
- youtube, slideshare, PDF
-
Performance Checklists for SREs, SREcon 2016
- Inclut dans la seconde partie une checklist pour la réponse aux incidents de performance Linux, qui peut aussi être utile pour une analyse urgente des performances Linux
- youtube, usenix, slideshare, PDF
Ressources externes recommandées
- Le RHEL Performance Guide inclut de nombreux outils CLI et paramètres ajustables
- Performance analysis & tuning of Red Hat Enterprise Linux - 2015 Red Hat Summit est une vidéo de 2 heures qui traite en profondeur du tuning des performances Linux et s’applique à la plupart des distributions Linux
- Linux Instrumentation correspond aux diapositives d’une conférence donnée par Ian Munsie en juin 2010, et résume différents traceurs Linux
- Le blog de Julia Evans propose des articles sur de nombreux sujets, dont les outils de performance
- Les articles de Davidlohr Bueso sur les performances Linux font également partie des ressources recommandées
1 commentaires
Avis de Hacker News
J’utilise tuned sur un VPS Debian/Ubuntu qui fait tourner une application temps réel, et ça fonctionne plutôt bien
C’est plus simple que de modifier directement les paramètres du noyau, c’est-à-dire les réglages sysctl ou les tunables du noyau
https://access.redhat.com/documentation/en-us/red_hat_enterp...
sudo apt install tunedJe ne savais pas que Brendan Gregg était désormais chez Intel
https://en.wikipedia.org/wiki/Brendan_Gregg
C’est aussi le protagoniste de la vidéo virale Shouting in the Data Center
https://www.youtube.com/watch?v=tDacjrSCeq4
Un vrai génie
Il vaut la peine de souligner que presque tout ce que couvre l’article original concerne non pas la latence, mais le débit/la bande passante du réseau, du disque, des autres entrées/sorties et du CPU
Pour beaucoup de gens, la performance signifie le débit, donc ça se comprend. Mais il y a aussi des cas où la latence est bien plus importante que le débit, et pour optimiser la latence sous Linux, il faut un autre ensemble d’outils
Un autre axe que les gens peuvent optimiser est la performance par watt, mais je ne vais pas m’étendre là-dessus ici
Il arrive aussi que l’optimisation du débit soit en même temps une optimisation de la latence. Par exemple, si l’on peut placer davantage de processus sur une même machine, la distance moyenne entre les processus et leurs interlocuteurs diminue, et la latence moyenne aussi
Une évidence quand on optimise la latence est d’augmenter suffisamment le débit pour qu’il ne soit pas le goulot d’étranglement
Quand on optimise agressivement la latence, j’ai l’impression qu’il n’y a pas tant de tuning Linux que ça. Je peux me tromper, mais il semble que l’essentiel concerne l’affinité des cœurs, l’exécution tickless, le réseau en espace utilisateur, ainsi que les réglages côté matériel comme la taille des pages, le SMT, l’économie d’énergie et le choix du matériel
[1] https://pdfs.semanticscholar.org/bce7/5f78d340cac32dccd8631f...
Parfois on peut améliorer les deux, mais en général c’est un compromis
Attendre est aussi une bonne stratégie
Depuis Linux 6.5, le scheduler comprend que, lorsqu’un “cœur” SMT est occupé, placer quelque chose sur un autre “cœur” n’est pas forcément optimal. En pratique, cela ressemble davantage à un seul cœur avec un coût de changement de contexte très faible
Grâce à cela, les tâches très parallèles sont devenues sensiblement plus réactives, et cela se voit aussi sur les graphiques d’utilisation CPU
Les résultats peuvent varier à cause de la cohérence de cache et des problèmes NUMA
Articles liés :
Linux Performance - https://news.ycombinator.com/item?id=13498485 - janvier 2017, 64 commentaires
Linux Performance - https://news.ycombinator.com/item?id=8205057 - août 2014, 22 commentaires
Si quelqu’un veut modifier un paramètre tunable sans pouvoir expliquer pourquoi ce changement produirait l’effet souhaité, ni pourquoi il est réglé à cette valeur au départ, je ne le laisserais pas le faire en production
On pourrait appeler ça le “paramètre tunable de Chesterton”
Quand on pense au travail de Brendan sur eBPF, ce document se lit comme une façon de surveiller et d’évaluer plus facilement diverses situations de performance
Les ajustements et le tuning impliquent des compromis, et en général optimiser une chose se fait souvent au détriment d’une autre
À côté de ça, btop m’a été très utile comme visualiseur TUI tout-en-un des performances et de la charge système, en remplacement de glances. Je me demande à quel point les développeurs l’utilisent, et s’il existe une motivation pour créer de meilleurs outils de monitoring en TUI
Quand je me connecte à un serveur, la première chose que je fais est de lancer tmux et d’affecter une fenêtre à btop
Pour moi, le “tuning” des performances Linux revient à désactiver les mesures d’atténuation Spectre/Meltdown
Dans ce cas, les nœuds de calcul tournent dans un VPC sans accès à Internet, donc le risque semble assez faible
Il semble que ce crash précis ait été corrigé, mais je ne le recommanderais toujours pas. Les CPU récents d’AMD et d’Intel sont conçus pour fonctionner au moins avec les atténuations de base activées
Mis en favori. Ça devrait bientôt être utile pour ce sur quoi je travaille
Je n’ai pas encore lu toutes les diapositives, mais je me demande si certains ont déjà constaté des gains de performance significatifs grâce aux options de build du noyau
À l’époque où j’utilisais Gentoo et que je bricolais les flags de build, je modifiais le Makefile du noyau pour utiliser
-O3et j’appliquais un patch-march=native. Avec le recul, d’après les benchmarks Phoronix, cela semble plutôt nuisible sur plusieurs workloads ; je me demande si quelqu’un a déjà vu des contre-exemplesC’est un bon site. Il a tendance à vouloir résumer les performances Linux, que ce soit pour le tuning ou la supervision, ce qui fait prendre une grande inspiration
Le sujet est profond, et les outils d’observation sont très nombreux. Il faut au minimum connaître en profondeur uptime, dmesg et iostat. Ces outils permettent de parcourir plusieurs aspects du système — charge, mémoire, CPU, etc. — et donnent les premiers indices pour diagnostiquer son état. C’est la page 1 sur 100 de ma checklist « jetons-y un œil »
En matière de méthodologie d’analyse des performances, on recommande des benchmarks soigneux afin d’évaluer globalement le comportement du système et les caractéristiques du workload. Il faut comparer les scénarios avant/après, commencer par de petits changements, puis fusionner progressivement ceux qui semblent apporter un bénéfice. Un environnement de labo et un environnement de production ne se comportent jamais exactement de la même manière
C’est à partir de là que ça devient délicat. Le profilage CPU avec des outils comme
perfet des visualisations comme les flame graphs permet une analyse ciblée de l’activité CPU, et l’ajout du suivi des événements matériels permet d’optimiser l’efficacité du calcul. Il faut aller au-delà du « c’est un problème applicatif, tout allait bien avant la dernière release de l’équipe de dev »En tant qu’administrateur, quand on discute avec des développeurs, on finit par avoir besoin d’outils comme ftrace et BPF sous Linux. Ils permettent de tracer en détail l’exécution des fonctions du noyau et les appels système, ce qui est important pour résoudre les problèmes et optimiser les performances. À l’inverse, si l’on est développeur, il peut falloir vérifier l’intuition de l’administrateur. Comme on dit : faire confiance, mais vérifier
Si c’est votre propre code, il faut connaître BPF. BPF permet non seulement un traçage efficace à l’intérieur du noyau, mais favorise aussi le développement d’outils de profilage avancés et personnalisés via bcc et bpftrace, donnant une vision plus profonde des performances du système
Enfin, c’est vraiment difficile. Le tuning consiste à ajuster de nombreux composants système et paramètres du noyau, du CPU et de la mémoire jusqu’à la configuration réseau, afin d’optimiser les performances et la fiabilité pour divers workloads. Sinon, on peut toujours accuser le réseau
En pratique, il faut surtout une bonne approche de la gestion des changements. Courir après le code ou les paramètres du noyau peut submerger tout le monde, et lorsque le temps presse, la pression augmente encore le risque d’erreur humaine