{"id":19625,"date":"2026-06-02T18:18:36","date_gmt":"2026-06-02T16:18:36","guid":{"rendered":"https:\/\/webhosting.de\/server-process-affinity-numa-awareness-hosting-ressourcentuning\/"},"modified":"2026-06-02T18:18:36","modified_gmt":"2026-06-02T16:18:36","slug":"processus-serveur-affinity-numa-awareness-hosting-ressourcentuning","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/server-process-affinity-numa-awareness-hosting-ressourcentuning\/","title":{"rendered":"Optimiser l'affinit\u00e9 du processus serveur et la sensibilisation au NUMA dans l'h\u00e9bergement"},"content":{"rendered":"<p>J'augmente les performances du serveur en <strong>Affinit\u00e9 de processus<\/strong> et NUMA-Awareness, afin d'optimiser l'agencement des threads, des c\u0153urs et de la m\u00e9moire. Cela me permet de r\u00e9duire les temps de latence, d'augmenter le d\u00e9bit et d'obtenir des temps de r\u00e9ponse r\u00e9guliers dans les environnements d'h\u00e9bergement avec de nombreuses applications.<\/p>\n\n<h2>Points centraux<\/h2>\n\n<p>Avant de d\u00e9finir des param\u00e8tres concrets, je clarifie les objectifs, les mod\u00e8les de charge de travail et la topologie mat\u00e9rielle existante. J'analyse quels threads sont particuli\u00e8rement gourmands en m\u00e9moire et quels processus n\u00e9cessitent des temps de r\u00e9action courts. Je tiens compte du nombre de c\u0153urs disponibles par n\u0153ud NUMA et de la quantit\u00e9 de RAM locale qui s'y trouve. Je pr\u00e9vois de regrouper les services par n\u0153ud pour que <strong>Localit\u00e9 de l'unit\u00e9 centrale<\/strong> est pr\u00e9serv\u00e9. Je mesure chaque changement \u00e0 l'aide de benchmarks et de monitoring afin d'\u00e9viter toute erreur d'hypoth\u00e8se.<\/p>\n<ul>\n  <li><strong>Affinity<\/strong>Lier des processus \u00e0 des groupes de base<\/li>\n  <li><strong>NUMA<\/strong>: garder la m\u00e9moire en local<\/li>\n  <li><strong>Topologie<\/strong>: mise \u00e0 l'\u00e9chelle n\u0153ud par n\u0153ud<\/li>\n  <li><strong>Suivi<\/strong>: rendre les acc\u00e8s \u00e0 distance visibles<\/li>\n  <li><strong>H\u00e9bergement<\/strong>: Contr\u00f4ler le placement de l'hyperviseur<\/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\/06\/serverraum-optimierung-8392.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Que signifie Process Affinity sur le serveur ?<\/h2>\n\n<p>Avec <strong>Affinit\u00e9 de processus<\/strong> je d\u00e9termine sur quels c\u0153urs de l'unit\u00e9 centrale un processus ou un thread s'ex\u00e9cute, au lieu de laisser le syst\u00e8me d'exploitation d\u00e9cider librement. Cela permet de maintenir la coh\u00e9rence du contenu du cache, ce qui r\u00e9duit les \u00e9checs de cache et les changements de contexte. J'\u00e9pingle les threads de mani\u00e8re \u00e0 ce qu'ils utilisent efficacement leurs caches L1\/L2\/L3 et ne sautent pas entre les noyaux. Cela renforce la pr\u00e9visibilit\u00e9 des latences en cas de charge \u00e9lev\u00e9e et assure une utilisation r\u00e9guli\u00e8re des c\u0153urs r\u00e9serv\u00e9s. Pour une initiation pratique, ce guide m'aide \u00e0 <a href=\"https:\/\/webhosting.de\/fr\/serveur-cpu-affinity-hebergement-optimisation-kernelaffinity\/\">Affinit\u00e9 CPU dans l'h\u00e9bergement<\/a>, J'ai utilis\u00e9 cette fonction pour comparer des variantes typiques de l'\u00e9pinglage.<\/p>\n\n<h2>Comprendre la NUMA : acc\u00e8s local vs. acc\u00e8s \u00e0 distance<\/h2>\n\n<p><strong>NUMA<\/strong> divise la m\u00e9moire en n\u0153uds, chacun d'entre eux \u00e9tant \u00e9troitement li\u00e9 \u00e0 des socles de CPU sp\u00e9cifiques. Un thread acc\u00e8de plus rapidement \u00e0 la RAM locale qu'\u00e0 la m\u00e9moire distante d'autres n\u0153uds. Cette asym\u00e9trie a un impact consid\u00e9rable sur les charges de travail r\u00e9elles, en particulier lorsque le nombre de c\u0153urs et l'extension de la RAM sont \u00e9lev\u00e9s. C'est pourquoi j'attribue les threads et leurs acc\u00e8s \u00e0 la m\u00e9moire \u00e0 un n\u0153ud commun, afin de r\u00e9duire les latences et d'augmenter la bande passante. Ceux qui souhaitent approfondir la topologie trouveront des informations pratiques sur les points suivants <a href=\"https:\/\/webhosting.de\/fr\/numa-nodes-server-hosting-grands-systemes-serverboost\/\">N\u0153uds NUMA dans le serveur<\/a> et mesure ensuite les effets dans la vie quotidienne.<\/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\/06\/server_optimierung_meeting_5492.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Sensibilisation \u00e0 la NUMA dans le syst\u00e8me d'exploitation et l'application<\/h2>\n\n<p>J'active <strong>Sensibilisation \u00e0 la NUMA<\/strong> dans le syst\u00e8me d'exploitation, l'hyperviseur et l'application, afin que la m\u00e9moire soit allou\u00e9e localement. Dans la mesure du possible, je garde les threads d'une instance sur les c\u0153urs du m\u00eame n\u0153ud NUMA au lieu de les r\u00e9partir sur les n\u0153uds. Je pr\u00e9f\u00e8re placer les gros tas ou tampons dans la RAM locale afin de limiter les acc\u00e8s distants co\u00fbteux. Si une application poss\u00e8de plusieurs travailleurs, je les structure en pools, n\u0153ud par n\u0153ud, afin d'\u00e9viter les interf\u00e9rences. Il en r\u00e9sulte une affectation claire de l'unit\u00e9 centrale et de la m\u00e9moire, ce qui r\u00e9duit sensiblement les temps de r\u00e9ponse.<\/p>\n\n<h2>Interaction entre Affinity et NUMA<\/h2>\n\n<p><strong>Affinity<\/strong> sans planification NUMA gaspille le potentiel si la m\u00e9moire se trouve sur des n\u0153uds \u00e9loign\u00e9s. De m\u00eame, la prise en compte de la NUMA n'apporte pas grand-chose si l'ordonnancement d\u00e9place souvent les threads. C'est pourquoi je lie les threads aux noyaux d'un n\u0153ud concret et je veille en parall\u00e8le \u00e0 l'allocation locale de la m\u00e9moire. Si je fais \u00e9voluer l'application, je remplis d'abord un n\u0153ud avant d'inclure d'autres n\u0153uds. Ce couplage de l'\u00e9pinglage des noyaux et de la politique de m\u00e9moire g\u00e9n\u00e8re des profils de latence constants sous la charge.<\/p>\n\n<h2>R\u00e9glage du mat\u00e9riel et du firmware (UEFI\/BIOS)<\/h2>\n\n<p>Pour que Affinity et NUMA soient efficaces, je r\u00e8gle la base de mani\u00e8re stable dans le firmware. Je privil\u00e9gie des modes de performance coh\u00e9rents plut\u00f4t que des options d'\u00e9conomie d'\u00e9nergie agressives, afin de minimiser les fluctuations de la fr\u00e9quence et de la latence. Points importants que je v\u00e9rifie :<\/p>\n<ul>\n  <li>Profil de performance : performance maximale\/performance au lieu de Balanced ; limiter les C-States bas si la latence est plus critique que l'efficacit\u00e9.<\/li>\n  <li>Strat\u00e9gie turbo\/boost : boost d\u00e9terministe \u00e0 la demande pour \u00e9viter les noyaux P fluctuants.<\/li>\n  <li>SMT\/Hyper-Threading : tester en fonction de la charge de travail - pour les SLA de latence dure, j'\u00e9pingle souvent les threads critiques sur des c\u0153urs physiques et s\u00e9pare les jumeaux SMT.<\/li>\n  <li>Entrelacement de la m\u00e9moire : d\u00e9sactiv\u00e9 lors de l'optimisation NUMA, afin que les n\u0153uds restent bien d\u00e9limit\u00e9s.<\/li>\n  <li>Canaux de m\u00e9moire : \u00e9quipement sym\u00e9trique des slots DIMM par n\u0153ud pour une bande passante maximale.<\/li>\n<\/ul>\n\n<h2>Chemin de configuration : de l'analyse \u00e0 l'\u00e9pinglage<\/h2>\n\n<p>Je commence par un enregistrement de la topologie, typiquement avec <strong>lscpu<\/strong>, numactl -hardware ou hwloc. Ensuite, je d\u00e9finis pour chaque service le nombre de c\u0153urs n\u00e9cessaires et je les attribue \u00e0 un n\u0153ud. Je r\u00e9alise l'\u00e9pinglage \u00e0 l'aide de taskset ou des options Systemd afin que l'affectation reste reproductible. Lors du test, j'adapte la taille des groupes de noyaux jusqu'\u00e0 ce que la latence et le d\u00e9bit soient en bon \u00e9quilibre. Ce faisant, je veille \u00e0 ce qu'aucun service n\u00e9cessitant beaucoup de CPU ne partage le m\u00eame pool de noyaux et ne supplante ainsi les caches des autres.<\/p>\n\n<p>Sous Linux, j'aime d\u00e9finir l'affinit\u00e9 et la politique de m\u00e9moire de mani\u00e8re d\u00e9clarative via cgroups (v2) : Je d\u00e9finis cpuset.cpus et cpuset.mems par n\u0153ud et je lance des services avec des param\u00e8tres Systemd comme CPUAffinity= et NUMAMask=. Pour les processus par lots ou secondaires, je pr\u00e9vois des pools s\u00e9par\u00e9s afin qu'ils n'atteignent pas les c\u0153urs des animaux \u00e0 latence critique. Pour les t\u00e2ches r\u00e9currentes, je planifie des fen\u00eatres de d\u00e9marrage exactes dans lesquelles les c\u0153urs sont libres.<\/p>\n\n<h2>Affinit\u00e9 d'interruption et d'E\/S<\/h2>\n\n<p>Il n'y a pas que les fils d'apps qui ont besoin de Locality - il y a aussi <strong>Interruptions<\/strong> et les chemins d'E\/S, je les ordonne \u00e0 proximit\u00e9 des n\u0153uds :<\/p>\n<ul>\n  <li>R\u00e9seau : lier les queues RX\/TX d'une carte r\u00e9seau aux c\u0153urs du m\u00eame n\u0153ud NUMA (configurer RSS\/XPS), afin que le traitement des paquets et les threads d'applications partagent la localit\u00e9 du cache et de la RAM.<\/li>\n  <li>Stockage : \u00e9pingler les files NVMe et les threads IO par n\u0153ud ; pour blk-mq, v\u00e9rifier la r\u00e9partition des files afin d'\u00e9viter que les volumes chauds ne traversent les n\u0153uds.<\/li>\n  <li>irqbalance : soit la configurer de mani\u00e8re cibl\u00e9e, soit la d\u00e9sactiver pour les files d'attente critiques et la d\u00e9finir manuellement par smp_affinity.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/06\/server-optimize-numa-awareness-2381.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Utiliser les fonctions du syst\u00e8me d'exploitation de mani\u00e8re cibl\u00e9e<\/h2>\n\n<p>Pour des profils de latence stricts, j'utilise d\u00e9lib\u00e9r\u00e9ment des fonctionnalit\u00e9s du noyau :<\/p>\n<ul>\n  <li>isolcpus\/nohz_full\/rcu_nocbs : d\u00e9coupler les noyaux de l'ordonnancement g\u00e9n\u00e9ral, minimiser la charge des ticks et d\u00e9placer les rappels RCU - id\u00e9al pour les threads \u00e0 haute perf.<\/li>\n  <li>Politiques de l'ordonnanceur : pour les parts en temps r\u00e9el, utiliser SCHED_FIFO\/RR avec parcimonie ; sinon CFS avec affinit\u00e9 \u00e9troite.<\/li>\n  <li>Auto NUMA Balancing : souvent d\u00e9sactiv\u00e9 pour les charges de travail strictement \u00e9pingl\u00e9es, afin que le noyau ne d\u00e9place pas la m\u00e9moire.<\/li>\n  <li>Transparent Huge Pages : mettre la plupart du temps sur madvise et utiliser des Huge Pages explicites pour les tr\u00e8s gros tas afin de r\u00e9duire les TLB miss.<\/li>\n<\/ul>\n\n<h2>Politique de stockage consciente de la NUMA<\/h2>\n\n<p>Avec <strong>numactl<\/strong> j'impose une allocation locale pr\u00e9f\u00e9rentielle de la m\u00e9moire ou j'utilise des politiques telles que preferred et interleave. Dans la mesure du possible, je garde les grandes structures en m\u00e9moire, comme les pools de tampons d'une base de donn\u00e9es, au sein d'un n\u0153ud. Si le besoin de m\u00e9moire se d\u00e9place, j'observe l'augmentation des acc\u00e8s \u00e0 distance et je r\u00e9agis par la segmentation ou le sharding. Les directives relatives \u00e0 l'utilisation de l'espace de stockage me donnent un aper\u00e7u pratique du r\u00e9glage. <a href=\"https:\/\/webhosting.de\/fr\/numa-balancing-serveur-optimisation-de-la-memoire-materiel-numaflux\/\">NUMA-Balancing<\/a>, que je confirme ensuite par des tests de charge. Ainsi, le temps d'acc\u00e8s \u00e0 la m\u00e9moire reste faible et pr\u00e9visible.<\/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\/06\/server_optimierung_tech_office_4821.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>techniques de stockage : Huge Pages, Heaps et Garbage Collection<\/h2>\n\n<p>La gestion de la m\u00e9moire d\u00e9termine souvent les latences du P99. J'utilise les Huge Pages l\u00e0 o\u00f9 les grands tas \u00e0 longue dur\u00e9e de vie dominent (par exemple les buffers DB, les tas JVM). Cela r\u00e9duit les TLB miss et les Pagewalks. Pour les charges de travail JVM, je tiens compte de la taille des tas par n\u0153ud et j'active l'optimisation NUMA pour que les threads GC et les tas restent locaux. Pour .NET et Go, je planifie les GC et les pools de goroutine de mani\u00e8re \u00e0 ce qu'ils ne remplissent pas les c\u0153urs de mani\u00e8re incontr\u00f4l\u00e9e sur les n\u0153uds. Dans les bases de donn\u00e9es, je divise les grands pools de tampons en segments locaux aux n\u0153uds ou j'ex\u00e9cute plusieurs petites instances par n\u0153ud.<\/p>\n\n<h2>Pratique de l'h\u00e9bergement : charges de travail typiques<\/h2>\n\n<p>Les bases de donn\u00e9es, les caches et les grands serveurs d'applications sont sensibles aux <strong>Localit\u00e9 de l'unit\u00e9 centrale<\/strong> et la latence de la m\u00e9moire. Une VM r\u00e9partie sur plusieurs n\u0153uds NUMA augmente les chemins de calcul et de m\u00e9moire et ralentit les requ\u00eates ou les appels API. Je place donc les VM de telle sorte que leurs vCPU soient affect\u00e9s \u00e0 un n\u0153ud physique et que la m\u00e9moire y reste. Les pools de conteneurs re\u00e7oivent des ensembles de CPU coh\u00e9rents, afin que les travailleurs ne sautent pas par-dessus les n\u0153uds. Ce soin est particuli\u00e8rement payant pour le commerce \u00e9lectronique et les services API qui n\u00e9cessitent un parall\u00e9lisme \u00e9lev\u00e9.<\/p>\n\n<h2>Strat\u00e9gies d'applications \u00e0 granularit\u00e9 fine<\/h2>\n\n<p>Au niveau de l'application, je d\u00e9couple les n\u0153uds afin de pr\u00e9server la localit\u00e9 :<\/p>\n<ul>\n  <li>Des pools de travailleurs : Un pool par n\u0153ud NUMA, chacun avec une file d'attente locale afin d'\u00e9viter les communications inter-n\u0153uds.<\/li>\n  <li>Sharding : garder les donn\u00e9es et les sessions locales aux n\u0153uds ; choisir le hachage de mani\u00e8re \u00e0 ce que les hot shards ne croisent pas plusieurs n\u0153uds.<\/li>\n  <li>Caches : r\u00e9pliqu\u00e9s plut\u00f4t que centralis\u00e9s ; les lecteurs pr\u00e9f\u00e8rent les copies node-local.<\/li>\n  <li>Thread pinning dans les runtimes : pour les piles r\u00e9seau (par ex. Netty) et les clients DB, lier les worker \u00e0 des noyaux fixes, tenir compte de la proximit\u00e9 de l'IRQ.<\/li>\n<\/ul>\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\/06\/devdesk_serveroptimierung_4832.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitoring et recherche d'erreurs<\/h2>\n\n<p>Un monitoring judicieux montre plus que l'utilisation globale, car <strong>NUMA<\/strong>-Les effets se cachent dans les valeurs d\u00e9taill\u00e9es des n\u0153uds. J'observe la charge CPU par c\u0153ur et par n\u0153ud, l'utilisation de la m\u00e9moire par n\u0153ud et les taux d'acc\u00e8s \u00e0 distance. Si certains c\u0153urs d\u00e9bordent alors que d'autres restent inutilis\u00e9s, cela indique de mauvaises configurations d'affinit\u00e9s. Si un n\u0153ud se remplit de RAM alors qu'un autre a de la r\u00e9serve, je dois adapter la politique de m\u00e9moire ou le placement. Ces signaux me permettent de prouver objectivement l'existence de goulots d'\u00e9tranglement et d'en d\u00e9duire les prochaines modifications.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>M\u00e9triques<\/th>\n      <th>Remarque\/sympt\u00f4me<\/th>\n      <th>Cause typique<\/th>\n      <th>Action rapide<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>CPU par c\u0153ur<\/strong><\/td>\n      <td>Quelques noyaux \u00e9lev\u00e9s en permanence<\/td>\n      <td>Mauvais \u00e9pinglage<\/td>\n      <td>Redistribuer les groupes de base<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>RAM par n\u0153ud<\/strong><\/td>\n      <td>Un n\u0153ud dans la limite<\/td>\n      <td>M\u00e9moire non locale<\/td>\n      <td>mettre numactl preferred<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Taux \u00e0 distance<\/strong><\/td>\n      <td>Acc\u00e8s \u00e0 distance \u00e9lev\u00e9<\/td>\n      <td>VM\/conteneur sur les n\u0153uds<\/td>\n      <td>Regrouper un ensemble vCPU\/CPU<\/td>\n    <\/tr>\n    <tr>\n      <td><strong>Commutateurs contextuels<\/strong><\/td>\n      <td>Latence intermittente<\/td>\n      <td>Randonn\u00e9e du fil de discussion<\/td>\n      <td>\u00c9pingler Affinity plus fort<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Anti-patterns et pi\u00e8ges typiques<\/h2>\n\n<p>J'\u00e9vite les limites globales de CPU sans tenir compte de NUMA, car elles allouent des noyaux \u00e0 travers les n\u0153uds. De m\u00eame, \u201eOne big VM\u201c avec trop de vCPUs \u00e9volue rarement de mani\u00e8re lin\u00e9aire - mieux vaut plusieurs instances locales aux n\u0153uds. Transparent Huge Pages en mode Always provoque parfois des pics de d\u00e9faut de page ; madvise plus Huge Pages cibl\u00e9es est plus pr\u00e9visible. Laisser irqbalance s'ex\u00e9cuter de mani\u00e8re incontr\u00f4l\u00e9e dilue la localit\u00e9 I\/O. Et : un pinning trop dur sans noyaux tampons peut \u00e9touffer la maintenance et la charge secondaire - je pr\u00e9vois toujours quelques noyaux libres par n\u0153ud.<\/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\/06\/serverprozessoptimierung-4812.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Rendre les effets de la performance mesurables<\/h2>\n\n<p>Je mesure des effets de <strong>Affinity<\/strong> et les modifications NUMA toujours avec des benchmarks reproductibles. Les comparaisons avant\/apr\u00e8s avec un ensemble de donn\u00e9es identiques montrent les am\u00e9liorations de mani\u00e8re transparente. Je combine des tests synth\u00e9tiques avec des profils de charge r\u00e9alistes pour que les optimisations portent leurs fruits au quotidien. Les indicateurs de r\u00e9sultats tels que les latences P95 et P99 sont souvent plus parlants que les valeurs moyennes. Ainsi, je peux prendre des d\u00e9cisions plus s\u00fbres et identifier les effets secondaires \u00e0 un stade pr\u00e9coce.<\/p>\n\n<h2>Virtualisation et conteneurs<\/h2>\n\n<p>Dans les configurations d'hyperviseur, je place <strong>vNUMA<\/strong>, pour que la VM invit\u00e9e comprenne la topologie physique. Je place les vCPU d'une VM dans un n\u0153ud physiquement adapt\u00e9 afin de minimiser les acc\u00e8s \u00e0 distance. Pour les conteneurs, je d\u00e9finis les demandes de CPU et les limites de mani\u00e8re \u00e0 ce que les ensembles de CPU restent coh\u00e9rents et que le gestionnaire de topologie respecte la localisation des n\u0153uds. Je n'empile les grandes VM avec de nombreuses vCPU sur les n\u0153uds que si l'application autorise la segmentation en interne. J'\u00e9value chaque placement en fonction de la latence, du d\u00e9bit et de la charge par n\u0153ud.<\/p>\n\n<h2>Orchestration : Cgroups, Kubernetes et autres.<\/h2>\n\n<p>Dans les conteneurs, je mise sur les classes garanties ou en rafale avec des ensembles de CPU stables et l'affectation de mems. Le gestionnaire de topologie en mode \u201esingle-numa-node\u201c aide \u00e0 garder les pods locaux aux n\u0153uds. Pour les parties en temps r\u00e9el de longue dur\u00e9e, j'utilise le gestionnaire de CPU en mode \u201estatic\u201c pour que les noyaux restent exclusifs. Je planifie les HugePages comme requ\u00eates\/limites et je regroupe les pods par r\u00f4le de charge de travail afin que les n\u0153uds ne soient pas surcharg\u00e9s de mani\u00e8re h\u00e9t\u00e9rog\u00e8ne. Important : g\u00e9rer proprement les \u00e9tiquettes de n\u0153uds afin que les r\u00e8gles de placement Locality ne soient pas bris\u00e9es involontairement.<\/p>\n\n<h2>R\u00f4le du fournisseur d'h\u00e9bergement<\/h2>\n\n<p>Un bon fournisseur fournit des informations transparentes <strong>Topologie NUMA<\/strong>, options d'affinit\u00e9 et visibilit\u00e9 des m\u00e9triques de n\u0153uds. Je veille \u00e0 ce que l'hyperviseur et l'orchestration prennent la NUMA-Awareness au s\u00e9rieux et que le placement vCPU reste contr\u00f4lable. Il est \u00e9galement important de disposer d'un monitoring qui fournisse le CPU, la RAM et les quotas \u00e0 distance par n\u0153ud. Je peux ainsi d\u00e9cider moi-m\u00eame de la rigueur de mes pins et de la mani\u00e8re dont je d\u00e9finis les politiques de m\u00e9moire. Ce contr\u00f4le rend les charges de travail exigeantes fiables et planifiables.<\/p>\n\n<h2>Mod\u00e8le d'exploitation : introduire des changements en toute s\u00e9curit\u00e9<\/h2>\n\n<p>J'introduis les politiques d'\u00e9pinglage et de NUMA de mani\u00e8re it\u00e9rative : d'abord sur un n\u0153ud, avec des \u00e9tapes de retour en arri\u00e8re clairement d\u00e9finies. Je documente la topologie, les affectations et les param\u00e8tres du noyau afin d'assurer la reproductibilit\u00e9. Pour les versions, j'utilise le trafic Canary, j'observe les P95\/P99, les commutateurs contextuels et les taux \u00e0 distance pendant au moins une phase de pleine charge et je ne d\u00e9ploie plus largement qu'ensuite. Ainsi, les am\u00e9liorations restent stables et les risques sont g\u00e9rables.<\/p>\n\n<h2>Les meilleures pratiques, appliqu\u00e9es de mani\u00e8re compacte<\/h2>\n\n<p>Je commence chaque optimisation par un examen approfondi <strong>Analyse de la topologie<\/strong> et je documente l'allocation du noyau et des n\u0153uds. Ensuite, je r\u00e9partis les charges de travail de mani\u00e8re \u00e0 ce que la base de donn\u00e9es, le cache et le serveur d'applications re\u00e7oivent des ressources de n\u0153uds s\u00e9par\u00e9es. J'\u00e9pingle les processus critiques et r\u00e8gle la m\u00e9moire de pr\u00e9f\u00e9rence en local avant d'ajuster finement la taille des groupes. J'accompagne chaque r\u00e9glage de benchmarks et de m\u00e9triques de n\u0153uds afin de voir clairement les effets. Pour la croissance, je planifie n\u0153ud par n\u0153ud et je garde les instances l\u00e9g\u00e8res au lieu de gonfler une instance monolithique g\u00e9ante.<\/p>\n\n<h2>R\u00e9sum\u00e9 et prochaines \u00e9tapes<\/h2>\n\n<p>Avec une approche cibl\u00e9e <strong>Affinit\u00e9 de processus<\/strong> et une v\u00e9ritable prise de conscience de la NUMA, je fais progresser sensiblement les charges de travail sur le m\u00eame mat\u00e9riel. Un placement clair, une allocation locale de la m\u00e9moire et une mesure coh\u00e9rente des r\u00e9sultats sont d\u00e9cisifs. En regroupant les VM et les conteneurs \u00e0 proximit\u00e9 des n\u0153uds, on r\u00e9duit la latence et on augmente le d\u00e9bit. Je recommande de lancer un projet pilote sur un h\u00f4te, de tester l'affinit\u00e9 et la politique de m\u00e9moire et d'adopter les meilleurs param\u00e8tres. Ainsi, les performances augmentent petit \u00e0 petit, sans avoir \u00e0 acheter de nouveaux serveurs.<\/p>","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvre comment maximiser les performances de ton h\u00e9bergement et utiliser au mieux la cpu locality gr\u00e2ce \u00e0 Server Process Affinity et NUMA-Awareness.<\/p>","protected":false},"author":1,"featured_media":19618,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-19625","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"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":"68","_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":"Process Affinity","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":"19618","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/19625","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=19625"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/19625\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/19618"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=19625"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=19625"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=19625"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}