{"id":21042,"date":"2026-08-27T08:32:23","date_gmt":"2026-08-27T06:32:23","guid":{"rendered":"https:\/\/webhosting.de\/irq-balance-linux-konfigurieren-server\/"},"modified":"2026-08-27T08:32:23","modified_gmt":"2026-08-27T06:32:23","slug":"konfigurera-irq-balans-i-linux-pa-en-server","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/irq-balance-linux-konfigurieren-server\/","title":{"rendered":"S\u00e5 h\u00e4r konfigurerar du IRQ Balance korrekt i Linux: En praktisk guide"},"content":{"rendered":"<p>IRQ Balance styr f\u00f6rdelningen av h\u00e5rdvaruavbrott mellan CPU-k\u00e4rnorna i Linux och avg\u00f6r d\u00e4rmed om n\u00e4tverksbelastningen f\u00f6rdelas j\u00e4mnt eller om enskilda k\u00e4rnor bromsas upp. Jag visar dig hur du anv\u00e4nder irqbalance p\u00e5 ett m\u00e5linriktat s\u00e4tt, n\u00e4r jag byter till manuell IRQ-affinitet och vilka inst\u00e4llningar som \u00e4r l\u00e4mpliga p\u00e5 servrar med h\u00f6g <strong>n\u00e4tverksbelastning<\/strong> verkligen betyder n\u00e5got.<\/p>\n\n<h2>Centrala punkter<\/h2>\n<p>Innan jag g\u00e5r in p\u00e5 detaljerna sammanfattar jag de viktigaste besluten som p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt har hj\u00e4lpt mig i projekt med h\u00f6g I\/O-belastning. Jag anser att automatisk f\u00f6rdelning via irqbalance \u00e4r en bra utg\u00e5ngspunkt, m\u00e4ter effekten och justerar selektivt. Vid deterministiska arbetsbelastningar kopplar jag enskilda IRQ:er manuellt till specifika k\u00e4rnor och utesluter \u00f6vriga CPU:er fr\u00e5n den automatiska f\u00f6rdelningen. Jag tar h\u00e4nsyn till NUMA-n\u00e4rhet redan i ett tidigt skede, eftersom det minskar latensen och s\u00e4kerst\u00e4ller genomstr\u00f6mningen. Med tydlig \u00f6vervakning uppt\u00e4cker jag flaskhalsar snabbare och reglerar dem utan on\u00f6diga <strong>Risker<\/strong>.<\/p>\n<p>Den h\u00e4r listan visar vad jag l\u00e4gger s\u00e4rskilt stor vikt vid n\u00e4r jag g\u00f6r inst\u00e4llningarna:<\/p>\n<ul>\n  <li><strong>Automatisk<\/strong> F\u00f6rst: aktivera irqbalance, m\u00e4ta effekten<\/li>\n  <li><strong>affinitet<\/strong> m\u00e5lmedvetet: l\u00e5sa kritiska IRQ:er, minska jitter<\/li>\n  <li><strong>F\u00f6rbjudna processorer<\/strong>: H\u00e5ll utrymme ledigt f\u00f6r apptr\u00e5dar<\/li>\n  <li><strong>NUMA<\/strong> Observera: H\u00e5ll IRQ:erna n\u00e4ra minnesnoden<\/li>\n  <li><strong>\u00d6vervakning<\/strong>: Kontrollera \/proc\/interrupts och latenser<\/li>\n<\/ul>\n\n<h2>IRQ-grunderna i korthet<\/h2>\n<p>En avbrottsbeg\u00e4ran (IRQ) \u00e4r en signal som h\u00e5rdvaran anv\u00e4nder f\u00f6r att \u00f6verl\u00e4mna arbete till CPU:n och d\u00e4rmed avbryta en p\u00e5g\u00e5ende uppgift. Om f\u00f6r m\u00e5nga av dessa signaler n\u00e5r samma k\u00e4rna \u00f6kar belastningen d\u00e4r och svarstiden blir l\u00e5ngsam, medan andra k\u00e4rnor f\u00f6rblir outnyttjade; det \u00e4r precis det jag vill \u00e5stadkomma med <strong>Distribution<\/strong> undvika. irqbalance f\u00f6rdelar dessa IRQ:er dynamiskt \u00f6ver flera k\u00e4rnor och utv\u00e4rderar systemets tillst\u00e5nd med j\u00e4mna mellanrum. Jag tittar f\u00f6rst p\u00e5 <code>\/proc\/avbrott<\/code> och se i kolumnerna hur m\u00e5nga IRQ:er som kommer in per CPU. Om enskilda kolumner blir f\u00f6r stora justerar jag aktivt och minskar d\u00e4rmed on\u00f6diga <strong>Hotspots<\/strong>.<\/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\/2026\/08\/linux-irq-guide-4513.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Automatisk f\u00f6rdelning med irqbalance<\/h2>\n<p>P\u00e5 moderna distributioner startar jag med tj\u00e4nsten irqbalance, som som standard periodvis justerar IRQ-f\u00f6rdelningen. Jag aktiverar den med <code>systemctl enable --now irqbalance<\/code> och kontrollerar statusen innan jag g\u00e5r in djupare; p\u00e5 s\u00e5 s\u00e4tt utnyttjar jag det befintliga <strong>Automatisk<\/strong>. Konfigurationsfilerna finns, beroende p\u00e5 system, i <code>\/etc\/sysconfig\/irqbalance<\/code> eller . <code>\/etc\/default\/irqbalance<\/code>, d\u00e4r kan jag utesluta CPU:er eller IRQ:er. S\u00e4rskilt anv\u00e4ndbar \u00e4r variabeln <code>IRQBALANCE_BANNED_CPUS<\/code> som en 64-bitarsmask f\u00f6r att reservera definierade k\u00e4rnor f\u00f6r applikationer. Den som vill f\u00f6rdjupa sig i praktiska exempel hittar h\u00e4r en kortfattad introduktion till <a href=\"https:\/\/webhosting.de\/sv\/server-irq-balansering-optimering-av-naetverksprestanda-datacenter\/\">N\u00e4tverksprestanda<\/a>, som jag ofta h\u00e4nvisar till i workshoppar och anv\u00e4nder i projekt.<\/p>\n\n<h2>S\u00e4ker implementering av manuell IRQ-affinitet<\/h2>\n<p>Om arbetsbelastningar \u00e4r mycket k\u00e4nsliga f\u00f6r jitter eller om vissa k\u00e4rnor ska h\u00e5llas fria uteslutande f\u00f6r processer i anv\u00e4ndarutrymmet, st\u00e4ller jag in IRQ-affinitet manuellt. F\u00f6r detta skriver jag in bitmasker enligt <code>\/proc\/irq\/<em>IRQ-NUMMER<\/em>\/smp_affinity<\/code> och fastst\u00e4ller p\u00e5 vilka k\u00e4rnor en avbrottsh\u00e4ndelse f\u00e5r k\u00f6ras; det g\u00f6r det m\u00f6jligt att planera <strong>Beteende<\/strong>. F\u00f6rst tar jag reda p\u00e5 de relevanta IRQ-numren med <code>grep<\/code> p\u00e5 <code>\/proc\/avbrott<\/code>. N\u00e4r det g\u00e4ller n\u00e4tverksenheter kopplar jag ofta RX\/TX-k\u00f6er till k\u00e4rnor som ligger n\u00e4ra apptr\u00e5darna, medan jag h\u00e5ller andra k\u00e4rnor fria. Denna korta artikel sammanfattar bra bakgrundsinformation om denna metod <a href=\"https:\/\/webhosting.de\/sv\/server-irq-affinity-multicore-naetverksoptimering-prestanda\/\">Guide till IRQ-affinitet<\/a>, som jag regelbundet anv\u00e4nder som utg\u00e5ngspunkt.<\/p>\n<p>Tabellen nedan visar vanliga bitmasker och vad de betyder. Jag anv\u00e4nder dessa exempel f\u00f6r att snabbt och med f\u00e5 fel st\u00e4lla in konfigurationer och sedan kontrollera effekten med <code>\/proc\/avbrott<\/code> till <strong>verifiera<\/strong>.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>M\u00e5l<\/th>\n      <th>Exempel p\u00e5 mask (hex)<\/th>\n      <th>k\u00e4rnor<\/th>\n      <th>Kommentar<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Endast CPU0<\/td>\n      <td>0x1<\/td>\n      <td>0<\/td>\n      <td>Enkel test, l\u00e5g <strong>spridning<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>Endast CPU1<\/td>\n      <td>0x2<\/td>\n      <td>1<\/td>\n      <td>Avskiljer IRQ:er fr\u00e5n CPU0, minskar <strong>Interferens<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>CPU0\u2013CPU1<\/td>\n      <td>0x3<\/td>\n      <td>0\u20131<\/td>\n      <td>F\u00f6rdelat p\u00e5 tv\u00e5 k\u00e4rnor, l\u00e4tt <strong>Avlastning<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>CPU2\u2013CPU3<\/td>\n      <td>0xC<\/td>\n      <td>2-3<\/td>\n      <td>Anv\u00e4ndbart n\u00e4r 0\u20131 g\u00e4ller f\u00f6r apptr\u00e5dar <strong>fri<\/strong> stanna<\/td>\n    <\/tr>\n    <tr>\n      <td>CPU0\u2013CPU3<\/td>\n      <td>0xF<\/td>\n      <td>0\u20133<\/td>\n      <td>Bred spridning \u00f6ver 4 k\u00e4rnor, blandad <strong>Last<\/strong><\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/IRQ_Linux_Konferenz_3235.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>M\u00e4tning: L\u00e4sa \/proc\/interrupts korrekt<\/h2>\n<p>Jag \u00f6ppnar filen <code>\/proc\/avbrott<\/code> och ser en IRQ per rad samt r\u00e4knarna per CPU i varje kolumn; det visar omedelbart obalanser <strong>synlig<\/strong>. Om en kolumn v\u00e4xer betydligt snabbare \u00e4n andra, koncentreras belastningen d\u00e4r. D\u00e5 kontrollerar jag vilken drivrutin som \u00e4r inblandad och om RSS\/RPS redan har f\u00f6rdelats. Dessutom startar jag irqbalance tillf\u00e4lligt i f\u00f6rgrunden med fels\u00f6kningsutdata f\u00f6r att f\u00f6rst\u00e5 dess beslut och undvika felbed\u00f6mningar. Efter varje \u00e4ndring kontrollerar jag r\u00e4knarna p\u00e5 nytt och m\u00e4ter latensen under belastning, s\u00e5 att jag kan bel\u00e4gga effekterna och undvika on\u00f6diga <strong>Risker<\/strong> kan undvika.<\/p>\n\n<h2>CPU-isolering och f\u00f6rbjudna masker<\/h2>\n<p>Jag st\u00e4ller in <code>IRQBALANCE_BANNED_CPUS<\/code>, f\u00f6r att konsekvent undanta vissa k\u00e4rnor fr\u00e5n den automatiska f\u00f6rdelningen; p\u00e5 s\u00e5 s\u00e4tt h\u00e5ller jag resurser fria f\u00f6r app-tr\u00e5dar. I nyare konfigurationer anv\u00e4nder jag dessutom <code>IRQBALANCE_BANNED_IRQS<\/code>, om enskilda enheter ska k\u00f6ras sj\u00e4lvst\u00e4ndigt p\u00e5 en k\u00e4rna; detta minskar st\u00f6rningar f\u00f6r k\u00e4nsliga <strong>Arbetsbelastning<\/strong>. I scenarier med l\u00e5g latens inaktiverar jag irqbalance medvetet och tilldelar IRQ:er statiskt, s\u00e5 att ingen omf\u00f6rdelning st\u00f6r. Den som vill f\u00f6rst\u00e5 CPU-tilldelningen vid avbrottshantering b\u00e4ttre hittar anv\u00e4ndbar bakgrundsinformation om <a href=\"https:\/\/webhosting.de\/sv\/server-avbrottshantering-optimering-av-cpu-prestanda-7342\/\">Hantering av avbrott<\/a> p\u00e5 servrar. Det viktiga \u00e4r fortfarande: m\u00e4ta f\u00f6rst, fastst\u00e4lla sedan och \u00e5terigen kontrollera effekten f\u00f6r att undvika \u00f6verraskningar i <strong>Drift<\/strong> som ska undvikas.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq-balance-linux-guide-setup-3458.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>NUMA-aspekter och n\u00e4rhet<\/h2>\n<p>P\u00e5 NUMA-system ser jag till att IRQ:er i m\u00f6jligaste m\u00e5n dirigeras till k\u00e4rnorna i den NUMA-nod d\u00e4r de aktuella uppgifterna finns i minnet; detta minskar latensen och \u00f6kar <strong>Genomstr\u00f6mning<\/strong>. Jag kombinerar detta med CPU-affinitet f\u00f6r applikationen, s\u00e5 att tr\u00e5dar och avbrott k\u00f6rs lokalt i f\u00f6rh\u00e5llande till varandra. irqbalance fungerar bra p\u00e5 NUMA, men vid behov justerar jag med banned-masker. Det \u00e4r viktigt att inte sprida belastningen \u00f6ver noder n\u00e4r den \u00e4nd\u00e5 kan h\u00e5llas lokalt. Den som uppr\u00e4tth\u00e5ller denna n\u00e4rhet f\u00e5r konstanta svarstider och sparar v\u00e4rdefull <strong>Cache<\/strong>-Resurser.<\/p>\n\n<h2>N\u00e4tverksintensivkurs: RSS, RPS\/RFS och XPS<\/h2>\n<p>Innan jag finjusterar IRQ-maskerna kontrollerar jag n\u00e4tverkskortets funktioner, s\u00e5som RSS, samt k\u00e4rnmekanismer som RPS\/RFS och XPS; dessa p\u00e5verkar paketf\u00f6rdelningen i h\u00f6g grad. RSS f\u00f6rdelar k\u00f6avbrott redan p\u00e5 flera k\u00e4rnor, medan RPS\/RFS styr bearbetningen i k\u00e4rnan och XPS formar s\u00e4ndningsv\u00e4garna; detta undviker on\u00f6diga <strong>Hotspots<\/strong>. Jag anpassar dessa mekanismer efter min IRQ-strategi s\u00e5 att de inte motverkar varandra. Om k\u00f6erna, IRQ-affiniteterna och app-affiniteten st\u00e4mmer \u00f6verens fungerar n\u00e4tverks-I\/O betydligt smidigare. D\u00e4refter m\u00e4ter jag igen under verklig belastning innan jag forts\u00e4tter med ytterligare <strong>Steg<\/strong> s\u00e4tt.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq_balance_linux_guide_7163.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>MSI-X, Multi-Queue och en \u00f6versk\u00e5dlig k\u00f6struktur<\/h2>\n<p>M\u00e5nga 10\u2013100G-NIC:ar anv\u00e4nder MSI-X och tillhandah\u00e5ller egna avbrottsvektorer per RX\/TX-k\u00f6. Jag kontrollerar f\u00f6rst med <code>ethtool -l eth0<\/code> (antal kanaler) och <code>\/proc\/avbrott<\/code>, hur m\u00e5nga k\u00f6er som faktiskt \u00e4r aktiva och vad de heter (t.ex. <code>eth0-TxRx-0<\/code>, <code>eth0-TxRx-1<\/code>). M\u00e5let \u00e4r att anpassa antalet k\u00f6er efter antalet anv\u00e4nda k\u00e4rnor per NUMA-nod och att f\u00e4sta dessa p\u00e5 ett deterministiskt s\u00e4tt. Med <code>ethtool -L eth0 combined N<\/code> st\u00e4ller jag in antalet k\u00f6er; d\u00e4refter ordnar jag de IRQ:er som uppst\u00e5r genom <code>smp_affinity<\/code> l\u00e4mpliga k\u00e4rnor. Jag ser till att placera RX\/TX-par fr\u00e5n samma k\u00f6 p\u00e5 samma k\u00e4rna eller \u00e5tminstone samma socket, s\u00e5 att <strong>Cache-plats<\/strong> g\u00e4ller. Viktigt: \u00c4ndringar av k\u00f6antal och affinitet kontrollerar jag direkt i <code>\/proc\/avbrott<\/code> och med ett kort belastningstest (pps\/genomstr\u00f6mning) innan jag forts\u00e4tter att optimera.<\/p>\n\n<h2>Interrupt-koalescens och NAPI-budget<\/h2>\n<p>S\u00e4rskilt vid h\u00f6ga paketfrekvenser p\u00e5verkar koalescensv\u00e4rdena effektiviteten hos min IRQ-strategi. Med <code>ethtool -c eth0<\/code> ser jag om <code>rx-usecs<\/code> och <code>rx-ramar<\/code> \u00e4r inst\u00e4llda. Mer koalescens minskar antalet IRQ:er per sekund och sparar CPU-resurser, men \u00f6kar latensen och jitter. Jag justerar f\u00f6rsiktigt: sm\u00e5 steg, m\u00e4ter efter varje justering (p95\/p99-latens och CPU-belastning). P\u00e5 s\u00e4ndarsidan verkar <code>tx-usecs<\/code> analogt. Dessutom skalar jag NAPI-beteendet via <code>net.core.netdev_budget<\/code> och <code>net.core.netdev_budget_usecs<\/code>, n\u00e4r <strong>NET_RX<\/strong> b\u00f6rjar hopa sig i SoftIRQ:er. Om antalet avbrott \u00f6kar i <code>\/proc\/net\/softnet_stat<\/code>, h\u00f6jer jag budgeten som ett test eller f\u00f6rdelar RX-k\u00f6erna mer konsekvent; om systemlatensen blir ett problem, skruvar jag ner den igen. Jag beaktar GRO\/LRO och TSO\/GSO i samspel: \u00d6verdriven aggregering s\u00e4nker IRQ-belastningen, men kan orsaka latensspikar \u2013 jag j\u00e4mnar ut dem med applikationsprofilen.<\/p>\n\n<h2>L\u00e4sa SoftIRQ:er p\u00e5 ett transparent s\u00e4tt<\/h2>\n<p>F\u00f6rutom HardIRQ:er best\u00e4mmer jag belastningen i SoftIRQ:er. Med <code>cat \/proc\/softirqs<\/code> Jag observerar <strong>NET_RX<\/strong> och <strong>NET_TX<\/strong> per CPU; om vissa kolumner dominerar hamnar f\u00f6r mycket arbete d\u00e4r i ksoftirqd-tr\u00e5dar. En <code>top -H<\/code> visa mig snabbt vilka <code>ksoftirqd\/N<\/code> K\u00e4rnorna belastar. Jag m\u00e4ter djupare med <code>perf top<\/code> eller korta <code>perf rekord<\/code> K\u00f6rs f\u00f6r att identifiera flaskhalsar i drivrutinen eller stackbearbetningen. Om ksoftirqd-tr\u00e5dar aktiveras (ist\u00e4llet f\u00f6r omedelbar bearbetning i IRQ-kontexten) \u00f6kar ofta latensen avsev\u00e4rt; jag \u00e5tg\u00e4rdar detta med b\u00e4ttre k\u00f6f\u00f6rdelning, st\u00f6rre NAPI-budget eller m\u00e5linriktad CPU-pinning av de ber\u00f6rda ksoftirqd-tr\u00e5darna via <code>taskset -pc<\/code>. Viktigt: Jag dokumenterar dessa justeringar eftersom de har en subtil inverkan och jag i tveksamma fall snabbt beh\u00f6ver kunna \u00e5terg\u00e5 till tidigare versioner.<\/p>\n\n<h2>Att anv\u00e4nda SMT\/Hyper-Threading och topologi p\u00e5 r\u00e4tt s\u00e4tt<\/h2>\n<p>N\u00e4r SMT \u00e4r aktiverat delar jag en fysisk k\u00e4rna med tv\u00e5 logiska CPU:er. Jag kontrollerar syskonrelationerna via <code>lscpu -e<\/code> och <code>\/sys\/devices\/system\/cpu\/cpuX\/topology\/thread_siblings_list<\/code>. F\u00f6r latenskritiska v\u00e4gar undviker jag att placera app-tr\u00e5den och tillh\u00f6rande IRQ p\u00e5 samma fysiska k\u00e4rna (olika SMT-tr\u00e5dar); de konkurrerar om exekveringsenheter och cacheminnen. Jag f\u00f6redrar kombinationer d\u00e4r t.ex. en app-tr\u00e5d k\u00f6rs p\u00e5 CPU2 och den tillh\u00f6rande RX-k\u00f6n p\u00e5 CPU3 (annan fysisk k\u00e4rna, samma NUMA-nod). Om SMT st\u00f6r stabiliteten planerar jag ist\u00e4llet med f\u00e4rre, men exklusiva fysiska k\u00e4rnor och slipper oroliga <strong>St\u00f6rningar<\/strong>.<\/p>\n\n<h2>Virtualisering: KVM, vhost och SR-IOV<\/h2>\n<p>I virtualiserade milj\u00f6er betraktar jag v\u00e4rden och g\u00e4sten separat. P\u00e5 v\u00e4rden f\u00f6rdelar jag fysiska NIC-IRQ:er p\u00e5 ett ordnat s\u00e4tt \u00f6ver k\u00e4rnorna i den aktuella NUMA-noden. Om g\u00e4sten anv\u00e4nder virtio-net uppst\u00e5r ytterligare IRQ:er f\u00f6r vhost-tr\u00e5dar; jag identifierar dem i <code>\/proc\/avbrott<\/code> och kopplar vhost-arbetare konsekvent till k\u00f6erna f\u00f6r det fysiska n\u00e4tverkskortet. P\u00e5 g\u00e4stniv\u00e5 st\u00e4ller jag ocks\u00e5 in RSS\/XPS och IRQ-affiniteter, f\u00f6rutsatt att virtio-drivrutinen tillhandah\u00e5ller flera k\u00f6er. Vid SR-IOV l\u00f6nar det sig att tilldela varje g\u00e4st en eller flera VF:er med egna MSI-X-vektorer och att pina dessa i g\u00e4sten; isoleringen f\u00f6rb\u00e4ttrar latensen och f\u00f6ruts\u00e4gbarheten. Jag f\u00f6ljer ett tydligt schema: g\u00e4stens vCPU:er p\u00e5 dedikerade pCPU:er, tillh\u00f6rande IRQ:er p\u00e5 n\u00e4rliggande k\u00e4rnor, och att inte blanda emulator-\/vhost-tr\u00e5dar med ber\u00e4kningsintensiva app-tr\u00e5dar \u2013 p\u00e5 s\u00e5 s\u00e4tt f\u00f6rblir datav\u00e4gen <strong>planeringsbar<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/irq_balance_linux_guide_5421.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>CPU-frekvens, C-l\u00e4gen och NOHZ-inst\u00e4llningar<\/h2>\n<p>IRQ-f\u00f6rdr\u00f6jningarna p\u00e5verkas negativt n\u00e4r k\u00e4rnorna g\u00e5r in i djupa C-tillst\u00e5nd eller klockas aggressivt. F\u00f6r k\u00e4nsliga arbetsbelastningar st\u00e4ller jag in CPU-regulatorn p\u00e5 <code>prestanda<\/code> (<code>cpupower frequency\u2011set -g performance<\/code>) och minskar djupa C-tillst\u00e5nd via start- eller drivrutinsinst\u00e4llningar f\u00f6r att begr\u00e4nsa uppvakningstiderna. P\u00e5 h\u00e5rt belastade servrar ger detta ofta b\u00e4ttre resultat \u00e4n n\u00e5gon finjustering av affiniteter. I mycket kr\u00e4vande latensprofiler kompletterar jag <code>nohz_full=<\/code> och <code>rcu_nocbs=<\/code> f\u00f6r isolerade k\u00e4rnor, s\u00e5 att tick-timern och RCU-callback-funktionerna inte st\u00f6r varandra; jag definierar medvetet housekeeping-CPU:erna separat. Dessa ingrepp testar jag dock separat, eftersom de kan ha sidoeffekter p\u00e5 schemal\u00e4ggningen och energif\u00f6rbrukningen. Det viktigaste \u00e4r fortfarande att noggrant j\u00e4mf\u00f6ra m\u00e4tv\u00e4rdena f\u00f6re och efter \u00e4ndringen, annars g\u00e5r jag vilse i <strong>Optimeringar<\/strong> i m\u00f6rkret.<\/p>\n\n<h2>Systemd, Cgroups och app-isolering<\/h2>\n<p>F\u00f6rutom IRQ-pinning separerar jag app-tr\u00e5dar med Cgroups och systemd-affinity. Via <code>CPU-affinitet =<\/code> I Unit-filer och CPU-kontrollerna (cgroup v2) tilldelar jag tj\u00e4nster fasta k\u00e4rnor. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rhindrar jag att tr\u00e5dar fr\u00e5n schemal\u00e4ggaren hamnar p\u00e5 de CPU:er som jag har avsatt f\u00f6r IRQ:er. I containermilj\u00f6er st\u00e4ller jag in <code>cpuset.cpus<\/code> och kontrollera <code>cpuset.cpus.effective<\/code>, s\u00e5 att l\u00f6ftena om resurser verkligen infrias. Viktigt: <code>IRQBALANCE_BANNED_CPUS<\/code> styr endast d\u00e4r irqbalance inte f\u00f6rdelar; k\u00e4rntr\u00e5dar som ksoftirqd f\u00f6ljer fortfarande schemal\u00e4ggaren. F\u00f6r strikt isolering beh\u00f6ver jag allts\u00e5 en kombination av IRQ-affiniteter, tj\u00e4nsternas CPU-affinitet och, vid behov, isolerade k\u00e4rnor. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rblir datav\u00e4gen och applikationen tydligt \u00e5tskilda och <strong>Last<\/strong> blandas inte okontrollerat.<\/p>\n\n<h2>Vanliga fel och \u00e5tg\u00e4rder<\/h2>\n<p>Jag inaktiverar aldrig irqbalance generellt utan att k\u00e4nna till belastningsm\u00f6nstren; annars samlas IRQ:erna snabbt p\u00e5 ett f\u00e5tal k\u00e4rnor. Det \u00e4r lika ol\u00e4mpligt att \u00f6ppna alla k\u00e4rnor f\u00f6r alla IRQ:er, trots att k\u00e4nsliga tr\u00e5dar \u00e4r exklusiva <strong>Resurser<\/strong> beh\u00f6ver. Ett annat misstag: att inte testa \u00e4ndringar isolerat och inte m\u00e4ta effekterna; d\u00e5 f\u00f6rblir det oklart vad som faktiskt hj\u00e4lper. Jag tar \u00e4ven h\u00e4nsyn till Hyper-Threading-par: app-tr\u00e5den och tillh\u00f6rande IRQ b\u00f6r helst inte dela samma fysiska k\u00e4rna. Jag dokumenterar varje steg och skapar \u00e5terst\u00e4llningspunkter s\u00e5 att jag snabbt kan \u00e5terg\u00e5 till den senaste <strong>bra<\/strong> \u00c5terg\u00e5 till konfigurationen.<\/p>\n\n<h2>Checklista f\u00f6r serverhantering<\/h2>\n<p>Jag b\u00f6rjar alltid med en utg\u00e5ngspunkt: aktivera irqbalance, registrera systembelastningen, \u00f6vervaka \/proc\/interrupts och m\u00e4ta latenser; f\u00f6rst d\u00e4refter justerar jag inst\u00e4llningarna. I det andra steget avslutar jag med <code>IRQBALANCE_BANNED_CPUS<\/code> v\u00e4ljer ut de k\u00e4rnor som ska reserveras f\u00f6r app-tr\u00e5dar; p\u00e5 s\u00e5 s\u00e4tt f\u00f6rhindrar jag on\u00f6diga IRQ-avbrott. D\u00e4refter kopplar jag bort kritiska IRQ:er via <code>smp_affinity<\/code> p\u00e5 ett f\u00e5tal, v\u00e4l valda k\u00e4rnor och ser till att h\u00e5lla NUMA-n\u00e4rheten. D\u00e4refter kontrollerar jag RSS\/RPS\/RFS och XPS samt NIC:s avlastningsalternativ f\u00f6r att f\u00f6rdela arbetet p\u00e5 ett l\u00e4mpligt s\u00e4tt. Slutligen testar jag under produktionsbelastning, j\u00e4mf\u00f6r m\u00e4tv\u00e4rden och beh\u00e5ller endast de \u00e4ndringar som bevisligen <strong>arbete<\/strong>.<\/p>\n\n<h2>Konfigurationsfiler och systemd-kommandon<\/h2>\n<p>Jag aktiverar tj\u00e4nsten med <code>systemctl enable --now irqbalance<\/code> och kontrollera med <code>systemctl status irqbalance<\/code> l\u00f6ptiden; s\u00e5 st\u00e4ller jag in <strong>Service<\/strong> s\u00e4kert klart. I <code>\/etc\/sysconfig\/irqbalance<\/code> eller . <code>\/etc\/default\/irqbalance<\/code> jag s\u00e4tter <code>IRQBALANCE_BANNED_CPUS<\/code> samt som tillval <code>IRQBALANCE_BANNED_IRQS<\/code>. Jag tar med \u00e4ndringarna i <code>systemctl restart irqbalance<\/code> och f\u00f6lj samtidigt m\u00e4tarna i <code>\/proc\/avbrott<\/code>. Vid testning anv\u00e4nder jag irqbalances \u201dForeground\u201d-l\u00e4ge f\u00f6r att f\u00f6lja besluten i realtid. F\u00f6rst n\u00e4r jag f\u00f6rst\u00e5r beteendet skriver jag in justeringarna permanent i <strong>Konfiguration<\/strong>.<\/p>\n\n<h2>N\u00e4r jag inaktiverar irqbalance<\/h2>\n<p>I realtidsmilj\u00f6er eller vid extremt latensk\u00e4nsliga till\u00e4mpningar stoppar jag irqbalance och tilldelar IRQ:er statiskt, s\u00e5 att ingen omf\u00f6rdelning st\u00f6r. Jag isolerar k\u00e4rnorna f\u00f6r dessa arbetsbelastningar och l\u00e5ter trafik-IRQ:er medvetet k\u00f6ras p\u00e5 andra k\u00e4rnor; p\u00e5 s\u00e5 s\u00e4tt f\u00f6rblir applikationstr\u00e5dar <strong>planeringsbar<\/strong>. \u00c4ven i strikt separerade tenant-milj\u00f6er \u00e4r denna metod v\u00e4rdefull, eftersom jag d\u00e4rmed minskar st\u00f6rningar mellan virtuella maskiner eller containrar. Om det dyker upp drivrutiner som fungerar s\u00e4mre med den automatiska inst\u00e4llningen utesluter jag deras IRQ:er via en f\u00f6rbudslista. S\u00e5 snart belastningsm\u00f6nstren blir mer varierande igen aktiverar jag irqbalance p\u00e5 nytt och kontrollerar effekten med nya <strong>Uppm\u00e4tta v\u00e4rden<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-irq-balance-setup-1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Kortfattat sammanfattat<\/h2>\n<p>Jag b\u00f6rjar med irqbalance, m\u00e4ter effekten och justerar selektivt ist\u00e4llet f\u00f6r att blint ingripa \u00f6verallt; p\u00e5 s\u00e5 s\u00e4tt beh\u00e5ller jag helhetsbilden av systemet och <strong>\u00d6ppenhet<\/strong>. F\u00f6r k\u00e4nsliga arbetsbelastningar tilldelar jag l\u00e4mpliga IRQ:er, isolerar k\u00e4rnor f\u00f6r applikationer och tar h\u00e4nsyn till NUMA-n\u00e4rhet. Med hj\u00e4lp av banned-masker styr jag var irqbalance f\u00e5r verka och f\u00f6rhindrar o\u00f6nskade f\u00f6rflyttningar. Jag kontrollerar regelbundet <code>\/proc\/avbrott<\/code>, latens och genomstr\u00f6mning, s\u00e5 att \u00e4ndringarna kan underbyggas med tillf\u00f6rlitliga data. Den som g\u00e5r tillv\u00e4ga p\u00e5 detta s\u00e4tt utnyttjar IRQ Balances fulla potential och h\u00e5ller servrarna m\u00e4rkbart stabila under n\u00e4tverksbelastning <strong>reaktiv<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>St\u00e4lla in irqbalance i Linux p\u00e5 r\u00e4tt s\u00e4tt: S\u00e5 h\u00e4r f\u00f6rdelar du avbrott p\u00e5 Linux-servrar p\u00e5 ett effektivt s\u00e4tt och f\u00f6rb\u00e4ttrar prestandan.<\/p>","protected":false},"author":1,"featured_media":21035,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21042","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":"166","_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":"IRQ Balance","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":"21035","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/21042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/comments?post=21042"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/21042\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/21035"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=21042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=21042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=21042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}