Profiler les applications distribuées avec Linux perf : Guide pratique
Optimiser une application mature peut ressembler à chercher une aiguille dans une botte de foin. La meilleure façon d'identifier les véritables goulots d'étranglement de performance est de laisser les données, et non l'intuition, guider vos décisions. En pratique, le code le plus consommateur de temps est souvent le moins évident.
Quand je suspecte qu'un morceau de code est lent, je vérifie d'abord les preuves avant de le modifier.
Le profilage transforme cette intuition en faits mesurables. Bien qu'il existe des douzaines de profileurs sur le marché, choisir le bon outil pour un système multi-threadé ou distribué peut être un défi. Les profileurs traditionnels à comptage d'instructions comme Callgrind peuvent fausser les temps, surtout sous forte contention de mutex, car ils mesurent les instructions plutôt que le temps réel.
Les profileurs statistiques, en revanche, échantillonnent le programme en cours d'exécution à faible surcoût, les rendant idéaux pour les charges de travail complexes et concurrentes. perf de Linux est un exemple premier de cette approche.
Ci-dessous, un flux de travail étape par étape démontrant comment utiliser perf avec FlameGraph de Brendan Gregg pour identifier les points chauds dans une application distribuée. L'exemple cible l'échantillon c/hello_dynamic de RTI Connext 5.3.0.
1. Installer perf
Sur Ubuntu, exécutez :
sudo apt-get install linux-tools-common linux-tools-3.13.0-107-generic
2. Cloner FlameGraph
Clonez le dépôt à un emplacement pratique (ex. votre répertoire personnel) :
git clone https://github.com/brendangregg/FlameGraph
3. Compiler l'exemple
Naviguez vers rti_workspace/examples/c et compilez avec symboles de débogage :
export DEBUG=1 make -f makefile_Hello_x64Linux3gcc4.8.2
Remplacez le nom du makefile par celui correspondant à votre plateforme si nécessaire.
4. Exécuter l'éditeur pendant le profilage
Démarrez un abonné en arrière-plan, puis lancez perf :
objs/x64Linux3gcc4.8.2/Hello sub & sudo perf record -g objs/x64Linux3gcc4.8.2/Hello pub
Après une courte période de test, appuyez sur Ctrl+C pour arrêter l'éditeur. Perf générera perf.out.
5. Convertir les données pour FlameGraph
Traduisez la sortie perf en fichier de pile pliée :
perf script -f | ~/FlameGraph/stackcollapse-perf.pl > out.perf-folded
Puis générez le graphique de flamme visuel :
~/FlameGraph/flamegraph.pl out.perf-folded > perf.svg
6. Inspecter les résultats
Ouvrez perf.svg dans un navigateur web. L'axe horizontal montre le temps passé dans chaque fonction, tandis que les barres empilées révèlent la pile d'appels. Cliquer sur une barre zoome sur cette pile. Exécuter l'éditeur sans abonné supprimera la partie droite du graphique, confirmant que DDS n'émet des données que lorsque des abonnés existent.
Perf offre de nombreuses autres options – ajuster la fréquence d'échantillonnage, exclure le code noyau, ou se concentrer sur des CPUs spécifiques. Si vous avez des astuces ou avez découvert des outils complémentaires qui simplifient le profilage, partagez-les dans les commentaires.
Bon profilage !
Technologie de l'Internet des objets
- Le molybdène peut-il se combiner avec d'autres éléments ? Avis d'expert sur l'alliage et l'utilisation haute température
- Construire des Applications Hybrides Blockchain-Cloud avec Ethereum & Google Cloud
- Construire des Apps Mobiles Serverless Scalables avec React Native & AWS
- Capteur de proximité inductif : conception de circuit, fonctionnement et applications pratiques
- Microchip lance des MCUs basés Arm pour missions spatiales évolutives : du COTS au radiodurci
- Éliminer les goulots d'étranglement IT avec les plateformes low-code : simplifier la transformation numérique
- Ovo Energy Renforce sa Stratégie Énergie Distribuée avec l'Acquisition VCharge Smart Grid
- Routeur CNC bois : Polyvalence et précision pour meubles haut de gamme et plus
- L'IA en médecine : 5 applications concrètes éprouvées avec exemples pratiques