{"id":15663,"date":"2025-11-29T18:21:50","date_gmt":"2025-11-29T17:21:50","guid":{"rendered":"https:\/\/webhosting.de\/blog-numa-architektur-server-performance-hosting-hardware-optimierung-infrastruktur\/"},"modified":"2025-11-29T18:21:50","modified_gmt":"2025-11-29T17:21:50","slug":"blog-numa-architecture-serveur-performance-hebergement-materiel-optimisation-infrastructure","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/blog-numa-architektur-server-performance-hosting-hardware-optimierung-infrastruktur\/","title":{"rendered":"Architecture NUMA : pourquoi elle joue un r\u00f4le important dans les serveurs modernes"},"content":{"rendered":"<p>Le <strong>Architecture NUMA<\/strong> d\u00e9termine la vitesse \u00e0 laquelle les serveurs modernes fournissent de la m\u00e9moire aux threads et la capacit\u00e9 des charges de travail \u00e0 s'adapter en cas de forte sollicitation. Je montre pourquoi les acc\u00e8s \u00e0 la m\u00e9moire locale dominent la latence et la bande passante, comment les hyperviseurs utilisent NUMA et quels param\u00e8tres dans les machines virtuelles permettent d'obtenir des gains de performance directs.<\/p>\n\n<h2>Points centraux<\/h2>\n\n<p>Je r\u00e9sume bri\u00e8vement les principales conclusions et souligne les facteurs qui ont le plus d'impact dans les centres de donn\u00e9es.<\/p>\n<ul>\n  <li><strong>M\u00e9moire locale<\/strong> R\u00e9duit la latence et augmente le d\u00e9bit<\/li>\n  <li><strong>n\u0153ud NUMA<\/strong> Structurer efficacement les processeurs et la m\u00e9moire vive<\/li>\n  <li><strong>Taille du vCPU<\/strong> Adapter la taille du n\u0153ud par VM<\/li>\n  <li><strong>NUMA virtuel<\/strong> Transmettre au syst\u00e8me d'exploitation invit\u00e9<\/li>\n  <li><strong>R\u00e8gles de tension<\/strong> D\u00e9finir pour les besoins importants en RAM<\/li>\n<\/ul>\n<p>Je me concentre syst\u00e9matiquement sur <strong>Latence<\/strong> et la proximit\u00e9 des donn\u00e9es, car c'est l\u00e0 que se d\u00e9cide la performance du serveur. De grands sockets, de nombreux c\u0153urs et beaucoup de RAM ne servent pas \u00e0 grand-chose si les threads attendent constamment des zones de m\u00e9moire distantes. Je dimensionne les machines virtuelles de mani\u00e8re \u00e0 ce qu'elles s'adaptent \u00e0 un n\u0153ud NUMA et que l'allocation de m\u00e9moire reste locale. Je prends en charge les fonctionnalit\u00e9s de l'hyperviseur de mani\u00e8re cibl\u00e9e, au lieu de tout activer globalement. Je s\u00e9curise ainsi <strong>Mise \u00e0 l'\u00e9chelle<\/strong> sans surprises lors des pics de charge.<\/p>\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\/2025\/11\/numa-serverarchitektur-4831.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ce qui caract\u00e9rise vraiment NUMA<\/h2>\n\n<p>Je pense en <strong>N\u0153uds<\/strong>: Chaque n\u0153ud NUMA combine des c\u0153urs de processeur et une zone RAM locale avec des chemins d'acc\u00e8s tr\u00e8s courts. Si un thread trouve les donn\u00e9es dans le cache L1, L2 ou L3, tout fonctionne extr\u00eamement rapidement ; si l'ensemble de donn\u00e9es se trouve dans la RAM locale, la latence reste faible. Cependant, si le thread acc\u00e8de \u00e0 un autre n\u0153ud, le temps d'attente augmente et le d\u00e9bit diminue. Ce sont pr\u00e9cis\u00e9ment ces diff\u00e9rences qui font <strong>Non uniforme<\/strong> Acc\u00e8s m\u00e9moire d\u00e9sactiv\u00e9. J'organise donc les charges de travail de mani\u00e8re \u00e0 ce que la majeure partie des acc\u00e8s reste locale.<\/p>\n\n<h2>Pourquoi l'UMA atteint ses limites<\/h2>\n\n<p>UMA partage un <strong>chemin d'acc\u00e8s<\/strong> ce qui g\u00e9n\u00e8re des embouteillages lorsque le nombre de c\u0153urs augmente. Chaque c\u0153ur suppl\u00e9mentaire s'ajoute aux m\u00eames files d'attente et entre en concurrence pour la bande passante. Dans de nombreuses configurations anciennes, cela entra\u00eenait une accumulation de latence jusqu'\u00e0 ce que l'utilisation du CPU soit \u00e9lev\u00e9e, mais que l'application r\u00e9agisse lentement. Cela donne l'impression que le CPU est \u00e0 la limite de ses capacit\u00e9s, alors que le goulot d'\u00e9tranglement se situe en r\u00e9alit\u00e9 au niveau de l'acc\u00e8s \u00e0 la m\u00e9moire. NUMA r\u00e9sout pr\u00e9cis\u00e9ment ce probl\u00e8me. <strong>Blocages<\/strong> par des chemins locaux et une topologie en n\u0153uds.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/11\/numa_servermeeting_4027.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>NUMA vs UMA : aper\u00e7u des diff\u00e9rences<\/h2>\n\n<p>Je pr\u00e9sente volontiers les principales diff\u00e9rences dans un aper\u00e7u compact. <strong>Tableau<\/strong> fixe, afin que les d\u00e9cisions puissent \u00eatre prises plus rapidement. Cet aper\u00e7u montre ce qui est important en mati\u00e8re d'architecture, de latence et d'\u00e9volutivit\u00e9. Il m'aide \u00e0 dimensionner de nouveaux h\u00f4tes et \u00e0 rechercher des erreurs dans des environnements productifs. Ceux qui comprennent clairement la diff\u00e9rence entre l'acc\u00e8s local et l'acc\u00e8s \u00e0 distance prennent de meilleures d\u00e9cisions en mati\u00e8re de personnalisation des machines virtuelles et d'allocation de RAM. C'est pr\u00e9cis\u00e9ment l\u00e0 que se joue la diff\u00e9rence. <strong>Performance<\/strong> en charge.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Crit\u00e8re<\/th>\n      <th>NUMA<\/th>\n      <th>UMA<\/th>\n      <th>Effet pratique<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>acc\u00e8s \u00e0 la m\u00e9moire<\/td>\n      <td>Local ou distant<\/td>\n      <td>Uniforme<\/td>\n      <td>Les acc\u00e8s locaux sont plus rapides ; les acc\u00e8s distants entra\u00eenent une latence.<\/td>\n    <\/tr>\n    <tr>\n      <td>Mise \u00e0 l'\u00e9chelle<\/td>\n      <td>Tr\u00e8s bon avec des n\u0153uds<\/td>\n      <td>Limit\u00e9 t\u00f4t<\/td>\n      <td>Plus de c\u0153urs \u00e9voluent de mani\u00e8re plus fiable avec NUMA<\/td>\n    <\/tr>\n    <tr>\n      <td>Topologie<\/td>\n      <td>Plusieurs n\u0153uds<\/td>\n      <td>Pool uniforme<\/td>\n      <td>Une planification tenant compte de la topologie est n\u00e9cessaire<\/td>\n    <\/tr>\n    <tr>\n      <td>hyperviseur<\/td>\n      <td>NUMA virtuel disponible<\/td>\n      <td>Moins pertinent<\/td>\n      <td>Le syst\u00e8me d'exploitation invit\u00e9 peut planifier en tenant compte de NUMA<\/td>\n    <\/tr>\n    <tr>\n      <td>r\u00e9glage fin<\/td>\n      <td>vCPU\/RAM par n\u0153ud<\/td>\n      <td>R\u00e9glage global<\/td>\n      <td>Les machines virtuelles adapt\u00e9es aux n\u0153uds garantissent la stabilit\u00e9<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>NUMA dans les environnements virtuels<\/h2>\n\n<p>Je laisse l'hyperviseur g\u00e9rer les <strong>Topologie<\/strong> au syst\u00e8me d'exploitation invit\u00e9 afin que le planificateur et la gestion de la m\u00e9moire puissent planifier localement. Virtual NUMA montre \u00e0 l'invit\u00e9 les limites de ses n\u0153uds, ce qui permet aux bases de donn\u00e9es, aux JVM et aux travailleurs .NET d'organiser leurs tas et leurs threads de mani\u00e8re plus avantageuse. Cela me permet d'\u00e9viter les acc\u00e8s \u00e0 distance co\u00fbteux et de maintenir une latence stable. Dans les configurations sensibles, je combine cela avec une strat\u00e9gie de pinning coh\u00e9rente et une allocation fixe de RAM. Pour des temps de r\u00e9ponse extr\u00eamement courts, j'utilise en plus <a href=\"https:\/\/webhosting.de\/fr\/micro-latence-hebergement-optimisation-base-de-donnees-reseau-eclair\/\">H\u00e9bergement \u00e0 micro-latence<\/a> pour r\u00e9duire davantage la gigue.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/11\/numa-architektur-servertechnik-9381.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Meilleures pratiques pour la taille des machines virtuelles et l'allocation des processeurs<\/h2>\n\n<p>Je dimensionne <strong>vCPU<\/strong> de mani\u00e8re \u00e0 ce qu'une VM s'int\u00e8gre dans un n\u0153ud NUMA ou ne le touche que tr\u00e8s l\u00e9g\u00e8rement. Exemple : si un h\u00f4te dispose de deux n\u0153uds \u00e0 20 c\u0153urs, je planifie de pr\u00e9f\u00e9rence les VM avec 4 \u00e0 16 vCPU au sein d'un n\u0153ud. Au-del\u00e0, on risque des acc\u00e8s \u00e0 distance et des temps d'attente inutiles. Je r\u00e9partis la RAM de mani\u00e8re aussi statique que possible afin que le syst\u00e8me d'exploitation invit\u00e9 conserve ses pages en local. Pour les charges de travail \u00e0 forte composante single-thread, j'int\u00e8gre la bonne strat\u00e9gie de c\u0153urs et j'utilise des analyses telles que <a href=\"https:\/\/webhosting.de\/fr\/single-thread-vs-multi-core-webhosting-cpu-comparison-2025-efficiency\/\">Single-Thread vs. Multi-Core<\/a>.<\/p>\n\n<h2>Avantages concrets pour le mat\u00e9riel d'h\u00e9bergement<\/h2>\n\n<p>Gr\u00e2ce \u00e0 une planification NUMA rigoureuse, j'augmente la <strong>densit\u00e9<\/strong> par h\u00f4te, sans sacrifier les temps de r\u00e9ponse. Dans de nombreux centres de donn\u00e9es, cela permet d'exploiter nettement plus de machines virtuelles par socket, tout en garantissant la r\u00e9activit\u00e9 des applications. La r\u00e9duction de la latence a un impact direct sur l'exp\u00e9rience utilisateur et le d\u00e9bit par lots. Les co\u00fbts par charge de travail diminuent gr\u00e2ce \u00e0 une utilisation plus efficace du temps CPU et de la RAM. En choisissant judicieusement son mat\u00e9riel, on b\u00e9n\u00e9ficie en outre d'une technologie moderne. <a href=\"https:\/\/webhosting.de\/fr\/high-performance-webhosting-hardware-cpu-nvme-memory-performance-turbo-server\/\">Mat\u00e9riel d'h\u00e9bergement web haute performance<\/a> avec une bande passante m\u00e9moire \u00e9lev\u00e9e.<\/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\/2025\/11\/numa_techoffice_nacht9462.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Optimisation de la charge de travail : bases de donn\u00e9es, caches, conteneurs<\/h2>\n\n<p>Je veille \u00e0 ce que <strong>Bases de donn\u00e9es<\/strong> conserver leurs tas localement et calculer les threads de travail sur \u201e leur \u201c n\u0153ud. Pour les moteurs SQL, les caches en m\u00e9moire et les JVM, il est int\u00e9ressant d'attribuer de mani\u00e8re fixe les CPU et de r\u00e9server la m\u00e9moire. L'orchestration des conteneurs b\u00e9n\u00e9ficie des affinit\u00e9s entre n\u0153uds, afin que les pods utilisent les chemins d'acc\u00e8s \u00e0 la m\u00e9moire les plus courts. En cas d'E\/S intensives, je mise sur des attributions NVMe proches de NUMA afin de conserver les donn\u00e9es \u00e0 proximit\u00e9 des n\u0153uds. Les chemins d'acc\u00e8s restent ainsi courts et les <strong>Temps de r\u00e9action<\/strong> sympathique.<\/p>\n\n<h2>Surveillance et d\u00e9pannage avec NUMA<\/h2>\n\n<p>Je mesure <strong>Latence<\/strong> et les acc\u00e8s \u00e0 distance de mani\u00e8re cibl\u00e9e, au lieu de me concentrer uniquement sur les pourcentages d'utilisation du CPU. Des outils m'indiquent, pour chaque n\u0153ud, combien de pages sont stock\u00e9es \u00e0 distance et quels threads g\u00e9n\u00e8rent une pression sur la m\u00e9moire. Si les \u00e9checs \u00e0 distance augmentent, j'ajuste la taille du vCPU, les affinit\u00e9s ou l'allocation de RAM. Si le d\u00e9bit reste faible malgr\u00e9 des r\u00e9serves CPU \u00e9lev\u00e9es, cela est souvent d\u00fb aux chemins d'acc\u00e8s \u00e0 la m\u00e9moire. La visibilit\u00e9 au niveau des n\u0153uds est pour moi le moyen le plus rapide d'atteindre <strong>Causes<\/strong>, pas seulement aux sympt\u00f4mes.<\/p>\n\n<h2>NUMA Spanning : utilisation correcte<\/h2>\n\n<p>J'active <strong>Spanning<\/strong> Sp\u00e9cifiquement pour les VM ayant des besoins tr\u00e8s importants en RAM ou une bande passante exceptionnelle. La VM peut alors obtenir de la m\u00e9moire sur plusieurs n\u0153uds, ce qui rend possible les instances uniques avec une empreinte massive. Le prix \u00e0 payer est un acc\u00e8s distant occasionnel, que j'att\u00e9nue avec des affinit\u00e9s CPU et une plus grande part de localit\u00e9 de page. Pour les charges mixtes, je pr\u00e9f\u00e8re choisir plusieurs VM de taille moyenne plut\u00f4t qu'une tr\u00e8s grande instance. Ainsi, <strong>Planification<\/strong> dans la vie quotidienne.<\/p>\n\n<h2>Licences, densit\u00e9 et co\u00fbts r\u00e9els<\/h2>\n\n<p>Je note <strong>Co\u00fbts<\/strong> non pas au niveau de l'h\u00f4te, mais par charge de travail et par mois en euros. Lorsque NUMA augmente la densit\u00e9 des machines virtuelles, les co\u00fbts fixes par instance diminuent et les r\u00e9serves de puissance augmentent. Cela a un impact sur les licences par c\u0153ur ainsi que sur les co\u00fbts d'assistance et d'\u00e9nergie. En r\u00e9duisant les acc\u00e8s \u00e0 distance, vous raccourcissez le temps de calcul et \u00e9conomisez de l'\u00e9nergie pour une m\u00eame t\u00e2che. Au final, ce qui compte, c'est le <strong>Bilan global<\/strong> en euros par r\u00e9sultat, et non pas seulement en euros par serveur.<\/p>\n\n<h2>Bien comprendre la topologie mat\u00e9rielle et les interconnexions<\/h2>\n\n<p>Je fais r\u00e9f\u00e9rence \u00e0 la physique <strong>Topologie<\/strong> dans ma planification. Les serveurs modernes utilisent des conceptions de processeurs en plusieurs parties et relient des chiplets ou des puces via des interconnexions. Cela signifie que tous les c\u0153urs n'ont pas le m\u00eame chemin vers chaque module RAM, et m\u00eame au sein d'un socket, il existe des chemins pr\u00e9f\u00e9rentiels. Plus le trafic passe par les liaisons inter-sockets, plus les co\u00fbts augmentent. <strong>Latence<\/strong> et la charge de coh\u00e9rence. Je v\u00e9rifie donc combien de canaux m\u00e9moire sont actifs par n\u0153ud, si tous les emplacements DIMM sont \u00e9quip\u00e9s de mani\u00e8re sym\u00e9trique et comment les n\u0153uds sont connect\u00e9s dans la carte m\u00e8re. Les fonctionnalit\u00e9s Sub-NUMA, qui divisent les n\u0153uds en domaines plus petits, peuvent d\u00e9sencombrer les points chauds lorsque les charges de travail sont clairement segment\u00e9es. J'observe \u00e9galement la <strong>Topologie L3<\/strong>: Si les threads et leurs donn\u00e9es se trouvent dans diff\u00e9rents domaines de cache, le transfert de cache seul entra\u00eene une perte de performance notable. Un simple test de bande passante et un aper\u00e7u de la topologie permettent de d\u00e9terminer rapidement si la plateforme offre la localit\u00e9 attendue ou si les interconnexions deviennent un goulot d'\u00e9tranglement.<\/p>\n\n<h2>Options du micrologiciel et du BIOS avec effet<\/h2>\n\n<p>Je v\u00e9rifie dans le BIOS que <strong>Entrelacement de n\u0153uds<\/strong> est d\u00e9sactiv\u00e9 afin que la structure NUMA reste visible. J'utilise le clustering Sub-NUMA ou des modes comparables de mani\u00e8re cibl\u00e9e lorsque les charges de travail comportent de nombreuses t\u00e2ches de taille moyenne clairement s\u00e9par\u00e9es. Pour obtenir des latences coh\u00e9rentes, je choisis des profils \u00e9nerg\u00e9tiques ax\u00e9s sur les performances et r\u00e9duis les <strong>\u00c9tats C<\/strong> et \u00e9vite le stationnement agressif. J'optimise l'\u00e9quipement de m\u00e9moire pour une pleine <strong>Bande passante du canal m\u00e9moire<\/strong>; les configurations DIMM asym\u00e9triques ont un impact direct sur le d\u00e9bit et le temps d'attente. Je v\u00e9rifie \u00e9galement les options Prefetcher et RAS : certains m\u00e9canismes de protection augmentent la latence sans servir la charge de travail. Important : je teste chaque ajustement du BIOS avec une charge r\u00e9elle, car les micro-effets dus aux caches et aux interconnexions n'apparaissent souvent que sous pression.<\/p>\n\n<h2>Optimisation du syst\u00e8me d'exploitation invit\u00e9 et du runtime : du premier contact aux pages g\u00e9antes<\/h2>\n\n<p>Dans Gast, j'utilise <strong>Premi\u00e8re touche<\/strong>-Allocation \u00e0 mon avantage : les threads initialisent \u201e leur \u201c m\u00e9moire afin que les pages soient cr\u00e9\u00e9es localement. Sous Linux, j'active ou d\u00e9sactive le r\u00e9\u00e9quilibrage NUMA automatique en fonction de la charge de travail ; les syst\u00e8mes proches des bases de donn\u00e9es b\u00e9n\u00e9ficient souvent d'une connexion stable, tandis que les travailleurs Web distribu\u00e9s peuvent supporter de faibles migrations. Avec numactl ou Task-Pinning, je connecte les services aux n\u0153uds et d\u00e9finis <strong>membind<\/strong>-Directives. <strong>Pages g\u00e9antes<\/strong> R\u00e9duire la pression TLB ; pour les bases de donn\u00e9es critiques en termes de latence, je privil\u00e9gie les pages statiques volumineuses et la m\u00e9moire chaude (Pre-Touch) afin d'\u00e9viter les pics de d\u00e9fauts de page. J'utilise les pages volumineuses transparentes en mode \u201e madvise \u201c ou je les d\u00e9sactive si elles g\u00e9n\u00e8rent des latences de d\u00e9fragmentation, en fonction du moteur. Je contr\u00f4le <strong>Affinit\u00e9s IRQ<\/strong> et distribue les interruptions r\u00e9seau et NVMe aux n\u0153uds appropri\u00e9s ; RPS\/XPS et les files d'attente multiples aident \u00e0 maintenir la coh\u00e9rence des chemins de donn\u00e9es. Sous Windows, j'utilise des groupes de processeurs et Soft-NUMA dans la pile, je veille \u00e0 ce que les pages soient verrouill\u00e9es en m\u00e9moire pour les services gourmands en m\u00e9moire et j'active le GC serveur dans .NET. Pour les JVM, j'utilise des heuristiques NUMA, des tas pr\u00e9-touch\u00e9s et je contr\u00f4le l'affinit\u00e9 des threads afin que le GC et les workers utilisent les m\u00eames n\u0153uds.<\/p>\n\n<h2>Aligner correctement les param\u00e8tres sp\u00e9cifiques \u00e0 l'hyperviseur<\/h2>\n\n<p>Je passe le <strong>Topologie vNUMA<\/strong> \u00e0 la structure physique. Je s\u00e9lectionne les param\u00e8tres \u201e Sockets \u201c, \u201e Cores per Socket \u201c et \u201e Threads per Core \u201c de mani\u00e8re \u00e0 ce que l'hyperviseur ne divise pas la VM en n\u0153uds. Pour les instances sensibles \u00e0 la latence, je r\u00e9serve de la RAM afin d'\u00e9viter le ballooning et le swapping, et je s\u00e9curise les ressources pCPU via l'affinit\u00e9 ou des options de planification appropri\u00e9es. Attention lors de l'ajout \u00e0 chaud de CPU ou de m\u00e9moire : de nombreuses plateformes d\u00e9sactivent ainsi vNUMA dans l'invit\u00e9, ce qui entra\u00eene des acc\u00e8s \u00e0 distance cach\u00e9s. Je planifie la migration en direct de mani\u00e8re \u00e0 ce que les h\u00f4tes cibles aient une topologie NUMA compatible, et je laisse aux VM le temps, apr\u00e8s la migration, de <strong>Localisation de la page<\/strong> (pr\u00e9-touch, pr\u00e9chauffage). Dans les environnements KVM, j'utilise les options de r\u00e9glage NUMA et cpuset-Cgroups ; dans d'autres hyperviseurs, des outils tels que exstop permettent de visualiser en temps r\u00e9el la r\u00e9partition des vCPU et les hits des n\u0153uds.<\/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\/2025\/11\/numa_server_workspace_8721.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ne gaspillez pas la localit\u00e9 PCIe et E\/S<\/h2>\n\n<p>Je classe <strong>NVMe<\/strong>-Les lecteurs, les HBA et les NIC sont attribu\u00e9s au n\u0153ud sur lequel s'ex\u00e9cutent les threads de calcul. Je lie les files d'attente SR-IOV ou vNIC aux c\u0153urs du m\u00eame n\u0153ud et contr\u00f4le les interruptions en cons\u00e9quence. Pour les d\u00e9bits de paquets \u00e9lev\u00e9s, je fais \u00e9voluer les files d'attente de r\u00e9ception\/transmission et les r\u00e9partis de mani\u00e8re coh\u00e9rente sur les c\u0153urs locaux. Pour les piles de stockage, je veille \u00e0 ce que les threads de travail pour les soumissions et les ach\u00e8vements d'E\/S fonctionnent sur le m\u00eame n\u0153ud afin que le chemin d'acc\u00e8s aux donn\u00e9es ne traverse pas l'interconnexion. Je planifie \u00e9galement le multipathing et le RAID logiciel en fonction des n\u0153uds ; un chemin \u201e plus court \u201c l'emporte presque toujours sur un chemin \u201e plus large \u201c avec des acc\u00e8s externes. Cela me permet de r\u00e9duire la gigue et d'apporter sous la charge d'E\/S la <strong>temps CPU<\/strong> l\u00e0 o\u00f9 elle a un effet.<\/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\/2025\/11\/numa-serverrack-7412.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Planification des capacit\u00e9s, surengagement et fonctionnalit\u00e9s m\u00e9moire<\/h2>\n\n<p>Je pr\u00e9f\u00e8re ex\u00e9cuter les charges de travail orient\u00e9es latence sans <strong>Overcommit<\/strong> sur la RAM et mod\u00e9r\u00e9ment sur le vCPU. Le ballonage, la compression et l'\u00e9change d'hyperviseur g\u00e9n\u00e8rent des acc\u00e8s externes ou des pics de d\u00e9fauts de page, ce que je souhaite justement \u00e9viter. Le partage transparent de pages est inefficace dans de nombreuses configurations et peut masquer la v\u00e9ritable localit\u00e9. Je calibre le m\u00e9lange des VM de mani\u00e8re \u00e0 ce que plusieurs instances gourmandes en bande passante m\u00e9moire n'entrent pas en collision sur le m\u00eame n\u0153ud. Pour les moteurs en m\u00e9moire, je pr\u00e9vois une marge g\u00e9n\u00e9reuse. <strong>R\u00e9servations<\/strong> et, lorsque cela s'av\u00e8re utile, des pages volumineuses dans l'invit\u00e9 que l'hyperviseur peut transmettre. Ainsi, le taux de r\u00e9ussite TLB et les temps d'acc\u00e8s restent pr\u00e9visibles.<\/p>\n\n<h2>Migration en direct et haute disponibilit\u00e9<\/h2>\n\n<p>Je tiens compte du fait qu'une <strong>Migration<\/strong> Je d\u00e9truis temporairement la localisation lat\u00e9rale d'une VM. Apr\u00e8s le transfert, je r\u00e9chauffe les piles critiques et laisse les t\u00e2ches en arri\u00e8re-plan reconstruire les hotsets. Je planifie les h\u00f4tes cibles avec une topologie NUMA similaire afin de ne pas avoir \u00e0 red\u00e9couper vNUMA. Pour les cas HA avec du mat\u00e9riel h\u00e9t\u00e9rog\u00e8ne, je d\u00e9finis des politiques : soit j'accepte une latence temporairement plus \u00e9lev\u00e9e, soit je donne la priorit\u00e9 aux h\u00f4tes avec une taille de n\u0153ud compatible. Il est important d'observer apr\u00e8s la migration : si les proportions de pages distantes augmentent, j'ajuste les affinit\u00e9s ou je d\u00e9clenche le pr\u00e9-faute jusqu'\u00e0 ce que le <strong>Localit\u00e9<\/strong> \u00e0 nouveau.<\/p>\n\n<h2>Mod\u00e8les de diagnostic pratiques<\/h2>\n\n<p>Je reconnais les probl\u00e8mes NUMA typiques \u00e0 quelques signes : le CPU \u201e chauffe \u201c, mais le <strong>Instructions par cycle<\/strong> restent faibles ; la latence varie par vagues ; certains threads bloquent les acc\u00e8s \u00e0 la m\u00e9moire, m\u00eame si les c\u0153urs sont libres. Dans ce cas, je v\u00e9rifie les acc\u00e8s \u00e0 distance, l'utilisation de l'interconnexion, les erreurs TLB et la r\u00e9partition des threads actifs par n\u0153ud. Je corr\u00e8le la charge d'interruption avec les c\u0153urs qui supportent l'application et je v\u00e9rifie si les caches entre les n\u0153uds sont constamment invalid\u00e9s. Un simple contr\u00f4le consiste \u00e0 r\u00e9duire la VM \u00e0 un n\u0153ud : si les latences diminuent imm\u00e9diatement, la cause \u00e9tait le spanning ou la planification. De m\u00eame, des tests d\u00e9di\u00e9s r\u00e9v\u00e8lent la bande passante RAM par n\u0153ud et montrent si l'\u00e9quipement DIMM ou les options BIOS ralentissent le syst\u00e8me.<\/p>\n\n<h2>Liste de contr\u00f4le pratique<\/h2>\n\n<ul>\n  <li>Comprendre la topologie : n\u0153uds, canaux m\u00e9moire, mappage PCIe, domaines de cache<\/li>\n  <li>V\u00e9rifier le BIOS : Node Interleaving d\u00e9sactiv\u00e9, profil \u00e9nerg\u00e9tique Performance, C-States plat<\/li>\n  <li>R\u00e9duire les VM : vCPU par VM \u2264 taille du n\u0153ud, vNUMA correct, tenir compte de l'ajout \u00e0 chaud<\/li>\n  <li>S\u00e9curiser la RAM : r\u00e9servations pour les charges de travail \u00e0 latence, pages g\u00e9antes lorsque cela est pertinent<\/li>\n  <li>D\u00e9finir l'affinit\u00e9 : lier les threads, les IRQ et les files d'attente d'E\/S au m\u00eame n\u0153ud<\/li>\n  <li>Conteneurs\/pods : utiliser l'affinit\u00e9 des n\u0153uds, le gestionnaire CPU et la reconnaissance de la topologie<\/li>\n  <li>Spanning uniquement de mani\u00e8re cibl\u00e9e : accompagner les grandes instances avec des politiques et une surveillance<\/li>\n  <li>Planifier la migration : topologie cible adapt\u00e9e, pr\u00e9-touch des tas, observer la localit\u00e9<\/li>\n  <li>Renforcer la surveillance : acc\u00e8s \u00e0 distance, bande passante par n\u0153ud, utilisation de l'interconnexion<\/li>\n  <li>Tests r\u00e9guliers : contr\u00f4les de bande passante\/latence apr\u00e8s les changements de micrologiciel ou d'h\u00f4te<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>D\u00e9couvrez comment l'architecture NUMA r\u00e9volutionne les performances des serveurs et pourquoi elle est essentielle dans le mat\u00e9riel d'h\u00e9bergement moderne. D\u00e9couvrez les meilleures pratiques et des conseils d'optimisation.<\/p>","protected":false},"author":1,"featured_media":15656,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[922],"tags":[],"class_list":["post-15663","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologie"],"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":"2440","_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":null,"_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":"NUMA-Architektur","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":"15656","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/15663","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=15663"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/15663\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/15656"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=15663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=15663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=15663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}