Commande Linux perf

Linux 命令大全Référence des commandes Linux


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 performance
  • record: Enregistrer les données de performance
  • report: Analyser les données enregistrées
  • top: Surveillance des performances en temps réel
  • list: Lister les événements disponibles
  • annotate: 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

# Compter l'exécution de la commande ls
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

# Enregistrer l'exécution de la commande ls
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

# Analyser le fichier perf.data par défaut
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

# Surveiller les performances du système en temps réel
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

# Lister tous les événements
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

# Enregistrer l'exécution du programme
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

# Première exécution
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

# Lister les tracepoints d'appels système disponibles
perf list 'syscalls:*'

# Tracer l'appel système open
perf stat -e 'syscalls:sys_enter_open' -a sleep 10

Conseils d'utilisation de perf

  1. 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)

  2. 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

  3. Génération de graphiques de flammes: Combinez avec l'outil FlameGraph pour générer des graphiques intuitifs d'analyse de performances

  4. Analyse multicœur: Utilisez l'option -a pour surveiller tous les CPU, ou utilisez -C pour spécifier des CPU spécifiques

  5. Séparation espace utilisateur/noyau: Utilisez les options -k et -u pour analyser respectivement l'espace noyau et l'espace utilisateur


Dépannage

  1. Problèmes de permissions:

    echo -1 > /proc/sys/kernel/perf_event_paranoid

    ou exécutez perf avec sudo

  2. Informations de symboles manquantes:

    • Assurez-vous que le programme est compilé avec l'option -g
    • Installer les paquets de symboles de débogage
  3. 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
  4. 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

  1. Documentation officielle: Le répertoire tools/perf/Documentation dans le code source du noyau Linux

  2. Recommandations de livres:

    • 《Systems Performance: Enterprise and the Cloud》
    • "Systems Performance : Enterprise et le Cloud"
  3. Ressources en ligne:

    • Blog et ensemble d'outils de Brendan Gregg
    • Ensemble d'outils perf-tools
  4. 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.


Linux 命令大全Référence des commandes Linux

Autres extensions