Table des matières

Introduction

Conditions préalables

Exigences

Composants utilisés

Informations générales

Dépannage de l'utilisation des performances pour les problèmes NSO

Installer les performances

Échantillonnage des données

Génération d'un graphique flamme

Parcourir le graphique de flamme

Informations connexes

Introduction

Ce document décrit comment utiliser l'outil de performances sur les hôtes NSO pour étudier les problèmes de performances.

Conditions préalables

Exigences

Cisco vous recommande de prendre connaissance des rubriques suivantes :

- Utilisation de base de la ligne de commande Linux/Unix

- Architecture et fonctionnement du système NSO (Network Services Orchestrator)

- Concepts de profilage et d'analyse du CPU

- Familiarité avec les workflows de dépannage des performances

Composants utilisés

Les informations contenues dans ce document sont basées sur les versions de matériel et de logiciel suivantes :

- Système NSO ou installation locale sur un hôte Unix/Linux pris en charge

- Les distributions Linux telles que Ubuntu, Debian, Fedora ou les dérivés RedHat

- outil perf (outil d'analyse des performances Linux)

Les informations contenues dans ce document ont été créées à partir des périphériques dans un environnement de laboratoire spécifique. All of the devices used in this document started with a cleared (default) configuration. Si votre réseau est en ligne, assurez-vous de bien comprendre l’incidence possible des commandes.

Informations générales

Perf est un puissant outil d'analyse des performances sous Linux, utilisé principalement pour le profilage du CPU. Il fournit des informations sur les tâches actuelles du processeur en capturant et en analysant la charge des fonctions de niveau inférieur. Cela permet d'identifier les fonctions ou les processus qui occupent le processeur et est essentiel pour identifier les goulots d'étranglement au niveau des performances.

Perf peut également générer des graphiques de flamme, qui sont des graphiques spéciaux qui représentent visuellement quelles parties d'un programme utilisent le plus de temps CPU. Les graphes à flamme facilitent le repérage des zones du code qui doivent être optimisées.

Il est important de noter que les performances sont également incluses dans la liste de contrôle de collecte de données principale pour les cas de mémoire insuffisante (OOM), comme recommandé par la division NSO. Pour obtenir des conseils plus détaillés sur le dépannage OOM, contactez le TAC Cisco.

Dépannage de l'utilisation des performances pour les problèmes NSO

Cette section fournit un workflow complet pour l'installation, l'utilisation et l'analyse des données de l'outil de performances sur les hôtes NSO afin de résoudre les problèmes de performances.

Installer les performances

Étape 1 : Installez les performances sur votre distribution Linux. Utilisez la commande appropriée pour votre système d'exploitation :

Pour Ubuntu :

apt-get update && apt-get -y install linux-tools-generic

Pour Debian :

apt-get update && apt-get -y install linux-perf

Pour les dérivés Fedora/RedHat :

dnf install -y perf

Pour plus d'informations sur les mises en garde connues lors de l'installation des performances, contactez l'équipe Cisco TAC.

Échantillonnage des données

Étape 1 : Identifier le principal processus des ONS.

Utilisez la commande ci-dessous pour localiser le processus NSO (ncs.smp) :

ps -ef | grep ncs\.smp

Exemple de rapport :

root    120829       1  16 13:23 ? 00:11:08 /opt/ncs/current/lib/ncs/erts/bin/ncs.smp -K true -P 277140 -- -root /opt/ncs/current/lib/ncs -progname ncs -- -home / -- -cd /var/opt/ncs -pa /opt/ncs/current/lib/ncs/patches -boot ncs -ncs true -delayed-detach -noshell -noinput -yaws embedded true -kernel gethost_poolsize 16 -stacktrace_depth 24 -shutdown_time 30000 -ssl_dist_optfile /var/opt/ncs/state/ssl_dist_optfile -delayed-heart -conffile /etc/ncs/ncs.conf -max_fds 65535 -- -detached-fd 4

root    121424   120604  0 14:30 pts/0 00:00:00 grep --color=auto ncs.smp

Étape 2 : Vous pouvez également utiliser le PID du processus Java principal lié à NSO, en particulier si vous vous concentrez sur les opérations Java. Exécutez la commande :

ps -ef | grep NcsJVMLauncher

Exemple de rapport :

root    120903   120833  6 13:32 ? 00:03:40 java -classpath :/opt/ncs/current/java/jar/* -Dhost=127.0.0.1 -Dport=4569 -Djvm.restart.enabled=false -Djvm.restart.errCount=3 -Djvm.restart.duration=60 -Djava.security.egd=file:/dev/./urandom -Dfile.encoding=UTF-8 -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=OFF com.tailf.ncs.NcsJVMLauncher

root    121435   120604  0 14:33 pts/0 00:00:00 grep --color=auto NcsJVMLauncher

Étape 3 : Exécutez le cas de test ou le cas d'utilisation problématique pour valider le scénario de performances.

Étape 4 : Dans une autre fenêtre de terminal, exécutez perf sur les ID de processus (PID) appropriés. Utilisez le format de commande ci-dessous, en remplaçant XX, YY, ZZ par les PID obtenus ci-dessus :

perf record -F 100 -g -p XX,YY,ZZ

Par exemple, pour profiler l'ensemble du système et rassembler des graphiques d'appels à 99 Hz pour des PID spécifiques :

perf record -a -g -F 99 -p 120829,120903

Exemple de rapport :

Warning:

PID/TID switch overriding SYSTEM

Description des options :

- -a : Tous les processeurs ; Collecte à l'échelle du système à partir de tous les processeurs (valeur par défaut si aucune cible n'est spécifiée).

- -g : Capturer des graphiques d'appels (suivis de pile). Identifie l'endroit où les fonctions sont appelées.

- -F : Fréquence d'échantillonnage en Hz. Les fréquences plus élevées augmentent la précision, mais ajoutent une surcharge.

- -p : Spécifie le ou les ID de processus.

Étape 5 : Lorsque vous avez terminé de collecter des échantillons, arrêtez les performances avec Ctrl+C :

^C

[ perf record: Woken up 1 times to write data ]

[ perf record: Captured and wrote 0.646 MB perf.data (4365 samples) ]

Vous voyez maintenant un fichier perf.data dans le répertoire courant.

Étape 6 : Générez un rapport récapitulatif à l'aide de la commande suivante :

perf report -n --stdio > perf_report.txt

Description des options :

- -n : Afficher les symboles sans regroupement (vue plate).

- —stdio : Forcer la sortie vers la sortie standard (le terminal).

À ce stade, vous devez enregistrer les deux fichiers (perf.data et perf_report.txt) et les partager avec votre contact de support avant de passer à une analyse plus approfondie.

Si la capture a réussi, perf_report.txt affiche une structure arborescente représentant un graphique d'appels hiérarchique. Les pourcentages vous aident à identifier les points chauds où le temps processeur est le plus utilisé.

Exemple d'extrait :

# Children      Self       Samples  Command          Shared Object         Symbol

# ........  ........  ............  ...............  ....................  ...................................................................

#    30.61%     0.00%             0  C2 CompilerThre  libc.so.6             [.] start_thread

#            ---start_thread

#               thread_native_entry(Thread*)

#               Thread::call_run()

#               JavaThread::thread_main_inner()

#               CompileBroker::compiler_thread_loop()

#                          --30.58%--CompileBroker::invoke_compiler_on_method(CompileTask*)

#                                     --30.47%--C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)

#                                     Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)

#                                               |--17.57%--Compile::Code_Gen()

#                                               |          |--12.46%--PhaseChaitin::Register_Allocate()

#                                               |          |          |--2.79%--PhaseChaitin::build_ifg_physical(ResourceArea*)

#                                               |          |          |           --1.05%--PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]

#                                               |          |--1.49%--PhaseChaitin::Split(unsigned int, ResourceArea*)

#                                               |          |--1.26%--PhaseChaitin::post_allocate_copy_removal()

Interprétation :

- Processus/Thread : Le thread C2 CompilerThree est en cours d'analyse.

- Utilisation totale du processeur : Ce thread est responsable de 30,61 % du temps processeur.

- Flux de fonctions : Le thread commence par start_thread et les délégués travaillent sur plusieurs couches. La majeure partie du temps CPU (30,47%) est passé dans C2Compiler::compile_method, indiquant un hotspot potentiel.

Génération d'un graphique flamme

Étape 1 : Générez un échantillon de performances à partir de tous les processeurs et processus pendant un intervalle défini (par exemple, 60 secondes) :

perf record -a -g -F 99 sleep 60

Exemple de rapport :

[ perf record: Woken up 32 times to write data ]

[ perf record: Captured and wrote 10.417 MB perf.data (67204 samples) ]

Étape 2 : Copiez ou transférez ce fichier perf.data vers un hôte à partir duquel vous pouvez télécharger le référentiel de modèles flamegraph.

Étape 3 : Convertissez le fichier perf.data au format texte :

perf script > data.perf

Étape 4 : Clonez le référentiel FlameGraph GitHub et placez data.perf dans ce répertoire :

cp data.perf $PWD/FlameGraph/.

Étape 5 : Réduire les traces de la pile pour le traitement du flamegraph :

cat data.perf | ./stackcollapse-perf.pl > data.perf-folded

Étape 6 : Générez le fichier SVG du graphique de flamme :

./flamegraph.pl data.perf-folded > data.svg

Remarque : Si vous rencontrez l'erreur « can not locate open.pm in @INC » sur CentOS ou RHEL, installez le module Perl requis :

yum install perl-open.noarch

Étape 7 : Ouvrez le fichier data.svg dans votre navigateur Web préféré pour visualiser le graphique de flamme.

Parcourir le graphique de flamme

Une fois que le fichier graphique de flamme est ouvert dans votre navigateur, vous pouvez interagir avec lui en cliquant sur n'importe quelle zone pour zoomer sur cette fonction et sa pile d'appels. La longueur de chaque case représente le temps processeur passé dans cette fonction et sa pile d'appels. Cette visualisation facilite l'identification des zones sensibles et des zones à optimiser.

Zoomé dans ncs.smp :

Informations connexes

- Avertissements connus relatifs aux performances Linux

- Assistance technique de Cisco et téléchargements