{"id":18945,"date":"2026-04-11T18:21:07","date_gmt":"2026-04-11T16:21:07","guid":{"rendered":"https:\/\/webhosting.de\/numa-balancing-server-memory-optimierung-hardware-numaflux\/"},"modified":"2026-04-11T18:21:07","modified_gmt":"2026-04-11T16:21:07","slug":"numa-balancering-server-hukommelse-optimering-hardware-numaflux","status":"publish","type":"post","link":"https:\/\/webhosting.de\/da\/numa-balancing-server-memory-optimierung-hardware-numaflux\/","title":{"rendered":"NUMA-balanceringsserver: Optimering af hukommelsesadgang til hosting-hardware"},"content":{"rendered":"<p>Jeg viser, hvordan <strong>NUMA-balanceringsserver<\/strong> p\u00e5 hosting-hardware str\u00f8mliner hukommelsesadgangen og reducerer ventetiden ved at binde processer og data til den relevante NUMA-node. Den afg\u00f8rende faktor er <strong>Optimering af hukommelsesadgang<\/strong> gennem lokal adgang, opgaveplacering og m\u00e5lrettet sidemigration til Linux-v\u00e6rter med mange kerner.<\/p>\n\n<h2>Centrale punkter<\/h2>\n\n<ul>\n  <li><strong>NUMA<\/strong> adskiller CPU'er og hukommelse i noder; lokale adgange giver <strong>lav<\/strong> Latenstid.<\/li>\n  <li><strong>Automatisk<\/strong> NUMA-balancering migrerer sider og placerer opgaver <strong>t\u00e6t p\u00e5 knudepunktet<\/strong>.<\/li>\n  <li><strong>VM-st\u00f8rrelse<\/strong> pr. node, ellers er der risiko for <strong>NUMA-nedbrydning<\/strong>.<\/li>\n  <li><strong>V\u00e6rkt\u00f8jer<\/strong> som numactl, lscpu, numad show <strong>Topologi<\/strong> og anvendelse.<\/li>\n  <li><strong>Indstilling<\/strong>C-states, node-interleaving fra, <strong>Store sider<\/strong>, affiniteter.<\/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\/04\/serverraum-speicheroptimum-5582.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Hvad NUMA er - og hvorfor det er vigtigt for hosting<\/h2>\n\n<p>NUMA opdeler et multiprocessorsystem i <strong>Knudepunkt<\/strong>, som hver is\u00e6r indeholder deres egne CPU'er og lokal hukommelse, hvilket g\u00f8r adgang i n\u00e6rheden hurtigere end fjernadgang. Mens UMA sender alle kerner til en f\u00e6lles sti, forhindrer NUMA flaskehalse p\u00e5 grund af <strong>lokal<\/strong> hukommelseskanaler pr. node. I hostingmilj\u00f8er med mange parallelle VM'er l\u00f8ber hvert millisekund af latenstid op, s\u00e5 hver eneste anmodning giver m\u00e5lbare fordele. Hvis du gerne vil have mere baggrundsinformation, kan du l\u00e6se mere om <a href=\"https:\/\/webhosting.de\/da\/blog-numa-arkitektur-server-ydeevne-hosting-hardware-optimering-infrastruktur\/\">NUMA-arkitektur<\/a>. For mig er \u00e9n ting sikker: Hvis du forst\u00e5r og bruger noder, f\u00e5r du mere b\u00e5ndbredde ud af den samme hardware.<\/p>\n\n<h2>Automatisk NUMA-balancering i Linux-kernen - s\u00e5dan fungerer det<\/h2>\n\n<p>Kernen scanner med j\u00e6vne mellemrum dele af adresserummet og \u201eunmaps\u201c sider, s\u00e5 en hinting-fejl kan opst\u00e5. <strong>optimal<\/strong> node synlig. Hvis fejlen opst\u00e5r, vurderer algoritmen, om det er v\u00e6rd at migrere siden eller flytte opgaven og undg\u00e5r un\u00f8dvendige bev\u00e6gelser. Migrering ved fejl bringer <strong>Data<\/strong> t\u00e6ttere p\u00e5 den udf\u00f8rende CPU, flytter NUMA-placering af opgaver processer t\u00e6ttere p\u00e5 deres hukommelse. Scanneren fordeler sit arbejde stykke for stykke, s\u00e5 overhead forbliver inden for den normale belastnings st\u00f8j. Dette resulterer i l\u00f8bende finjustering, der reducerer latenstiden uden at kr\u00e6ve h\u00e5rde pinning-regler.<\/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\/04\/memoryoptimization1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Optimering af hukommelsesadgang: lokal beats remote<\/h2>\n\n<p>Lokale adgange bruger <strong>Hukommelsescontroller<\/strong> af din egen node og minimere ventetiden p\u00e5 interconnect. Fjernadgang koster cyklusser via QPI\/UPI eller Infinity Fabric og minimerer dermed den effektive adgangstid. <strong>B\u00e5ndbredde<\/strong>. Et h\u00f8jt antal kerner forv\u00e6rrer denne effekt, fordi flere og flere kerner konkurrerer om de samme forbindelser. Jeg planl\u00e6gger derfor, at varm kode og aktive data samles p\u00e5 \u00e9n node. Hvis man ser bort fra dette, giver man procentpoint v\u00e6k, som bestemmer svartid eller timeout under spidsbelastninger.<\/p>\n\n<h2>VM-st\u00f8rrelser, NUMA trashing og host cropping<\/h2>\n\n<p>Jeg dimensionerer VM'er, s\u00e5 vCPU'er og RAM passer ind i en NUMA-node for at undg\u00e5 adgang p\u00e5 tv\u00e6rs af noder. Ofte giver 4-8 vCPU'er pr. node god performance. <strong>Antal hits<\/strong>, afh\u00e6ngigt af platformen og cache-hierarkiet. Store sider hj\u00e6lper ogs\u00e5, fordi TLB'en arbejder mere effektivt, og sideflytninger sker mindre hyppigt. Hvis det er n\u00f8dvendigt, s\u00e6tter jeg <strong>CPU-affinitet<\/strong> til latency-kritiske processer for at binde tr\u00e5de til passende kerner - for mere information se <a href=\"https:\/\/webhosting.de\/da\/server-cpu-affinity-hosting-optimering-kernelaffinity\/\">CPU-affinitet<\/a>. Hvis du spreder VM'er p\u00e5 tv\u00e6rs af noder, risikerer du NUMA trashing, dvs. en ping-pong af data og tr\u00e5de.<\/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\/04\/numa-balancing-server-memory-2948.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>V\u00e6rkt\u00f8jer i praksis: numactl, lscpu, numad<\/h2>\n\n<p>Med \u201elscpu\u201c l\u00e6ser jeg <strong>Topologi<\/strong> og NUMA-noder, herunder tildeling af kerner. \u201enumactl -hardware\u201c viser mig hukommelse pr. node og tilg\u00e6ngelige afstande, hvilket g\u00f8r det nemmere at evaluere stierne. D\u00e6monen \u201enumad\u201c overv\u00e5ger udnyttelsen og justerer dynamisk affiniteterne, n\u00e5r belastningscentrene flytter sig. Til faste scenarier bruger jeg \u201enumactl -cpunodebind\/-membind\u201c til eksplicit at fastg\u00f8re processer og hukommelse. P\u00e5 den m\u00e5de kombinerer jeg automatisk afbalancering med m\u00e5lrettede specifikationer og kontrollerer resultatet via \u201eperf\u201c, \u201enumastat\u201c og \u201e\/proc\u201c.<\/p>\n\n<h2>Hvordan jeg m\u00e5ler effekt: N\u00f8gletal og kommandoer<\/h2>\n\n<p>Jeg vurderer altid NUMA-Tuning via <strong>M\u00e5leserier<\/strong>, ikke efter mavefornemmelse. Tre indikatorer har vist deres v\u00e6rd: Forholdet mellem lokale og eksterne sidevisninger, migrationsrate og latenstidsfordeling (P95\/P99).<\/p>\n<ul>\n  <li><strong>Systemomfattende<\/strong>numastat\u201e viser lokale\/fjerne adgange og migrerede sider pr. node.<\/li>\n  <li><strong>Procesrelateret<\/strong>: \u201e\/proc\/\/numa_maps\u201c afsl\u00f8rer, hvor hukommelsen er placeret, og hvordan den blev fordelt.<\/li>\n  <li><strong>Planl\u00e6gningsvisning<\/strong>Cpus_allowed_list\u201e og real \u201cCpus_allowed\u201e tjekker, om bindingerne g\u00e6lder.<\/li>\n<\/ul>\n<pre><code># System-wide view\nnumastat\nnumastat -m\n\n# Procesrelateret distribution og bindinger\npid=$(pidof )\nnumastat -p \"$pid\"\ncat \/proc\/\"$pid\"\/numa_maps | head\ncat \/proc\/\"$pid\"\/status | grep -E 'Cpus_allowed_list|Mems_allowed_list'\ntaskset -cp \"$pid\"\n\n# Kernel-t\u00e6ller for NUMA-aktivitet\ngrep -E 'numa|migrate' \/proc\/vmstat\n\n# Sporingsh\u00e6ndelser til dybe analyser (aktiveres i kort tid)\necho 1 &gt; \/sys\/kernel\/debug\/tracing\/events\/mm\/enable\nsleep 5; cat \/sys\/kernel\/debug\/tracing\/trace | grep -i numa; echo 0 &gt; \/sys\/kernel\/debug\/tracing\/events\/mm\/enable\n<\/code><\/pre>\n<p>Jeg sammenligner i hvert tilf\u00e6lde <strong>A\/B<\/strong>: unbound vs. bound, automatisk balancering on\/off og forskellige VM slices. M\u00e5let er en klar reduktion i fjernadgang og migrationsst\u00f8j samt strammere P95\/P99-latenstider. F\u00f8rst n\u00e5r de m\u00e5lte v\u00e6rdier er stabilt bedre, vil jeg overtage tuningen.<\/p>\n\n<h2>BIOS- og firmwareindstillinger, der virkelig virker<\/h2>\n\n<p>Jeg sl\u00e5r \u201eNode Interleaving\u201c fra i BIOS, s\u00e5 NUMA-strukturen forbliver synlig, og kernen <strong>lokal<\/strong> kan planl\u00e6gge. Reducerede C-states stabiliserer latenstidstoppe, fordi kernerne er mindre tilb\u00f8jelige til at falde i dyb s\u00f8vn, hvilket sparer opv\u00e5gningstid. Jeg tildeler hukommelseskanaler symmetrisk, s\u00e5 hver node kan udnytte sin maksimale hukommelseskapacitet. <strong>B\u00e5ndbredde<\/strong> opn\u00e5et. Jeg tester prefetchers og RAS-funktioner med arbejdsbelastningsprofiler, da de hj\u00e6lper eller skader afh\u00e6ngigt af adgangsm\u00f8nsteret. Jeg m\u00e5ler hver \u00e6ndring i forhold til en baseline, og f\u00f8rst derefter indf\u00f8rer jeg indstillingen permanent.<\/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\/04\/NUMA_Balancing_Server_8345.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kernel- og sysctl-parametre, der g\u00f8r forskellen<\/h2>\n\n<p>Finjustering af kernen hj\u00e6lper mig, <strong>Overhead<\/strong> og <strong>Svartid<\/strong> af balanceren, s\u00e5 den matcher arbejdsbyrden. Jeg starter med konservative standardindstillinger og arbejder mig fremad trin for trin.<\/p>\n<ul>\n  <li><strong>kernel.numa_balancing<\/strong>Til\/fra for automatisk afbalancering. Jeg lader den v\u00e6re sl\u00e5et til ved bev\u00e6gelige laster; jeg sl\u00e5r den fra ved strengt fastgjorte specialtjenester som en test.<\/li>\n  <li><strong>kernel.numa_balancing_scan_delay_ms<\/strong>Ventetid f\u00f8r den f\u00f8rste scanning efter procesoprettelse. V\u00e6lg st\u00f8rre, hvis der k\u00f8rer mange kortvarige opgaver; mindre for langvarige tjenester, der kr\u00e6ver hurtig n\u00e6rhed.<\/li>\n  <li><strong>kernel.numa_balancing_scan_period_min_ms \/ _max_ms<\/strong>B\u00e5ndbredden p\u00e5 scanningsintervallerne. Smalle intervaller \u00f8ger reaktionsevnen, men ogs\u00e5 CPU-belastningen.<\/li>\n  <li><strong>kernel.numa_balancing_scan_size_mb<\/strong>Andel af adresserummet pr. scanning. For stor genererer hint-fejlstorme, for lille reagerer tr\u00e6gt.<\/li>\n  <li><strong>vm.zone_reclaim_mode<\/strong>: N\u00e5r der er knaphed p\u00e5 hukommelse, foretr\u00e6kker kernen lokal reclaim frem for fjernallokering. Til generelle hosting-arbejdsbelastninger lader jeg normalt <em>0<\/em>; Til meget forsinkelsesf\u00f8lsomme, lokale hukommelsestjenester tester jeg omhyggeligt h\u00f8jere v\u00e6rdier.<\/li>\n  <li><strong>Gennemsigtige store sider (THP)<\/strong>: Under \u201e\/sys\/kernel\/mm\/transparent_hugepage\/{enabled,defrag}\u201c s\u00e6tter jeg normalt til <em>madvise<\/em> og konservativ defragmentering. H\u00e5rde \u201ealtid\u201c-profiler giver TLB-fordele, men risikerer at g\u00e5 i st\u00e5 p\u00e5 grund af komprimering.<\/li>\n  <li><strong>sched_migration_cost_ns<\/strong>: Omkostningsestimat for opgavemigration. H\u00f8jere v\u00e6rdier d\u00e6mper omfordelingen af aggressive planl\u00e6ggere.<\/li>\n  <li><strong>cgroups cpuset<\/strong>Med <em>cpuset.cpus<\/em> og <em>cpuset.mems<\/em> Jeg adskiller tjenester rent efter node og s\u00f8rger for, at <strong>F\u00f8rste ber\u00f8ring<\/strong> forbliver inden for tilladte noder.<\/li>\n<\/ul>\n<pre><code># Eksempel: konservativ, men responsiv balancering\nsysctl -w kernel.numa_balancing=1\nsysctl -w kernel.numa_balancing_scan_delay_ms=30000\nsysctl -w kernel.numa_balancing_scan_period_min_ms=60000\nsysctl -w kernel.numa_balancing_scan_period_max_ms=300000\nsysctl -w kernel.numa_balancing_scan_size_mb=256\n\n# Brug THP omhyggeligt\necho madvise &gt; \/sys\/kernel\/mm\/transparent_hugepage\/enabled\necho defer &gt; \/sys\/kernel\/mm\/transparent_hugepage\/defrag\n<\/code><\/pre>\n<p>Det er stadig vigtigt: Skift kun \u00e9n justeringsskrue pr. testrunde, og test effekten i forhold til den samme belastningskurve. Det er s\u00e5dan, jeg adskiller \u00e5rsag og virkning.<\/p>\n\n<h2>Placer arbejdsbelastninger korrekt: Databaser, cacher, containere<\/h2>\n\n<p>Databaser nyder godt af, at bufferpuljer forbliver lokale pr. NUMA-node, og at tr\u00e5de er bundet t\u00e6t p\u00e5 deres heaps. I in-memory caches s\u00e6tter jeg sharding til <strong>Knudepunkt<\/strong> for at undg\u00e5 fjernhentninger. Containerplatforme modtager limits og anmodninger, s\u00e5 pods ikke hopper p\u00e5 tv\u00e6rs af noder. Til hukommelsesreservationer bruger jeg Huge Pages, som g\u00f8r det nemmere at gemme hotsets i <strong>Cacher<\/strong> passer. F\u00f8lgende tabel opsummerer strategier og typiske effekter i kompakt form.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Strategi<\/th>\n      <th>Brug<\/th>\n      <th>Forventet effekt<\/th>\n      <th>Hint<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>F\u00f8rste ber\u00f8ring<\/td>\n      <td>Databaser, JVM-heaps<\/td>\n      <td>Tildeling af lokal side<\/td>\n      <td>Udf\u00f8r initialisering p\u00e5 m\u00e5lknudepunkt<\/td>\n    <\/tr>\n    <tr>\n      <td>Interleave<\/td>\n      <td>Bredt fordelt belastning<\/td>\n      <td>J\u00e6vn fordeling<\/td>\n      <td>Ikke optimal til hotspots<\/td>\n    <\/tr>\n    <tr>\n      <td>Fastg\u00f8relse af opgaver<\/td>\n      <td>Latency-kritiske tjenester<\/td>\n      <td>Konstant latenstid<\/td>\n      <td>Mindre fleksibel under belastnings\u00e6ndringer<\/td>\n    <\/tr>\n    <tr>\n      <td>Automatisk afbalancering<\/td>\n      <td>Blandede arbejdsbelastninger<\/td>\n      <td>Dynamisk n\u00e6rhed<\/td>\n      <td>Afvejning af faste omkostninger mod fortjeneste<\/td>\n    <\/tr>\n    <tr>\n      <td>Store sider<\/td>\n      <td>Store heaps, caches<\/td>\n      <td>F\u00e6rre TLB-misses<\/td>\n      <td>Planl\u00e6g rene reservationer<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Virtualisering: Virtuel NUMA, scheduler og g\u00e6stetilpasning<\/h2>\n\n<p>Virtual NUMA sender v\u00e6rtstopologien til g\u00e6steoperativsystemet i en forenklet form, s\u00e5 f\u00f8rste ber\u00f8ring og <strong>Allocator<\/strong> arbejde fornuftigt. Hypervisor-planl\u00e6ggere er opm\u00e6rksomme p\u00e5 node-n\u00e6rhed, n\u00e5r de fordeler vCPU'er og migrerer VM'er. Jeg placerer sj\u00e6ldent store VM'er p\u00e5 tv\u00e6rs af flere noder, medmindre arbejdsbyrden spreder sig meget og drager fordel af interleave. I g\u00e6sten tilpasser jeg JVM'ernes eller databasernes heaps, s\u00e5 de forbliver lokale p\u00e5 synlige NUMA-noder. For hukommelsesstyring i g\u00e6sten kan man se p\u00e5 <a href=\"https:\/\/webhosting.de\/da\/virtuel-hukommelse-serveradministration-hosting-storage\/\">Virtuel hukommelse<\/a>, for at t\u00e6mme sidest\u00f8rrelser og swapping.<\/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\/04\/optimierung_hardware_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>PCIe-n\u00e6rhed: NVMe og NIC'er p\u00e5 de rigtige knudepunkter<\/h2>\n\n<p>Hvis det er muligt, tildeler jeg NVMe SSD'er og hurtige NIC'er til den node, hvor <strong>Arbejdsbyrde<\/strong> k\u00f8rer. Det forhindrer I\/O-anmodninger i at krydse interconnect og \u00f8ge ventetiden. Jeg binder multik\u00f8-NIC'er til kernes\u00e6t i en node med RSS\/RPS, s\u00e5 IRQ'erne forbliver lokale. For storage stacks er det v\u00e6rd at opdele tr\u00e5dpuljerne node for node. Hvis du er opm\u00e6rksom p\u00e5 dette, vil du m\u00e6rkbart reducere P99-latency og skabe plads til belastningstoppe.<\/p>\n\n<h2>IRQ og k\u00f8-affinitet i praksis<\/h2>\n\n<p>Jeg tjekker f\u00f8rst, hvilken <strong>NUMA-node<\/strong> enheder og pin-IRQ'er og k\u00f8er p\u00e5 passende vis. Dette sikrer, at datastiens lokalitet opretholdes.<\/p>\n<pre><code>#-enhed-til-node-kortl\u00e6gning\ncat \/sys\/class\/net\/eth0\/device\/numa_node\ncat \/sys\/block\/nvme0n1\/device\/numa_node\n\n# Indstil IRQ-affinitet specifikt (eksempel: kerner 0-7 i en node)\nirq=\necho 0-7 &gt; \/proc\/irq\/$irq\/smp_affinity_list\n\n# Bind NIC-k\u00f8er til kerner (RPS\/RFS)\nfor q in \/sys\/class\/net\/eth0\/queues\/rx-*; do echo 0-7 &gt; \"$q\"\/rps_cpus; done\nsysctl -w net.core.rps_sock_flow_entries=32768\nfor q in \/sys\/class\/net\/eth0\/queues\/rx-*; do echo 4096 &gt; \"$q\"\/rps_flow_cnt; done\n\n# Forbedre NVMe-k\u00f8affinitet\necho 2 &gt; \/sys\/block\/nvme0n1\/queue\/rq_affinity\ncat \/sys\/block\/nvme0n1\/queue\/scheduler # \"none\" preferred\n<\/code><\/pre>\n<p>\u201eJeg k\u00f8rer \u201cirqbalance\" med node awareness eller s\u00e6tter den til <strong>Undtagelser<\/strong> til hot-path afbrydelser. Resultatet er mere stabile ventetider, f\u00e6rre IRQ-hop p\u00e5 tv\u00e6rs af noder og en m\u00e5lbar stigning i lokale I\/O-hits.<\/p>\n\n<h2>Statisk binding vs. dynamisk afbalancering - den gyldne middelvej<\/h2>\n\n<p>Jeg bruger \u201etaskset\u201c og cgroups til at s\u00e6tte h\u00e5rde regler, n\u00e5r det er deterministisk <strong>Forsinkelse<\/strong> t\u00e6ller. Jeg lader automatisk NUMA-balancering v\u00e6re aktiv, n\u00e5r belastningen flytter sig, og jeg har brug for adaptiv n\u00e6rhed. En blanding fungerer ofte bedst: h\u00e5rde stifter til hotpaths, mere \u00e5bne gr\u00e6nser til hj\u00e6lpearbejde. Jeg tjekker regelm\u00e6ssigt, om migreringerne stiger m\u00e6rkbart, da det er tegn p\u00e5 d\u00e5rlig planl\u00e6gning. M\u00e5let er fortsat at v\u00e6lge data- og tr\u00e5dplaceringer p\u00e5 en s\u00e5dan m\u00e5de, at migrering forbliver sj\u00e6lden, men mulig.<\/p>\n\n<h2>NUMA i containere og Kubernetes<\/h2>\n\n<p>Jeg medbringer en beholder <strong>cpusets<\/strong> og <strong>Store sider<\/strong> p\u00e5 linje. Jeg tildeler pods\/containere til en NUMA-node ved at gemme konsistente CPU- og hukommelsesm\u00e6ngder. I orkestreringer indstiller jeg politikker, der favoriserer enkeltnode-tildelinger og dermed respekterer first touch.<\/p>\n<ul>\n  <li><strong>Container-k\u00f8rselstid<\/strong>: \u201e-cpuset-cpus\u201c og \u201e-cpuset-mems\u201c holder opgaver og hukommelse sammen; tildeler store sider som ressourcer.<\/li>\n  <li><strong>Topologi\/CPU Manager<\/strong>Strenge eller foretrukne tildelinger sikrer, at relaterede kerner og hukommelsesomr\u00e5der tildeles.<\/li>\n  <li><strong>Garanteret QoS<\/strong>Faste anmodninger\/gr\u00e6nser minimerer planl\u00e6ggerens omfordeling.<\/li>\n<\/ul>\n<p>Jeg opdeler bevidst sidevogne og hj\u00e6lpeprocesser til andre kerner <em>inden for<\/em> af den samme node, s\u00e5 hotpath forbliver uforstyrret, men ikke kommer ind i cross-node race.<\/p>\n\n<h2>Forst\u00e5else af CPU-topologier: CCD\/CCX, SNC og Cluster-on-Die<\/h2>\n\n<p>Nuv\u00e6rende server-CPU'er opdeler sokler i <strong>Underdom\u00e6ner<\/strong> med sine egne cacher og stier. Det tager jeg hensyn til, n\u00e5r jeg sk\u00e6rer i kerner\/heaps:<\/p>\n<ul>\n  <li><strong>AMD EPYC<\/strong>CCD\/CCX og \u201eNUMA per socket\u201c (NPS=1\/2\/4) har indflydelse p\u00e5, hvor fint NUMA er sk\u00e5ret. Flere noder (NPS=4) \u00f8ger lokaliteten, men kr\u00e6ver ren pinning.<\/li>\n  <li><strong>Intel<\/strong>Sub-NUMA Clustering (SNC2\/4) opdeler LLC i klynger. God til hukommelsesbundne belastninger, forudsat at operativsystemet og arbejdsbelastningen er node-aware.<\/li>\n  <li><strong>L3-n\u00e6rhed<\/strong>Jeg binder tr\u00e5de, der bruger de samme heaps, til den samme L3-klynge for at spare koh\u00e6rens-trafik og hops p\u00e5 tv\u00e6rs af klynger.<\/li>\n<\/ul>\n<p>Disse muligheder fungerer som en multiplikator: Hvis de bruges korrekt, \u00f8ger de <strong>Lokalitet<\/strong> Desuden \u00f8ger de - forkert konfigureret - fragmentering og fjerntrafik.<\/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\/04\/hosting-serverraum-7584.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Trin-for-trin introduktion og rollback-plan<\/h2>\n\n<p>Jeg introducerer aldrig \u201ebig bang\u201c NUMA-tuning. En sp\u00e6ndstig <strong>Planl\u00e6g<\/strong> undg\u00e5r overraskelser:<\/p>\n<ol>\n  <li><strong>Baseline<\/strong>Hardwaretopologi, P50\/P95\/P99-latency, throughput, numastat rate capture.<\/li>\n  <li><strong>Hypotese<\/strong>Formuler et specifikt m\u00e5l (f.eks. fjernadgang -30%, P99 -20%).<\/li>\n  <li><strong>Et skridt<\/strong>Skift kun \u00e9n justeringsskrue (f.eks. VM cut, cpuset, THP-politik, scanningsintervaller).<\/li>\n  <li><strong>Kanariefugl<\/strong>Test p\u00e5 5-10% af fl\u00e5den under reel belastning, hold rollback klar.<\/li>\n  <li><strong>V\u00e6rdians\u00e6ttelse<\/strong>Sammenlign m\u00e5lte v\u00e6rdier, definer regressionsvinduer, log bivirkninger.<\/li>\n  <li><strong>Udrulning<\/strong>Rul ud skaft for skaft, og m\u00e5l igen efter hvert skaft.<\/li>\n  <li><strong>Vedligeholdelse<\/strong>M\u00e5l igen hvert kvartal (kerne-, firmware- og arbejdsbelastningsopdateringer \u00e6ndrer det optimale).<\/li>\n<\/ol>\n<p>Det sikrer, at forbedringer er reproducerbare og kan vendes p\u00e5 f\u00e5 minutter i tilf\u00e6lde af en fejl.<\/p>\n\n<h2>Almindelige fejl - og hvordan du undg\u00e5r dem<\/h2>\n\n<p>Et typisk fejltrin er at aktivere node interleaving i BIOS, hvilket skjuler NUMA-topologien og <strong>Afbalancering<\/strong> sv\u00e6rere. Lige s\u00e5 ugunstigt: VM'er med flere vCPU'er, end en node tilbyder, plus urent reserverede store sider. Nogle administratorer s\u00e6tter alt p\u00e5 spidsen og mister dermed al fleksibilitet, n\u00e5r arbejdsbyrden skifter. Andre stoler helt p\u00e5 kernen, selvom h\u00e5rde hotspots kr\u00e6ver klare regler. Jeg registrerer m\u00e5leserier, genkender afvigelser tidligt og justerer ops\u00e6tningen og politikkerne trin for trin.<\/p>\n<ul>\n  <li><strong>THP \u201ealtid\u201c<\/strong> uden kontrol: Uplanlagt komprimering forstyrrer ventetiden. Jeg foretr\u00e6kker at bruge \u201emadvise\u201c og reservere store sider specifikt.<\/li>\n  <li><strong>vm.zone_reclaim_mode<\/strong> for aggressiv: Lokal genanvendelse kan g\u00f8re mere skade end gavn p\u00e5 det forkerte tidspunkt. M\u00e5l f\u00f8rst, sk\u00e6rp derefter.<\/li>\n  <li><strong>irqbalance blind<\/strong>Ukritiske IRQ'er flyttes p\u00e5 tv\u00e6rs af noder. Jeg indstiller undtagelser eller faste masker for hotpaths.<\/li>\n  <li><strong>Blanding af interleave + hard pinning<\/strong>Modstridende politikker skaber ping-pong. Jeg g\u00e5r ind for en klar linje for hver tjeneste.<\/li>\n  <li><strong>Urene cpusets<\/strong>Containere ser en node, men mapper hukommelsen til andre noder. Indstil altid \u201ecpuset.mems\u201c i overensstemmelse med CPU-s\u00e6ttet.<\/li>\n  <li><strong>Sub-NUMA-funktioner<\/strong> aktiveret, men ikke brugt: Flere noder uden planl\u00e6gning \u00f8ger fragmenteringen. T\u00e6nd kun efter test.<\/li>\n<\/ul>\n\n<h2>Kort opsummeret<\/h2>\n\n<p>NUMA Balancing Server bringer processer og data sammen p\u00e5 en m\u00e5lrettet m\u00e5de, hvilket g\u00f8r lokale adgange hyppigere og mere effektive. <strong>Forsinkelser<\/strong> bliver kortere. Med en passende VM-st\u00f8rrelse, ren BIOS-konfiguration og v\u00e6rkt\u00f8jer som numactl skabes der en klar topologi, som kernen udnytter. Virtuel NUMA, store sider og affiniteter supplerer den automatiske afbalancering i stedet for at erstatte den. Tilslutning af I\/O-enheder t\u00e6t p\u00e5 noder og brug af hotpaths eliminerer dyr fjernadgang. P\u00e5 denne m\u00e5de skaleres hosting-hardware p\u00e5lideligt, og hvert CPU-sekund giver mere <strong>nyttelast<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>**NUMA balanceringsserver** revolutionerer optimering af hukommelsesadgang p\u00e5 **hosting-hardware**. Reducer ventetiden og maksimer serverens ydeevne.<\/p>","protected":false},"author":1,"featured_media":18938,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-18945","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":"542","_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":"NUMA Balancing Server","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":"18938","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/18945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/comments?post=18945"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/posts\/18945\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media\/18938"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/media?parent=18945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/categories?post=18945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/da\/wp-json\/wp\/v2\/tags?post=18945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}