{"id":20626,"date":"2026-08-14T08:35:54","date_gmt":"2026-08-14T06:35:54","guid":{"rendered":"https:\/\/webhosting.de\/perf-top-linux-hotspots-kernel-tools\/"},"modified":"2026-08-14T08:35:54","modified_gmt":"2026-08-14T06:35:54","slug":"perf-top-linux-points-dacces-outils-du-noyau","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/perf-top-linux-hotspots-kernel-tools\/","title":{"rendered":"perf top Linux : d\u00e9tecter les points chauds du processeur dans le noyau"},"content":{"rendered":"<p>Avec <strong>perf top<\/strong> Sous Linux, je peux identifier en quelques secondes les fonctions du noyau qui monopolisent actuellement le plus de temps CPU et o\u00f9 se situent les goulots d'\u00e9tranglement. Dans ce guide, je vous montre, \u00e9tape par \u00e9tape, comment rep\u00e9rer les points chauds en temps r\u00e9el, interpr\u00e9ter correctement les r\u00e9sultats et en tirer rapidement des optimisations pour le planificateur, le r\u00e9seau et la m\u00e9moire.<\/p>\n\n<h2>Points centraux<\/h2>\n\n<p>Je trouve que la vue en direct de <strong>parfait<\/strong> C'est id\u00e9al pour bien d\u00e9marrer, car cela met imm\u00e9diatement en \u00e9vidence les \u00e9l\u00e9ments qui prennent le plus de temps. Les pourcentages indiqu\u00e9s pour chaque symbole me permettent de savoir si le goulot d'\u00e9tranglement se situe dans le <strong>Noyau<\/strong> ou s'il se situe dans l'espace utilisateur. \u00c0 partir de sch\u00e9mas r\u00e9currents, je d\u00e9termine si ce sont les verrous, les IRQ, le r\u00e9seau ou la m\u00e9moire qui pr\u00e9dominent. Ensuite, je cern\u00e9 le point critique \u00e0 l'aide d'outils plus pointus et je v\u00e9rifie les modifications directement en condition de charge. C'est ainsi que j'am\u00e9liore, \u00e9tape par \u00e9tape, la <strong>CPU<\/strong>- optimiser l'utilisation des ressources et r\u00e9duire durablement les latences.<\/p>\n<ul>\n  <li><strong>Points d'acc\u00e8s en direct<\/strong> identifier et hi\u00e9rarchiser<\/li>\n  <li><strong>pourcentages<\/strong> interpr\u00e9ter correctement chaque fonction<\/li>\n  <li><strong>Objectif principal<\/strong> d\u00e9finir : IRQ, verrous, m\u00e9moire<\/li>\n  <li><strong>Flux de travail<\/strong>: haut \u2192 enregistrement \u2192 rapport<\/li>\n  <li><strong>Optimisations<\/strong> v\u00e9rifier de mani\u00e8re cibl\u00e9e<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/cpu-hotspots-linux-kernel-4872.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Qu'est-ce que \u00ab perf top \u00bb et \u00e0 quoi \u00e7a sert ?<\/h2>\n\n<p>J'utilise <strong>perf top<\/strong>, afin de voir imm\u00e9diatement, pendant l'ex\u00e9cution d'une charge, quelles fonctions consomment le plus de temps CPU. L'outil acc\u00e8de aux compteurs de performances mat\u00e9riels et m'affiche \u00e0 intervalles r\u00e9guliers un classement actualis\u00e9 des fonctions les plus gourmandes en ressources. Selon Linux-Magazin, perf ma\u00eetrise aussi bien le profilage que le tra\u00e7age, ce qui <strong>Vue en direct<\/strong> s'int\u00e8gre parfaitement \u00e0 des analyses plus approfondies. Dans le cadre d'une proc\u00e9dure classique, je compl\u00e8te cet instantan\u00e9 avec \u00ab perf record \u00bb et \u00ab perf report \u00bb afin d'examiner les graphes d'appels et les chemins d'acc\u00e8s pr\u00e9cis. C'est ainsi que je r\u00e9ponds \u00e0 la question centrale : o\u00f9 passe le <strong>CPU<\/strong> justement \u00e0 ce moment-l\u00e0 \u2013 dans la pile r\u00e9seau, dans le sous-syst\u00e8me de m\u00e9moire, dans le planificateur ou dans un pilote ?<\/p>\n\n<h2>Installer et lancer perf top<\/h2>\n\n<p>Une fois l'installation effectu\u00e9e \u00e0 l'aide du paquet de distribution, je lance <strong>parfait<\/strong> En r\u00e8gle g\u00e9n\u00e9rale, \u201e top \u201c n\u00e9cessite des droits \u00e9tendus pour afficher les symboles du noyau et les \u00e9v\u00e9nements syst\u00e8me. Il suffit de lancer simplement \u00ab perf top \u00bb pour obtenir un premier aper\u00e7u en temps r\u00e9el et identifier les fonctions dominantes. Si je souhaite me concentrer sur des processus sp\u00e9cifiques, j'ajoute le <strong>PID<\/strong> avec l'option -p ; pour certains processeurs sp\u00e9cifiques, j'utilise l'option -C avec une liste ou une plage. Je d\u00e9finis les \u00e9v\u00e9nements avec l'option -e, par exemple \u00ab cpu-cycles \u00bb, \u00ab instructions \u00bb ou \u00ab branch-misses \u00bb, selon la question que je souhaite \u00e9lucider. Pour obtenir des r\u00e9sultats reproductibles, je lance la mesure pendant une charge r\u00e9elle, afin que <strong>Points chauds<\/strong> \u00eatre clairement perceptibles et ne pas se perdre dans le bruit de fond.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/cpuhotspotslinux3746.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Voici comment je lis correctement ce num\u00e9ro<\/h2>\n\n<p>Dans cette liste, j'\u00e9value d'abord la <strong>pourcentages<\/strong> par symbole, car ils refl\u00e8tent les proportions de temps relatives. Des proportions \u00e9lev\u00e9es au niveau des fonctions syst\u00e8me indiquent un goulot d\u2019\u00e9tranglement dans le noyau, tandis que des symboles dominants dans l\u2019espace utilisateur renvoient plut\u00f4t \u00e0 la logique de l\u2019application. Si je constate de nombreuses routines de planification, j\u2019en d\u00e9duis qu\u2019il y a trop de threads actifs, des affinit\u00e9s inappropri\u00e9es ou des priorit\u00e9s inadapt\u00e9es. Si des fonctions de m\u00e9moire apparaissent en t\u00eate, je v\u00e9rifie les mod\u00e8les d\u2019allocation, les erreurs de page, la localit\u00e9 NUMA et les caches. Pour les chemins r\u00e9seau, j\u2019examine la r\u00e9partition des IRQ, les param\u00e8tres Gro\/TSO et le comportement des pilotes, car ces d\u00e9tails permettent de <strong>Latence<\/strong> influencer fortement.<\/p>\n\n<h2>Causes typiques des points chauds du noyau<\/h2>\n\n<p>De nombreux points noirs apparaissent parce que de nombreuses petites d\u00e9penses finissent par repr\u00e9senter une somme importante <strong>Dernier<\/strong> s'additionnent. Souvent, les changements de contexte excessifs, la concurrence sur les verrous et une r\u00e9partition in\u00e9gale des IRQ augmentent le temps CPU. De m\u00eame, les structures de m\u00e9moire fragment\u00e9es, une utilisation inefficace des slabs ou une pagination constante entra\u00eenent des cycles inutiles. Si un pilote particulier attire mon attention, je le mets en corr\u00e9lation avec la charge de travail, le mat\u00e9riel et la version afin de limiter les effets secondaires. Sur les syst\u00e8mes multic\u0153urs, je v\u00e9rifie \u00e9galement le \u00ab false sharing \u00bb, car, selon la documentation du noyau, les lignes de cache partag\u00e9es peuvent rapidement entra\u00eener une <strong>Overhead<\/strong> peuvent causer des soucis.<\/p>\n\n<h2>Analyse exemplaire d'un point chaud<\/h2>\n\n<p>Si je constate des proportions \u00e9lev\u00e9es et constantes de trafic li\u00e9 au r\u00e9seau sur une longue p\u00e9riode, je commence par distinguer les types de charge : petits paquets vs gros paquets, TLS vs texte clair, nombreuses connexions vs quelques sessions de longue dur\u00e9e, afin de d\u00e9terminer la <strong>Cause<\/strong> cerner le probl\u00e8me. Ensuite, j'approfondis l'analyse \u00e0 l'aide de `perf record` et `perf report`, j'active les graphes d'appels (-g) et je compare les chemins sur plusieurs ex\u00e9cutions. Si, au contraire, le probl\u00e8me r\u00e9side dans la gestion de la m\u00e9moire, je v\u00e9rifie l\u2019allocateur, les Huge Pages, les param\u00e8tres THP et l\u2019affinit\u00e9 NUMA, car c\u2019est l\u00e0 que des chemins inutiles peuvent rapidement appara\u00eetre. J\u2019interpr\u00e8te souvent les points chauds du planificateur comme le signe d\u2019un nombre trop \u00e9lev\u00e9 de threads ex\u00e9cutables ou d\u2019une affectation CPU inadapt\u00e9e. Je ne modifie toujours qu\u2019un seul <strong>Param\u00e8tres<\/strong> par cycle, afin de pouvoir attribuer correctement l'effet.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-cpu-hotspots-perf-top-7351.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>perf top dans les environnements d'h\u00e9bergement<\/h2>\n\n<p>Dans les sc\u00e9narios d'h\u00e9bergement, je constate souvent que de faibles co\u00fbts li\u00e9s au noyau ont un impact sur la <strong>Latence<\/strong> de nombreux services. Les conteneurs, machines virtuelles et instances de base de donn\u00e9es fonctionnant en parall\u00e8le font nettement pencher le profil vers le r\u00e9seau, le stockage et le planificateur. Gr\u00e2ce \u00e0 perf top, je peux d\u00e9terminer si les goulots d'\u00e9tranglement se situent plut\u00f4t au niveau de la gestion des IRQ, du traitement des SoftIRQ ou des chemins de verrouillage. J'int\u00e8gre ensuite la version du noyau, la configuration NUMA, les affinit\u00e9s IRQ et les profondeurs de file d'attente dans l'analyse, car ces facteurs interagissent entre eux. Ceux qui souhaitent approfondir le sujet trouveront dans ce guide sur <a href=\"https:\/\/webhosting.de\/fr\/linux-perf-outil-analyse-des-goulots-detranglement-du-processeur-optimisation-charge-du-serveur-profilage\/\">Analyser les goulots d'\u00e9tranglement du processeur<\/a> d'autres pistes pratiques que j'utilise r\u00e9guli\u00e8rement dans mon travail.<\/p>\n\n<h2>Guide pratique d'analyse<\/h2>\n\n<p>Je commence par un sc\u00e9nario de charge reproductible afin que les mesures restent comparables et <strong>Points chauds<\/strong> apparaissent de mani\u00e8re stable. Ensuite, je lance \u00ab perf top \u00bb et je note les symboles dominants sur plusieurs mises \u00e0 jour. \u00c0 l'aide de \u00ab perf record\/report \u00bb, je synth\u00e9tise cet instantan\u00e9 en une vue claire des graphes d'appel, afin d'identifier le chemin menant au point co\u00fbteux. Ensuite, je ne modifie de mani\u00e8re cibl\u00e9e qu\u2019un seul param\u00e8tre, par exemple une affinit\u00e9 d\u2019IRQ ou une profondeur de file d\u2019attente, puis je proc\u00e8de \u00e0 une nouvelle mesure. Ce n\u2019est que lorsque l\u2019effet est clair que je passe \u00e0 l\u2019\u00e9tape suivante <strong>\u00c9tape<\/strong> et je consigne ces informations en vue des prochaines fen\u00eatres de maintenance.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/TechOffice_Nacht_CPUs_3421.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Quand d'autres outils sont-ils indiqu\u00e9s ?<\/h2>\n\n<p>Pour obtenir une vue d'ensemble historique, des graphiques d'appels plus d\u00e9taill\u00e9s ou des cha\u00eenes d'\u00e9v\u00e9nements sp\u00e9cifiques, j'utilise <strong>parfait<\/strong> record\/report, ftrace ou eBPF. Les points de trace m'aident \u00e0 mettre en lumi\u00e8re des chemins de mani\u00e8re cibl\u00e9e, tandis que les programmes BPF me permettent d'obtenir des m\u00e9triques flexibles. Lorsque je souhaite examiner plus en d\u00e9tail les chemins du noyau, <a href=\"https:\/\/webhosting.de\/fr\/ebpf-linux-outils-danalyse-surveillance-des-serveurs-insights\/\">Outils d'analyse eBPF<\/a> des informations pr\u00e9cieuses directement sur le lieu m\u00eame de l'\u00e9v\u00e9nement. Pour les probl\u00e8mes de cache et de partage, perf-c2c et pahole s'av\u00e8rent utiles d\u00e8s lors que le point sensible est clairement identifi\u00e9. Je passe ainsi de l'analyse en temps r\u00e9el \u00e0 l'identification de la cause, sans me perdre dans des \u00e9l\u00e9ments non pertinents <strong>D\u00e9tails<\/strong> de perdre.<\/p>\n\n<h2>Options d'\u00e9chantillonnage et filtres : mise en pratique<\/h2>\n\n<p>Je passe le <strong>\u00c9chantillonnage<\/strong>- Je m'adapte \u00e0 la situation plut\u00f4t que de tout mesurer de mani\u00e8re globale. En cas de pics sporadiques, j'augmente la fr\u00e9quence d'\u00e9chantillonnage et je raccourcis les intervalles d'affichage afin de capturer les pics \u00e9ph\u00e9m\u00e8res. Pour me concentrer sur un processus, je d\u00e9finis -p sur le PID concern\u00e9 ; pour me concentrer sur le CPU, je d\u00e9finis -C sur les c\u0153urs les plus sollicit\u00e9s. Avec -e, je contr\u00f4le l\u2019\u00e9v\u00e9nement, par exemple \u00ab cpu-cycles \u00bb pour un profilage global ou \u00ab cache-misses \u00bb si je soup\u00e7onne un probl\u00e8me de gestion de la m\u00e9moire. J\u2019utilise les graphes d\u2019appels (-g) d\u00e8s que j\u2019ai localis\u00e9 approximativement un point chaud et que le <strong>Cause<\/strong> qu'il souhaite trouver dans la pile.<\/p>\n\n<p>Le tableau suivant pr\u00e9sente des combinaisons pratiques de commutateurs que j'utilise souvent au quotidien, ainsi que les utilisations typiques de chaque option :<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Option<\/th>\n      <th>Effet<\/th>\n      <th>Utilisation<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>-p<\/strong> PID<\/td>\n      <td>Limite la mesure \u00e0 un seul processus<\/td>\n      <td>Sp\u00e9cifiques \u00e0 l'application <strong>Points chauds<\/strong> d\u00e9limiter<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>-C<\/strong> Liste des processeurs<\/td>\n      <td>Priorit\u00e9 \u00e0 certains domaines cl\u00e9s<\/td>\n      <td>V\u00e9rifier la r\u00e9partition NUMA\/IRQ<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>-e<\/strong> \u00e9v\u00e9nement<\/td>\n      <td>S\u00e9lectionne un \u00e9v\u00e9nement mat\u00e9riel ou logiciel<\/td>\n      <td>cycles, instructions, \u00e9checs de cache<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>-g<\/strong><\/td>\n      <td>Active l'\u00e9chantillonnage du graphe d'appels<\/td>\n      <td>Des sentiers co\u00fbteux dans le <strong>Pile<\/strong> reconna\u00eetre<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>\u2013noyau\/\u2013utilisateur<\/strong><\/td>\n      <td>Filtre au niveau du noyau ou de l'espace utilisateur<\/td>\n      <td>Isoler la source du temps CPU<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>\u2013trier<\/strong><\/td>\n      <td>Tri\u00e9 par symbole, DSO, dso:symbol<\/td>\n      <td>Lisibilit\u00e9 de la <strong>Classement<\/strong> augmentent<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Je teste toujours bri\u00e8vement les configurations avant de lancer des mesures plus longues, afin que les <strong>Afficher<\/strong> reste stable et ne provoque aucun effet secondaire. C'est justement lorsque la fr\u00e9quence d'\u00e9chantillonnage est \u00e9lev\u00e9e que je fais attention \u00e0 la surcharge, afin de ne pas solliciter inutilement le syst\u00e8me. Sur les h\u00f4tes de conteneurs, je v\u00e9rifie en outre si les limites des espaces de noms et des cgroups restreignent la visibilit\u00e9. Pour garantir la reproductibilit\u00e9 des tests de performance, je documente tous les param\u00e8tres, y compris les versions du noyau et des pilotes. Cette rigueur me fait gagner beaucoup de temps par la suite <strong>Temps<\/strong> pour classer les changements.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/cpuhotspots_kernel1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Interpr\u00e9tation des sous-syst\u00e8mes : r\u00e9seau, m\u00e9moire, planificateur<\/h2>\n\n<p>Lorsque les chemins r\u00e9seau sont en haut de la liste, je v\u00e9rifie d'abord les affinit\u00e9s IRQ, le RSS (Receive-Side-Scaling) et les d\u00e9chargements tels que GRO\/TSO, car ces param\u00e8tres permettent d'optimiser la <strong>D\u00e9bit<\/strong>- Modifier l'\u00e9quilibre de latence. Lorsque les fonctions de m\u00e9moire pr\u00e9sentent des anomalies, j'examine les mod\u00e8les d'allocation, les Huge Pages, les statistiques Slab et les taux de Page Fault. J'associe souvent la charge du planificateur \u00e0 un nombre excessif de threads, \u00e0 un manque d'affinit\u00e9 CPU ou \u00e0 une priorisation in\u00e9quitable. Pour les \u00e9v\u00e9nements sp\u00e9cifiques du noyau, j\u2019ajoute des points de trace ou j\u2019utilise <a href=\"https:\/\/webhosting.de\/fr\/bpftrace-detecter-plus-rapidement-les-problemes-sur-les-serveurs-dhebergement-et-etablir-un-diagnostic\/\">bpftrace dans l'h\u00e9bergement<\/a>, afin de confirmer des hypoth\u00e8ses. Je recoupe ainsi les observations en direct de Perf Top avec des points de mesure plus profonds, ce qui me permet d'arriver plus rapidement \u00e0 la <strong>Cause<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-kernel-hotspots-7894.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Conditions requises et visibilit\u00e9 des symboles<\/h2>\n\n<p>Avec cela, <strong>perf top<\/strong> Lorsque je r\u00e9sous tous les symboles pertinents du noyau, je veille \u00e0 deux choses : les droits d'acc\u00e8s appropri\u00e9s et la disponibilit\u00e9 des informations sur les symboles. Sur les syst\u00e8mes de production, <em>kernel.perf_event_paranoid<\/em> souvent d\u00e9finie \u00e0 un niveau \u00e9lev\u00e9. Pour obtenir des vues approfondies du noyau, je r\u00e9duis temporairement cette valeur ou je travaille en tant qu\u2019utilisateur root avec les droits n\u00e9cessaires (CAP_PERFMON\/CAP_SYS_ADMIN). Si les adresses du noyau sont masqu\u00e9es (<em>kptr_restrict<\/em>), je vois g\u00e9n\u00e9ralement quand m\u00eame les noms, mais pas les adresses brutes \u2013 cela me suffit pour \u00e9tablir les priorit\u00e9s. Pour l'espace utilisateur, j'installe les paquets d'informations de d\u00e9bogage correspondants afin que `perf top` affiche les noms de fonctions plut\u00f4t que les d\u00e9calages. Cela \u00e9vite les conjectures et permet d'identifier plus rapidement la cause du probl\u00e8me.<\/p>\n\n<h2>Pourcentages et pi\u00e8ges li\u00e9s \u00e0 l'\u00e9chantillonnage<\/h2>\n\n<p>J'interpr\u00e8te les pourcentages de la liste comme suit : <strong>parts relatives<\/strong> des \u00e9chantillons mesur\u00e9s, et non comme une charge CPU exacte dans le domaine temporel. Si je s\u00e9lectionne plusieurs \u00e9v\u00e9nements, il est possible que <strong>Multiplexage<\/strong> agir : Perf r\u00e9partit les contre-attaques dans le temps et <em>normalise<\/em> l'affichage. Pour obtenir un historique clair, je commence par effectuer une mesure globale en cycles CPU ou en instructions, puis j'ajoute les \u00e9v\u00e9nements sp\u00e9cifiques par la suite. Je d\u00e9tecte les pics de courte dur\u00e9e en utilisant une fr\u00e9quence plus \u00e9lev\u00e9e (-F) et des intervalles plus courts ; pour les syst\u00e8mes peu sollicit\u00e9s, la fr\u00e9quence par d\u00e9faut suffit. Je note \u00e9galement que <strong>Idle<\/strong>- les variations de phase et de fr\u00e9quence (Turbo, Governor) peuvent fausser la perception. C'est pourquoi j'uniformise les r\u00e9glages de cadence et d'\u00e9nergie pour les mesures comparatives.<\/p>\n\n<h2>Les graphes d'appel en d\u00e9tail<\/h2>\n\n<p>Une fois que j'ai identifi\u00e9 un point noir, j'affine mon analyse \u00e0 l'aide des graphes d'appels. Avec <strong>-g<\/strong> et gr\u00e2ce \u00e0 une m\u00e9thode d'unwinding adapt\u00e9e, j'obtiens le chemin d'acc\u00e8s \u00e0 l'endroit co\u00fbteux. Les pointeurs de trame ou l'unwinding DWARF me fournissent des piles stables ; lorsque c'est possible, j'utilise des tampons de retour mat\u00e9riels (LBR) pour obtenir des cha\u00eenes tr\u00e8s pr\u00e9cises. Je n'augmente les tampons mmap que dans la mesure n\u00e9cessaire pour limiter la surcharge. Si la pile comporte de nombreuses fonctions auxiliaires, je veille \u00e0 <strong>y compris<\/strong> vs. <strong>exclusif<\/strong> Co\u00fbts : ce qui est d\u00e9terminant, c'est de savoir si la fonction elle-m\u00eame est co\u00fbteuse ou si elle ne sert principalement que de voie de transit. Cette distinction me fait souvent gagner des heures dans la recherche des causes.<\/p>\n\n<h2>Travailler dans des conteneurs et des machines virtuelles<\/h2>\n\n<p>Dans les environnements de conteneurs, je v\u00e9rifie si ma vue sur <strong>cgroups<\/strong> et que les espaces de noms sont corrects. Je concentre les mesures sur les PID et les processeurs pertinents, afin que les \u00ab voisins bruyants \u00bb ne faussent pas le tableau. Pour les machines virtuelles, je v\u00e9rifie si le PMU virtuel est activ\u00e9 ; sinon, il me manque des \u00e9v\u00e9nements mat\u00e9riels pr\u00e9cis et je ne vois principalement que des signaux logiciels. Je reconnais souvent les h\u00f4tes KVM gr\u00e2ce \u00e0 des ic\u00f4nes autour de <em>kvm_vcpu<\/em> ou <em>vmx<\/em>\/<em>svm<\/em>. Dans ce genre de situation, je s\u00e9pare clairement les analyses de l'h\u00f4te et celles de l'invit\u00e9 afin de ne pas confondre cause et effet.<\/p>\n\n<h2>Mod\u00e8les identifiables et hypoth\u00e8ses rapides<\/h2>\n\n<p>Au quotidien, certaines habitudes ont fait leurs preuves, que je v\u00e9rifie imm\u00e9diatement :<\/p>\n<ul>\n  <li><strong>Concurrence de Lock<\/strong>: Plong\u00e9e <em>queued_spin_lock_slowpath<\/em> ou <em>mutex_spin_on_owner<\/em> Au niveau sup\u00e9rieur, les structures de donn\u00e9es sont trop grossi\u00e8res ou les files d'attente de travail trop restreintes. Je r\u00e9duis les conflits gr\u00e2ce au sharding, \u00e0 une granularit\u00e9 de verrouillage plus fine ou \u00e0 une modification de la taille des lots.<\/li>\n  <li><strong>Impression du planificateur<\/strong>: Se multiplient <em>schedule()<\/em>, <em>choisir_la_prochaine_t\u00e2che_\u00e9quitable<\/em> ou les chemins de r\u00e9veil, j'ajuste le nombre de threads, les affinit\u00e9s et les priorit\u00e9s. Il suffit souvent de \u201c calmer \u201d les threads \u00ab bavards \u00bb ou de d\u00e9finir clairement les param\u00e8tres du processeur.<\/li>\n  <li><strong>SoftIRQ r\u00e9seau<\/strong>: pics \u00e0 <em>net_rx_action<\/em>, <em>napi_poll<\/em> ou les d\u00e9chargements de somme de contr\u00f4le indiquent des temp\u00eates de paquets ou une r\u00e9partition sous-optimale des RSS et des IRQ. J'affecte les IRQ aux c\u0153urs appropri\u00e9s et j'ajuste les param\u00e8tres GRO\/TSO pour obtenir le profil d\u00e9bit\/latence souhait\u00e9.<\/li>\n  <li><strong>Chemins d'acc\u00e8s aux fichiers<\/strong>: Beaucoup de temps \u00e0 <em>do_page_fault<\/em>, <em>copy_user_*<\/em> ou les fonctions \u00ab Slab \u00bb me permettent de v\u00e9rifier les mod\u00e8les d'allocation, les THP\/Huge Pages et la localit\u00e9 NUMA. Un mauvais placement peut ici co\u00fbter un nombre consid\u00e9rable de cycles sans que l'on s'en aper\u00e7oive.<\/li>\n  <li><strong>RCU et temporisateurs<\/strong>: Dominer <em>rcu_core<\/em> ou les callbacks de la minuterie, je repense les strat\u00e9gies de polling et de traitement par lots de mes services afin d'assurer un fonctionnement plus fluide du syst\u00e8me.<\/li>\n<\/ul>\n\n<h2>Approfondir ses connaissances en mati\u00e8re de rigueur de mesure et de reproductibilit\u00e9<\/h2>\n\n<p>Pour obtenir des ex\u00e9cutions parfaitement comparables, je maintiens les facteurs environnementaux constants : r\u00e9gulateur du processeur, \u00e9tats Turbo, t\u00e2ches en arri\u00e8re-plan, voire la temp\u00e9rature ambiante pour les n\u0153uds denses. J'affecte les charges de test \u00e0 des c\u0153urs d\u00e9finis et, si n\u00e9cessaire, j'isole les processeurs surchauff\u00e9s afin que les d\u00e9cisions du planificateur restent stables. Je documente toutes les modifications, y compris les versions du noyau, des pilotes et du micrologiciel. Pour les r\u00e9glages plus risqu\u00e9s, je pr\u00e9vois des points de retour et effectue de nouvelles mesures imm\u00e9diatement apr\u00e8s l'intervention. J'obtiens ainsi des r\u00e9sultats fiables <strong>Avant\/Apr\u00e8s<\/strong>-Une histoire que je peux encore comprendre, m\u00eame des mois plus tard.<\/p>\n\n<h2>Astuces pratiques : les commandes que j'utilise souvent<\/h2>\n\n<p>Selon la question, j'utilise des formules concises :<\/p>\n<ul>\n  <li><strong>\u00c9valuation approfondie sous contrainte<\/strong>: perf top -e cpu-cycles \u2013kernel \u2013user<br\/>Aper\u00e7u rapide permettant de savoir si c'est le noyau ou l'espace utilisateur qui m\u00e8ne la danse.<\/li>\n  <li><strong>Focus sur les processus avec Callgraph<\/strong>: perf top -p PID -g \u2013kernel \u2013user<br\/>Affiche-moi les chemins d'acc\u00e8s en temps r\u00e9el de l'application concern\u00e9e, sans bruit de fond du syst\u00e8me.<\/li>\n  <li><strong>Zoom sur le processeur<\/strong>: perf top -C 2-5 -e cycles CPU -g<br\/>Permet de rem\u00e9dier aux points chauds NUMA ou IRQ lorsque seuls quelques c\u0153urs sont \u201c en surchauffe \u201d.<\/li>\n  <li><strong>Soup\u00e7on de stockage<\/strong>: perf top -e cache-misses -e cycles -g \u2013kernel<br\/>Affiche les chemins de m\u00e9moire par rapport aux cycles.<\/li>\n  <li><strong>Fixer les pointes instables<\/strong>: perf top -F 999 -I 1000 -e cycles<br\/>Une fr\u00e9quence plus \u00e9lev\u00e9e et des intervalles d'affichage plus courts permettent de d\u00e9tecter les pics de courte dur\u00e9e.<\/li>\n<\/ul>\n\n<h2>Aides \u00e0 l'interpr\u00e9tation pour des sous-syst\u00e8mes sp\u00e9cifiques<\/h2>\n\n<p>\u00c0 l'adresse suivante : <strong>R\u00e9seau<\/strong> Outre les chemins NAPI et RX\/TX, je surveille \u00e9galement les parts TLS\/crypto, qui peuvent devenir pr\u00e9dominantes en cas de trafic important de handshakes. Je v\u00e9rifie si le \u00ab zero-copy \u00bb ou le \u00ab coalescing \u00bb s\u2019av\u00e8rent efficaces et si les segments volumineux (TSO\/GSO) d\u00e9passent mes budgets de latence. Dans le <strong>M\u00e9moire<\/strong>- Dans ce domaine, je me r\u00e9f\u00e8re \u00e0 THP : est-ce que cela all\u00e8ge ma charge, ou est-ce que les \u00e9v\u00e9nements de fractionnement\/fusion cr\u00e9ent des interf\u00e9rences ? Dans le cas de <strong>Stockage<\/strong> j'interpr\u00e8te <em>blk_mq<\/em>-Les symboles et les chemins io_uring comme indication de la profondeur des files d'attente et des strat\u00e9gies de fusion. Lors de la <strong>planificateur<\/strong> J'associe les avalanches \u201c wakeup \u201d \u00e0 des cha\u00eenes \u00ab lock \u00bb ou \u00ab IO \u00bb et j'\u00e9quilibre les chemins en utilisant la contre-pression plut\u00f4t que \u00ab davantage de threads \u00bb.<\/p>\n\n<h2>Les limites de Perf Top et \u00e0 quel moment je change de strat\u00e9gie<\/h2>\n\n<p>Parce que <strong>perf top<\/strong> Comme il s'agit d'une approche bas\u00e9e sur l'\u00e9chantillonnage, je pr\u00e9f\u00e8re les images moyennes aux \u00e9v\u00e9nements individuels. Pour les cha\u00eenes d'ex\u00e9cution d\u00e9terministes, je passe aux tracepoints, \u00e0 ftrace ou \u00e0 eBPF afin de mettre en \u00e9vidence des causalit\u00e9s pr\u00e9cises. Si j'ai besoin d'une quantification exacte (par exemple, le nombre d'instructions par requ\u00eate), je combine ces m\u00e9thodes avec <strong>statistique parfaite<\/strong> ou des analyses hors ligne \u00e0 partir de \u00ab perf record\/report \u00bb. Si je tombe sur des piles peu claires (symboles manquants, d\u00e9roulement incorrect), je commence par r\u00e9gler le probl\u00e8me de visibilit\u00e9 \u2013 sinon, ce serait comme t\u00e2tonner dans le brouillard.<\/p>\n\n<h2>En bref<\/h2>\n\n<p>Avec <strong>perf top<\/strong> Je rep\u00e8re en temps r\u00e9el o\u00f9 le processeur perd du temps dans le noyau et quels symboles je dois examiner en priorit\u00e9. \u00c0 partir des pourcentages, des sch\u00e9mas r\u00e9currents et de la distinction entre l'espace noyau et l'espace utilisateur, je d\u00e9termine les prochaines \u00e9tapes \u00e0 suivre de mani\u00e8re cibl\u00e9e. Je synth\u00e9tise ensuite ces informations \u00e0 l\u2019aide de `perf record\/report`, je v\u00e9rifie les changements sous charge et je documente ma cha\u00eene de mesure. Dans les environnements d\u2019h\u00e9bergement, cette approche s\u2019av\u00e8re particuli\u00e8rement payante, car de nombreux services et conteneurs en tirent profit d\u00e8s que les chemins du noyau fonctionnent plus efficacement. Ceux qui ma\u00eetrisent ce processus gagnent des jours de diagnostic et r\u00e9duisent <strong>Latence<\/strong> et permet d'obtenir des temps de r\u00e9ponse nettement plus stables sous une charge r\u00e9elle.<\/p>","protected":false},"excerpt":{"rendered":"<p>perf top Linux affiche en temps r\u00e9el les points chauds du processeur dans le noyau. Cela permet un profilage rapide du processeur et une analyse pr\u00e9cise des goulots d'\u00e9tranglement.<\/p>","protected":false},"author":1,"featured_media":20619,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-20626","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"118","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"perf top","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20619","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/20626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/comments?post=20626"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/20626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/20619"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=20626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=20626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=20626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}