Commande Linux perf
perf est un ensemble d'outils d'analyse des performances du système Linux, dont le nom complet est Performance Event Counters. Il est basé sur le sous-système perf_events du noyau Linux et peut fournir des capacités d'analyse des performances à la fois au niveau matériel et logiciel.
Les principales fonctions de perf incluent :
- Analyse des performances du CPU
- Traçage des appels de fonction
- Statistiques des événements matériels
- Surveillance des événements logiciels
- Traçage des appels système
Syntaxe de base de perf
Le format de syntaxe de base de la commande perf est :
perf [--version] [--help] COMMAND [ARGS]
Les sous-commandes courantes incluent :
stat: Statistiques des compteurs de performancerecord: Enregistrer les données de performancereport: Analyser les données enregistréestop: Surveillance des performances en temps réellist: Lister les événements disponiblesannotate: Analyse au niveau du code source
Explication détaillée des sous-commandes perf courantes
perf stat
Compter divers événements matériels et logiciels pendant l'exécution de la commande.
perf stat [options] command [command-options]
Options courantes :
-e: Spécifier l'événement à surveiller-p: Surveiller l'ID de processus spécifié-a: Surveiller tous les processeurs-r: Répéter l'exécution et afficher la moyenne-d: Afficher des événements plus détaillés
Exemple :
Exemple
perf stat ls
# Surveiller un processus spécifié
perf stat -p 1234
# Surveiller des événements spécifiques
perf stat -e cycles,instructions,cache-misses ls
perf record
Enregistrer les données de performance dans un fichier (par défaut : perf.data).
perf record [options] command [command-options]
Options courantes :
-g: Enregistrer le graphe d'appels-F: Fréquence d'échantillonnage (Hz)-p: Enregistrer pour un processus spécifié-o: Spécifier le fichier de sortie-e: Spécifier les événements à enregistrer
Exemple :
Exemple
perf record ls
# Enregistrer le processus 1234 à une fréquence de 99Hz
perf record -F 99 -p 1234 -g
perf report
Analyser les données enregistrées par perf record.
perf report [options]
Options courantes :
-i: Spécifier le fichier d'entrée-n: Afficher le nombre d'échantillons--stdio: Sortie en mode texte-g: Afficher le graphe d'appels-s: Trier par le champ spécifié
Exemple :
Exemple
perf report
# Analyser le fichier spécifié et produire une sortie en mode texte
perf report -i perf.data.old --stdio
perf top
Afficher en temps réel les fonctions les plus consommatrices de ressources du système.
perf top [options]
Options courantes :
-e: Spécifier l’événement à surveiller-p: Surveiller un processus spécifié-K: Masquer les symboles du noyau-U: Masquer les symboles de l’espace utilisateur-g: Afficher le graphe d'appels
Exemple :
Exemple
perf top
# Surveiller un événement spécifique
perf top -e cache-misses
perf list
Lister tous les événements surveillables.
perf list [hw|sw|cache|tracepoint|pmu|event_glob]
Exemple :
Exemple
perf list
# Lister les événements de cache matériels
perf list cache
Types d'événements perf
perf peut surveiller plusieurs types d'événements :
| Type d'événement | Description | Exemple |
|---|---|---|
| Matériel | Événements matériels du CPU | cycles, instructions |
| Logiciel | Événements logiciels du noyau | context-switches, page-faults |
| Cache | Événements liés au cache | cache-references, cache-misses |
| Points de trace | Points de trace statiques du noyau | syscalls, block, sched |
| PMU | Événements spécifiques au processeur | (spécifiques au fournisseur) |
| Points d'arrêt | Événements de point d'arrêt | mem:[:access] |
Exemples d'application pratique de perf
1. Analyser les goulots d'étranglement des performances d'un programme
Exemple
perf record -g ./my_program
# Analyser les résultats
perf report -g
2. Trouver les fonctions de point chaud du CPU
perf top -p $(pidof my_program)
3. Comparer les différences de performances entre deux exécutions
Exemple
perf record -o perf.data.1 ./my_program input1
# Deuxième exécution
perf record -o perf.data.2 ./my_program input2
# Comparer les différences
perf diff perf.data.1 perf.data.2
4. Analyser les appels système
Exemple
perf list 'syscalls:*'
# Tracer l'appel système open
perf stat -e 'syscalls:sys_enter_open' -a sleep 10
Conseils d'utilisation de perf
-
Réduire la surcharge: Pour une analyse de performances de longue durée, réduisez de manière appropriée la fréquence d'échantillonnage (par ex. -F 99)
-
Résolution des symboles: Assurez-vous que les symboles de débogage sont disponibles ; vous pouvez installer des paquets de débogage ou compiler le programme avec -g
-
Génération de graphiques de flammes: Combinez avec l'outil FlameGraph pour générer des graphiques intuitifs d'analyse de performances
-
Analyse multicœur: Utilisez l'option -a pour surveiller tous les CPU, ou utilisez -C pour spécifier des CPU spécifiques
-
Séparation espace utilisateur/noyau: Utilisez les options -k et -u pour analyser respectivement l'espace noyau et l'espace utilisateur
Dépannage
-
Problèmes de permissions:
echo -1 > /proc/sys/kernel/perf_event_paranoid
ou exécutez perf avec sudo
-
Informations de symboles manquantes:
- Assurez-vous que le programme est compilé avec l'option -g
- Installer les paquets de symboles de débogage
-
Données d'échantillonnage trop volumineuses:
- Réduire la fréquence d'échantillonnage
- Raccourcir la durée d'échantillonnage
- Utiliser --no-call-graph pour réduire les informations du graphe d'appels
-
Impossible d'analyser des langages de haut niveau tels que Java/Python:
- Nécessite la prise en charge d'outils perf spécifiques au langage
- Envisager d'utiliser des outils d'analyse spécifiques au langage
Ressources d'apprentissage avancées
-
Documentation officielle: Le répertoire tools/perf/Documentation dans le code source du noyau Linux
-
Recommandations de livres:
- 《Systems Performance: Enterprise and the Cloud》
- "Systems Performance : Enterprise et le Cloud"
-
Ressources en ligne:
- Blog et ensemble d'outils de Brendan Gregg
- Ensemble d'outils perf-tools
-
Outils associés:
- FlameGraph : Visualiser les données de performance
- bpftrace : traçage dynamique plus flexible
En maîtrisant la commande perf, vous pouvez analyser en profondeur les caractéristiques de performance des systèmes Linux, localiser rapidement les goulots d'étranglement de performance et optimiser les applications et les configurations système.
Autres extensions
Référence des commandes Linux