{"id":20778,"date":"2026-08-18T18:23:16","date_gmt":"2026-08-18T16:23:16","guid":{"rendered":"https:\/\/webhosting.de\/linux-scheduler-latenz-messen-und-optimieren-performance\/"},"modified":"2026-08-18T18:23:16","modified_gmt":"2026-08-18T16:23:16","slug":"maeta-latensen-i-linux-schemalaeggaren-och-optimera-prestandan","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/linux-scheduler-latenz-messen-und-optimieren-performance\/","title":{"rendered":"M\u00e4ta och optimera latensen i Linux-schemal\u00e4ggaren f\u00f6r b\u00e4ttre k\u00e4rnprestation"},"content":{"rendered":"<p>Jag m\u00e4ter latensen f\u00f6r <strong>Linux-schemal\u00e4ggare<\/strong> m\u00e5lmedvetet, analyserar avvikelser och optimerar parametrar tills interaktiva arbetsbelastningar och arbetsbelastningar i realtid reagerar p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt. P\u00e5 s\u00e5 s\u00e4tt minskar jag systematiskt schemal\u00e4ggarens latens och \u00f6kar <strong>K\u00e4rnans prestanda<\/strong> utan att flyga p\u00e5 k\u00e4nsla.<\/p>\n\n<h2>Centrala punkter<\/h2>\n\n<ul>\n  <li><strong>M\u00e4tmetoder<\/strong>: perf sched, eBPF runqlat, schedstat och cyclictest ger en fullst\u00e4ndig bild.<\/li>\n  <li><strong>V\u00e4rsta t\u00e4nkbara fall<\/strong>: Avvikelser p\u00e5verkar anv\u00e4ndarupplevelsen och realtidsdeadlines.<\/li>\n  <li><strong>CFS-parametrar<\/strong>: sched_latency_ns och tidsskivor p\u00e5verkar svarstiderna.<\/li>\n  <li><strong>Policys<\/strong>: SCHED_FIFO\/RR\/DEADLINE prioriterar kritiska tr\u00e5dar.<\/li>\n  <li><strong>Isolering<\/strong>: CPU-pinning och IRQ-optimering stabiliserar latenserna.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-performance-2349.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Vad schemal\u00e4ggarens latens i k\u00e4rnan inneb\u00e4r<\/h2>\n\n<p>Jag definierar schemal\u00e4ggarens latens som tiden mellan <strong>V\u00e4cka<\/strong> en uppgift och det \u00f6gonblick d\u00e5 dess kod k\u00f6rs efter kontextbytet. En avbrottssignal avslutar en I\/O-v\u00e4ntetid, hanteraren markerar tr\u00e5den som k\u00f6rbar, schemal\u00e4ggaren g\u00f6r sitt val och initierar bytet. F\u00f6r interaktiva system r\u00e4knas varje mikrosekund, men i vardagen \u00e4r det framf\u00f6r allt <strong>V\u00e4rsta t\u00e4nkbara fall<\/strong>-Latensen p\u00e5verkar upplevelsen. Enstaka hundratals millisekunder f\u00f6rst\u00f6r anv\u00e4ndarupplevelsen, \u00e4ven om medelv\u00e4rdet ser bra ut. Just d\u00e4rf\u00f6r tittar jag p\u00e5 hela kedjan i k\u00e4rnan, men fokuserar p\u00e5 avsnittet mellan uppvaknande och CPU-intr\u00e4de.<\/p>\n\n<h2>Varf\u00f6r latensen i v\u00e4rsta fall \u00e4r viktig<\/h2>\n\n<p>Jag utv\u00e4rderar inte bara medelv\u00e4rden, eftersom ett l\u00e5gt medelv\u00e4rde kan ge h\u00f6ga <strong>Tips<\/strong> kan d\u00f6lja. Ljudet knastrar n\u00e4r s\u00e4llsynta toppar t\u00f6mmer buffertarna, och handeln tappar sin timing n\u00e4r tidsfristerna spricker. F\u00f6r station\u00e4ra datorer, servrar och realtid g\u00e4ller: n\u00e5gra f\u00e5 avvikelser pr\u00e4glar <strong>Lyh\u00f6rdhet<\/strong> mer \u00e4n tusentals bra samplingar. D\u00e4rf\u00f6r str\u00e4var jag efter smala f\u00f6rdelningar och kontrollerade jitterv\u00e4rden. F\u00f6rst n\u00e4r maximiv\u00e4rdena sjunker uppst\u00e5r ett smidigt, f\u00f6ruts\u00e4gbart f\u00f6rlopp.<\/p>\n\n<h2>M\u00e4ta schemal\u00e4ggarens latens: Verktyg och tillv\u00e4gag\u00e5ngss\u00e4tt<\/h2>\n\n<p>Jag b\u00f6rjar med <strong>perf<\/strong> och registrerar schemal\u00e4ggningsh\u00e4ndelser specifikt f\u00f6r arbetsbelastningen: \u201eperf sched record\u201c samlar in data, \u201eperf sched latency\u201c sorterar dem per uppgift, \u201eperf sched timehist\u201c visar h\u00e4ndelser med tidsmark\u00f6rer. P\u00e5 s\u00e5 s\u00e4tt kan jag se v\u00e4ntetiden fr\u00e5n \u201esched-out\u201c till \u201esched-in\u201c, f\u00f6rdr\u00f6jningen mellan v\u00e4ckning och faktisk k\u00f6rning samt den rena k\u00f6rtiden. F\u00f6r en detaljerad CPU-analys kombinerar jag detta med den h\u00e4r guiden: <a href=\"https:\/\/webhosting.de\/sv\/linux-perf-verktyget-analys-av-cpu-flaskhalsar-optimering-serverbelastning-profilering\/\">perf f\u00f6r flaskhalsar i CPU:n<\/a>. Denna synvinkel synligg\u00f6r flaskhalsar och visar om orsaken ligger i konkurrens om resurser, prioriteringar eller \u00f6verhead.<\/p>\n\n<p>Med eBPF m\u00e4ter jag k\u00f6r- och v\u00e4ntetider direkt i <strong>Runqueue<\/strong>. Det vanliga verktyget \u201erunqlat\u201c genererar histogram i steg om nanosekunder, vilket g\u00f6r att jag kan identifiera typiska zoner och s\u00e4llsynta avvikelser. S\u00e5dana f\u00f6rdelningar reagerar m\u00e4rkbart p\u00e5 CPU-isolering eller policy\u00e4ndringar och ger d\u00e4rmed konkreta bel\u00e4gg f\u00f6r optimerings\u00e5tg\u00e4rder. Jag upprepar m\u00e4tningarna f\u00f6re och efter \u00e4ndringarna tills topparna f\u00f6rsvinner. F\u00f6rst d\u00e5 betraktar jag resultatet som tillfredsst\u00e4llande.<\/p>\n\n<p>F\u00f6r enskilda uppgifter anv\u00e4nder jag \u201e\/proc\/\/schedstat\u201c och j\u00e4mf\u00f6r andelarna av CPU-k\u00f6rtid, <strong>Runqueue<\/strong>-V\u00e4ntetid och vilofaser. Genom att l\u00e4sa av v\u00e4rdena med j\u00e4mna mellanrum f\u00e5r man fram nyckeltal som procentuell CPU-anv\u00e4ndning, procentuell latensandel och procentuell vilotid. P\u00e5 s\u00e5 s\u00e4tt kan jag snabbt se om processen k\u00e4mpar om CPU-tid eller \u00e4r blockerad p\u00e5 grund av I\/O-begr\u00e4nsningar. Denna tydlighet f\u00f6rhindrar felaktiga optimeringar som inte tr\u00e4ffar r\u00e4tt. Som ett kompletterande test anv\u00e4nder jag cyclictest med h\u00f6g prioritet f\u00f6r att dokumentera jitter och maximiv\u00e4rden.<\/p>\n\n<h2>Avl\u00e4sa och tolka m\u00e4tv\u00e4rden<\/h2>\n\n<p>Jag g\u00f6r f\u00f6rst en kvalitativ bed\u00f6mning av m\u00e4tv\u00e4rdena: Var f\u00f6rekommer v\u00e4ntetiderna oftast, och vilka tr\u00e5dar dyker upp upprepade g\u00e5nger med <strong>Toppar<\/strong> p\u00e5. D\u00e4refter kontrollerar jag om de beror p\u00e5 CPU-begr\u00e4nsningar, policykonflikter eller avbrottsstormar. Jag h\u00e5ller avl\u00e4sningstiden tillr\u00e4ckligt l\u00e5ng f\u00f6r att f\u00e5nga upp s\u00e4llsynta h\u00e4ndelser, men tillr\u00e4ckligt kort f\u00f6r att kunna betrakta f\u00f6r\u00e4ndringar isolerat. V\u00e4rden i mikrosekundomr\u00e5det fungerar bra i vardagen, men realtidsarbetsbelastningar kr\u00e4ver ibland \u00e4nnu sn\u00e4vare intervall. Det avg\u00f6rande \u00e4r fortfarande: sjunker den maximala latensen p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt och blir jitterintervallet smalare?.<\/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\/linuxscheduler_9374.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Parametrar i Linux-schemal\u00e4ggaren som p\u00e5verkar latensen<\/h2>\n\n<p>Jag justerar f\u00f6rst m\u00e5llatensen \u201esched_latency_ns\u201c, som anger inom vilket tidsf\u00f6nster alla k\u00f6rklara uppgifter <strong>CPU<\/strong>-Tid. I m\u00e5nga processer krymper tidsf\u00f6nstret per uppgift, medan det i vissa fall v\u00e4xer, vilket s\u00e4kerst\u00e4ller r\u00e4ttvisa men kan f\u00f6rskjuta svarstiderna. F\u00f6r interaktiva applikationer s\u00e4nker jag v\u00e4rdet m\u00e5ttligt f\u00f6r att fr\u00e4mja korta svarstider, men h\u00e5ller samtidigt ett \u00f6ga p\u00e5 overheaden. CFS f\u00f6rdelar tiden r\u00e4ttvist, men arbetsbelastningar med kritiska tr\u00e5dar gynnas av tydliga prioriteringar. H\u00e4r sammanfattar jag grunderna f\u00f6r r\u00e4ttvis schemal\u00e4ggning i ett hosting-sammanhang: <a href=\"https:\/\/webhosting.de\/sv\/cfs-schemalaeggare-raettvis-schemalaeggning-webbhotell\/\">Att f\u00f6rst\u00e5 CFS-schemal\u00e4ggaren<\/a>.<\/p>\n\n<p>F\u00f6rutom latens och kvanta p\u00e5verkas \u00e4ven av v\u00e4ckningsgranularitet och migreringslogik <strong>Tips<\/strong>. Alltf\u00f6r aggressiva migreringar f\u00f6rst\u00f6r cache-lokaliteten och f\u00f6rl\u00e4nger indirekt v\u00e4ntetiderna. Jag minimerar on\u00f6diga f\u00f6rflyttningar, f\u00e4ster hot-tr\u00e5dar och h\u00e5ller data n\u00e4ra sina k\u00e4rnor. I NUMA-milj\u00f6er g\u00e4ller detta i dubbelt s\u00e5 h\u00f6g grad, eftersom minnesavst\u00e5nd driver upp latenserna. M\u00e5let \u00e4r fortfarande ett stabilt och f\u00f6ruts\u00e4gbart schemal\u00e4ggningsf\u00e4lt.<\/p>\n\n<h2>Att anv\u00e4nda riktlinjer, prioriteringar och tidsfrister p\u00e5 ett klokt s\u00e4tt<\/h2>\n\n<p>Jag ger kritiska tr\u00e5dar <strong>SCHED_FIFO<\/strong> eller SCHED_RR-prioritet, n\u00e4r latens \u00e4r viktigare \u00e4n genomstr\u00f6mning. Med SCHED_DEADLINE kan jag exakt tilldela resurser utifr\u00e5n perioder, k\u00f6rtid och tidsgr\u00e4ns, vilket s\u00e4kerst\u00e4ller att strikta tidsfrister h\u00e5lls. Jag anv\u00e4nder s\u00e5dana policyer sparsamt f\u00f6r att systemet inte ska \u201dsv\u00e4lta\u201d. Jag kalibrerar prioriteringarna tills endast de verkligen v\u00e4sentliga v\u00e4garna sl\u00e4pps igenom. En praktisk introduktion till prioriteringar finns h\u00e4r: <a href=\"https:\/\/webhosting.de\/sv\/server-process-schemalaeggning-prioriteringar-optimering-serverboost\/\">Prioriteringar i processen<\/a>.<\/p>\n\n<p>Jag kontrollerar regelbundet om det uppst\u00e5r policykonflikter, till exempel n\u00e4r bakgrundsjobb tar mer <strong>Prio<\/strong> som interaktionstr\u00e5dar. \u00c4ven deadline-parametrar m\u00e5ste dimensioneras noggrant, annars uppst\u00e5r nya flaskhalsar. Testk\u00f6rningar med verkliga arbetsbelastningar s\u00e4kerst\u00e4ller valet. Jag dokumenterar varje \u00e4ndring och m\u00e4ter uppf\u00f6ljningen s\u00e5 att effekterna f\u00f6rblir sp\u00e5rbara. P\u00e5 s\u00e5 s\u00e4tt undviker jag o\u00f6nskade effekter under drift.<\/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\/LinuxSchedulerOptimierung4321.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>CPU-isolering, pinning och NUMA: Stabilisera latenserna<\/h2>\n\n<p>Jag separerar kritiska tr\u00e5dar fr\u00e5n den allm\u00e4nna belastningen genom att isolera dedikerade processorer och h\u00e5lla systemtj\u00e4nsterna borta d\u00e4r l\u00e5g <strong>F\u00f6rdr\u00f6jning<\/strong> \u00e4r n\u00f6dv\u00e4ndigt. CPU-pinning h\u00e5ller \u201dhot paths\u201d p\u00e5 fasta k\u00e4rnor och skyddar cache-lokaliteten. I NUMA-konfigurationer kopplar jag tr\u00e5dar till lokala minnesbanker f\u00f6r att undvika on\u00f6diga \u00e5tkomstf\u00f6rfr\u00e5gningar \u00f6ver nodgr\u00e4nserna. Dessa \u00e5tg\u00e4rder minskar fluktuationerna m\u00e4rkbart. F\u00f6rdelen m\u00e4rks omedelbart i smalare eBPF-histogram.<\/p>\n\n<p>IRQ-f\u00f6rdelningen \u00e4r en del av detta: Jag leder st\u00f6rande avbrott bort fr\u00e5n latensk\u00e4rnorna och avlastar d\u00e4rmed <strong>Varmt<\/strong>-Tr\u00e5dar. MSI-X och affiniteter hj\u00e4lper till att finjustera f\u00f6rdelningen. N\u00e4r det \u00e4r m\u00f6jligt anv\u00e4nder jag tr\u00e5dade IRQ:er s\u00e5 att ISR-bearbetningen avslutas snabbare. Allt detta skapar utrymme f\u00f6r tidskritisk k\u00f6rning. M\u00e4tningar med perf och cyclictest bekr\u00e4ftar effekten.<\/p>\n\n<h2>Optimera avbrott, drivrutiner och preemption<\/h2>\n\n<p>Jag flyttar ber\u00e4kningskr\u00e4vande delar fr\u00e5n ISR till efterf\u00f6ljande arbetsk\u00f6er s\u00e5 att schemal\u00e4ggaren kan arbeta snabbare <strong>v\u00e4xla<\/strong> kan. Jag delar upp l\u00e4ngre kritiska avsnitt i k\u00e4rnan s\u00e5 att fler preemptionspunkter uppst\u00e5r. On\u00f6diga k\u00e4rnfunktioner och tunga drivrutiner st\u00e4nger jag av om de \u00f6kar latensen. F\u00f6r strikt realtid anv\u00e4nder jag PREEMPT_RT, medan PREEMPT med en bra konfiguration ofta r\u00e4cker f\u00f6r bred serverbelastning. Det \u00e4r viktigt att noggrant m\u00e4ta varje justering ist\u00e4llet f\u00f6r att f\u00f6rlita sig p\u00e5 antaganden.<\/p>\n\n<p>Jag kontrollerar om timeruppl\u00f6sningarna och tick-inst\u00e4llningarna passar arbetsbelastningen, eftersom grova tickar <strong>Jitter<\/strong> kan f\u00f6rst\u00e4rka. Till detta kommer energihantering: djupa C-l\u00e4gen f\u00f6rl\u00e4nger uppvakningstiderna och kan orsaka latensspikar. Med anpassade inst\u00e4llningar f\u00f6r regulatorn hittar jag en h\u00e5llbar kompromiss. I slut\u00e4ndan \u00e4r det m\u00e4tv\u00e4rdenas konsistens som r\u00e4knas, inte namnet p\u00e5 ett alternativ. En stabil inst\u00e4llning \u00e4r b\u00e4ttre \u00e4n en aggressiv enskild inst\u00e4llning.<\/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_scheduler_performance1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Praktiska inst\u00e4llningssteg med exempelv\u00e4rden<\/h2>\n\n<p>Jag b\u00f6rjar med en basm\u00e4tning och \u00e4ndrar bara en <strong>Parametrar<\/strong> per omg\u00e5ng f\u00f6r att fastst\u00e4lla kausaliteten. D\u00e4refter varierar jag sched_latency_ns i sm\u00e5 steg, observerar maximiv\u00e4rden och jitter samt dokumenterar effekterna. Vid behov l\u00e5ser jag kritiska tr\u00e5dar och flyttar IRQ:er, m\u00e4ter p\u00e5 nytt och noterar toppv\u00e4rden. D\u00e4r policyerna passar byter jag m\u00e5lmedvetet till FIFO\/RR eller DEADLINE. F\u00f6ljande tabell j\u00e4mf\u00f6r vanliga alternativ med avseende p\u00e5 effekt och bieffekter:<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Alternativ\/mekanik<\/th>\n      <th>F\u00f6rv\u00e4ntad inverkan p\u00e5 latensen<\/th>\n      <th>M\u00f6jliga biverkningar<\/th>\n      <th>Ledtr\u00e5d<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><strong>sched_latency_ns<\/strong> s\u00e4nka<\/td>\n      <td>Kortare v\u00e4ntetid till CPU:n<\/td>\n      <td>\u00d6kad administrativ belastning vid schemal\u00e4ggningen<\/td>\n      <td>Sm\u00e5 steg, m\u00e4ta effekten<\/td>\n    <\/tr>\n    <tr>\n      <td>Justera granulariteten f\u00f6r v\u00e4ckning<\/td>\n      <td>Snabbare \u00e5teruppstart efter uppvaknande<\/td>\n      <td>Fler f\u00f6regripanden<\/td>\n      <td>Justera endast m\u00e5ttligt<\/td>\n    <\/tr>\n    <tr>\n      <td>CPU-fastkoppling\/isolering<\/td>\n      <td>Stabilare <strong>Toppar<\/strong> och mindre jitter<\/td>\n      <td>Mindre flexibilitet<\/td>\n      <td>Beakta IRQ-affiniteter<\/td>\n    <\/tr>\n    <tr>\n      <td>SCHED_FIFO\/RR<\/td>\n      <td>Rekommenderad design<\/td>\n      <td>F\u00f6rskjutning av andra uppgifter<\/td>\n      <td>Endast f\u00f6r kritiska v\u00e4gar<\/td>\n    <\/tr>\n    <tr>\n      <td>PREEMPT_RT<\/td>\n      <td>L\u00e5g latens i v\u00e4rsta fall<\/td>\n      <td>Fler kontextbyten<\/td>\n      <td>Drivrutiner som st\u00f6der RT kr\u00e4vs<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Jag validerar \u00e4ndringarna med perf timehist och eBPF-histogram tills <strong>Distribution<\/strong> eng och att maximiv\u00e4rdet f\u00f6rblir konservativt. Om effekterna \u00e4r motstridiga tar jag ett steg tillbaka och provar en alternativ kombination. Varje milj\u00f6 reagerar lite annorlunda, d\u00e4rf\u00f6r \u00e4r det viktigt att experimentera noggrant. Med konsekventa prestandatester bevisar jag nyttan objektivt. P\u00e5 s\u00e5 s\u00e4tt skapas en repeterbar inst\u00e4llningsprocess.<\/p>\n\n<h2>Webbhotell och servrar: Hur man effektivt minskar latensen<\/h2>\n\n<p>Inom webbhotellbranschen minskar en noggrann finjustering av schemal\u00e4ggaren svarstiderna f\u00f6r webb- och <strong>DB<\/strong>-F\u00f6rfr\u00e5gningar. M\u00e5nga samtidiga processer gynnas n\u00e4r v\u00e4ntetiderna i k\u00f6rk\u00f6n minskar och toppbelastningarna f\u00f6rsvinner. Container- och mikrotj\u00e4nststackar blir mer j\u00e4mna s\u00e5 snart kritiska tj\u00e4nster f\u00e5r prioritet och placeras n\u00e4ra processorn. Den som v\u00e4ljer leverant\u00f6r b\u00f6r se till att den har aktuella k\u00e4rnor, v\u00e4l avv\u00e4gd preemption och flexibel IRQ-\/CPU-styrning. L\u00e4gre latens bidrar direkt till oms\u00e4ttningen och anv\u00e4ndarupplevelsen.<\/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-performance-optimierung-4523.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Moderna k\u00e4rnfunktioner som p\u00e5verkar latensen<\/h2>\n\n<p>De senaste k\u00e4rnorna inneh\u00e5ller mekanismer som direkt p\u00e5verkar svarstiderna. I de nyare versionerna har CFS f\u00e5tt f\u00f6rfinade heuristiker f\u00f6r uppvaknanden och f\u00f6rskjutningar, som prioriterar interaktiva belastningar. Attribut som en <strong>Preferens f\u00f6r vakenhet och vilotid<\/strong> per tr\u00e5d bidra till att viktiga s\u00f6kv\u00e4gar f\u00e5r prioritet snabbare, utan att missbruka RT-policyer. Dessutom styr <strong>uclamp<\/strong> (utilization clamping) den minsta och h\u00f6gsta CPU-utnyttjandegraden per uppgift eller cgroup som schemal\u00e4ggaren fastst\u00e4ller. P\u00e5 s\u00e5 s\u00e4tt tvingar jag fram en l\u00e4gsta gr\u00e4ns f\u00f6r ber\u00e4kningskapaciteten f\u00f6r tr\u00e5dar d\u00e4r latensen \u00e4r avg\u00f6rande, vilket styr frekvensregulatorn och placeringen p\u00e5 aktiva k\u00e4rnor.<\/p>\n\n<p>F\u00f6r system med f\u00e5 tickar anv\u00e4nder jag <strong>NOHZ_FULL<\/strong> i kombination med s\u00e4rskilda housekeeping-processorer. Detta flyttar periodiska k\u00e4rnuppgifter bort fr\u00e5n latensk\u00e4rnorna. Dessutom avlastar jag dessa k\u00e4rnor genom <code>rcu_nocbs<\/code>, s\u00e5 att callbacks inte st\u00f6r deras rytm. B\u00e5da dessa \u00e5tg\u00e4rder minskar antalet avbrott vid fel tillf\u00e4lle och stabiliserar v\u00e4rdena i v\u00e4rsta fall.<\/p>\n\n<p>Med <strong>PSI<\/strong> (Information om tryckstagnation) m\u00e4ter jag systemtrycket p\u00e5 CPU, minne och I\/O. Nyckeltalen i <code>\/proc\/pressure\/*<\/code> visa om tr\u00e5dar st\u00e5r stilla p\u00e5 grund av resursbrist. Om CPU-PSI \u00f6kar parallellt med v\u00e4ntetiderna i k\u00f6rk\u00f6n \u00e4r det ett tydligt tecken p\u00e5 verklig \u00f6verbelastning eller en f\u00f6r stram kvotstyrning.<\/p>\n\n<h2>Cgroups, containrar och r\u00e4ttvisa: Isolering utan extra belastning<\/h2>\n\n<p>I container-milj\u00f6er \u00e4r cgroups nyckeln till f\u00f6ruts\u00e4gbar latens. Jag anv\u00e4nder <strong>cpu.vikt<\/strong>, f\u00f6r att s\u00e4kerst\u00e4lla en viss r\u00e4ttvisa, och anv\u00e4nd <strong>cpu.max<\/strong>, f\u00f6r att s\u00e4tta strikta gr\u00e4nser f\u00f6r st\u00f6rande bakgrundstj\u00e4nster. Kritiska tj\u00e4nster tilldelas inte en sn\u00e4v CPU-kvot, s\u00e5 att de inte <em>strypa<\/em> och delas upp i tidsm\u00e4ssiga segment. F\u00f6r att utnyttja CPU:n effektivt delar jag upp cpusets: en upps\u00e4ttning k\u00e4rnor f\u00f6r interaktion, en upps\u00e4ttning f\u00f6r batchbearbetning. Denna isolering ger b\u00e4ttre resultat \u00e4n enbart \u201dnice-leveling\u201d.<\/p>\n\n<p>P\u00e5 plattformar med orkestrering undviker jag att flera latenskritiska poddar delar samma fysiska k\u00e4rna. Jag reserverar k\u00e4rnor <em>exklusivt<\/em> och kopplar de tillh\u00f6rande IRQ:erna p\u00e5 ett konsekvent s\u00e4tt. Jag m\u00e4ter f\u00f6r\u00e4ndringar i cgroup-hierarkin med eBPF via cgroup-filter, s\u00e5 att jag kan se v\u00e4ntetiderna i k\u00f6rk\u00f6n f\u00f6r varje tj\u00e4nst. P\u00e5 s\u00e5 s\u00e4tt kan jag avg\u00f6ra om det \u00e4r lastf\u00f6rdelningen eller kvoterna som \u00e4r den egentliga orsaken till topparna.<\/p>\n\n<h2>Virtualisering och SMT: Identifiera och d\u00e4mpa v\u00e4rdbrus<\/h2>\n\n<p>I virtuella maskiner \u00e4r jag uppm\u00e4rksam p\u00e5 <strong>Stj\u00e4la tid<\/strong>: Den visar n\u00e4r hypervisorn tar CPU-tid fr\u00e5n g\u00e4stsystemet. Om perf visar bra v\u00e4gar men appen hackar \u00e4r det ofta \u201dsteal time\u201d som \u00e4r boven i dramat. L\u00f6sningen \u00e4r att <em>vCPU-bindning<\/em> p\u00e5 dedikerade pCPU:er, minskade \u00f6verbelastningsgrader och separering av I\/O-tr\u00e5dar till egna k\u00e4rnor. F\u00f6r konstant latens planerar jag pCPU = vCPU, annars \u00e4r v\u00e4rsta fallet knappast ber\u00e4knbart.<\/p>\n\n<p>Med <strong>SMT<\/strong> (Hyper-Threading) delar jag k\u00e4rnresurser med en \u201dsyskonk\u00e4rna\u201d. D\u00e4rf\u00f6r kopplar jag latensv\u00e4gar till k\u00e4rnor vars \u201dsyskon\u201d \u00e4r lediga, eller s\u00e5 anv\u00e4nder jag alternativ f\u00f6r k\u00e4rnschemal\u00e4ggning som begr\u00e4nsar st\u00f6rningar mellan k\u00e4rnorna. Vid tuffa m\u00e5l inaktiverar jag SMT selektivt f\u00f6r kritiska k\u00e4rnor. Vinsten uppn\u00e5s genom mindre konkurrens om portar, cacher och exekveringsenheter.<\/p>\n\n<h2>Lagrings-, I\/O- och n\u00e4tverksv\u00e4gar: dolda k\u00e4llor till latens<\/h2>\n\n<p>Scheduler-latens k\u00e4nns ofta som ett CPU-problem, men \u00e4r i sj\u00e4lva verket <strong>Reclaim<\/strong> eller . <strong>Komprimering<\/strong>. Direkt \u00e5tervinning avslutar tr\u00e5dar och skapar l\u00e5nga toppar. Jag h\u00e5ller de lediga sidpoolerna tillr\u00e4ckligt stora och v\u00e4ljer en m\u00e5ttlig <code>vm.swappiness<\/code>, s\u00e5 att minnes\u00e5tkomsten inte st\u00f6rs av kraftiga swap-operationer. Jag kalibrerar Transparent Huge Pages p\u00e5 ett f\u00f6rsiktigt s\u00e4tt: om k\u00e4rnan sammanfogar stora sidor vid fel tillf\u00e4lle uppst\u00e5r f\u00f6rdr\u00f6jningar; med <em>madvise<\/em> Jag placerar THP d\u00e4r de bidrar till genomstr\u00f6mningen utan att st\u00f6ra interaktionen.<\/p>\n\n<p>\u00c5terskrivnings- och journal-commit-intervall p\u00e5verkar ocks\u00e5 interaktionerna. F\u00f6r stora dirty-gr\u00e4nser skjuter upp arbetet till ogynnsamma faser; f\u00f6r sm\u00e5 tvingar fram frekventa flushing-toppar. Jag dimensionerar i byte ist\u00e4llet f\u00f6r procent och sprider ut skrivningarna s\u00e5 att CPU:ns vakna faser inte kolliderar med I\/O-toppar.<\/p>\n\n<p>I n\u00e4tverksv\u00e4gen tittar jag p\u00e5 <strong>SoftIRQs<\/strong>, NAPI-budgetar och paketbuntning. En alltf\u00f6r aggressiv GRO minskar overhead per paket, men kan f\u00f6rl\u00e4nga den interaktiva latensen. RPS\/RFS f\u00f6rdelar belastningen v\u00e4l, men m\u00e5ste passa ihop med IRQ- och CPU-affiniteter. M\u00e5let \u00e4r att paketen ska bearbetas d\u00e4r applikationstr\u00e5den k\u00f6rs \u2013 och inte f\u00f6rst beh\u00f6va vandra mellan flera k\u00e4rnor.<\/p>\n\n<h2>Att hitta en balans mellan RT-begr\u00e4nsningar, tidsfrister och skyddsmekanismer<\/h2>\n\n<p>Das <strong>RT-begr\u00e4nsning<\/strong> skyddar systemet mot att \u201dsv\u00e4lta\u201d, men begr\u00e4nsar samtidigt RT-belastningen effektivt till en del av CPU-tiden. F\u00f6r deterministiska svarstider \u00f6kar jag <code>kernel.sched_rt_runtime_us<\/code> eller inaktivera gr\u00e4nsen i noggrant avsk\u00e4rmade milj\u00f6er. Jag m\u00e4ter d\u00e5 konsekvent om icke-RT-tr\u00e5dar fortfarande tilldelas tillr\u00e4ckligt m\u00e5nga f\u00f6nster. Lika viktiga \u00e4r globala <strong>Deadline<\/strong>-Kvoter: Om de s\u00e4tts f\u00f6r sn\u00e4vt missar DEADLINE-uppgifterna sina tidsf\u00f6nster trots korrekta parametrar. Jag kontrollerar f\u00f6rh\u00e5llandet mellan <em>k\u00f6rtid<\/em> till <em>period<\/em> och summan av alla DEADLINE-reservationer per CPU.<\/p>\n\n<h2>M\u00e4tutformning, skydd mot regression och drift<\/h2>\n\n<p>Jag skiljer strikt mellan m\u00e4tfaserna: uppv\u00e4rmning, referens, variation, verifiering. Kalla cacher f\u00f6rvr\u00e4nger resultaten; jag m\u00e4ter stabiliserade faser och korrelerar dem med Perf- och eBPF-data. A\/B-j\u00e4mf\u00f6relser k\u00f6rs med identiska arbetsbelastningar, identisk varaktighet och fasta affiniteter. Jag v\u00e4ljer samplingsf\u00f6nster som \u00e4r tillr\u00e4ckligt stora f\u00f6r att s\u00e4llsynta toppar ska framtr\u00e4da statistiskt, men tillr\u00e4ckligt sm\u00e5 f\u00f6r att kunna utv\u00e4rdera enskilda inst\u00e4llningssteg isolerat.<\/p>\n\n<p>F\u00f6r kontinuerlig drift definierar jag en <strong>SLO<\/strong> f\u00f6r latens och jitter: cirka 99,91 TP3T-kvantil under X mikrosekunder vid Y-belastning. Telemetri fr\u00e5n PSI, perf-statistik och eBPF-histogram fungerar som \u00f6vervakning; om m\u00e4tv\u00e4rdena \u00f6verskrider tr\u00f6skelv\u00e4rdena v\u00e4xlar jag automatiskt tillbaka till konservativa profiler. Varje \u00e4ndring dokumenteras i en \u00e4ndringslogg med k\u00e4rnversion, parametrar, m\u00e4tmetoder, r\u00e5data och tolkning. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rblir finjusteringen reproducerbar \u2013 och det g\u00e5r att \u00e5terg\u00e5 till tidigare inst\u00e4llningar n\u00e4r som helst.<\/p>\n\n<ul>\n  <li>Skapa baslinje: perf, eBPF, schedstat, cyclictest<\/li>\n  <li>Identifiera flaskhalsar: CPU, IRQ, I\/O, minne, policy<\/li>\n  <li>En \u00e4ndring per omg\u00e5ng: parametrar, pinning, policy, isolering<\/li>\n  <li>M\u00e4tning f\u00f6re\/efter: Medelv\u00e4rde, 99%- och 99,9%-kvantil, max<\/li>\n  <li>Testa stabiliteten: l\u00e5nga k\u00f6rningar, verkliga arbetsbelastningar, belastningstoppar<\/li>\n  <li>Dokumentera och bevara: profiler, gr\u00e4nsv\u00e4rden, \u00e5terfallsplan<\/li>\n<\/ul>\n\n<h2>Kortfattat sammanfattat<\/h2>\n\n<p>Jag m\u00e4ter schemal\u00e4ggarens latens med <strong>perf<\/strong>, eBPF, schedstat och cyclictest, innan jag \u00e4ndrar n\u00e5got alls. D\u00e4refter s\u00e4nker jag m\u00e5llatensen f\u00f6rsiktigt, kalibrerar policyer och skyddar kritiska tr\u00e5dar genom pinning och IRQ-affiniteter. Jag best\u00e4mmer drivrutiner, ISR-f\u00f6rdelning och preemption s\u00e5 att topparna i v\u00e4rsta fall minskar och jitter blir l\u00e5g. Varje \u00e4ndring dokumenterar jag med upprepade m\u00e4tningar tills kurvorna \u00e4r \u00f6vertygande. P\u00e5 s\u00e5 s\u00e4tt \u00f6kar jag <strong>K\u00e4rnan<\/strong>-Reaktionsf\u00f6rm\u00e5gan \u00e4r h\u00e5llbar och ger tillf\u00f6rlitliga resultat f\u00f6r station\u00e4ra datorer, servrar och realtidsarbetsbelastningar.<\/p>","protected":false},"excerpt":{"rendered":"<p>En praktisk guide till hur du m\u00e4ter och optimerar latensen i Linux-schemal\u00e4ggaren f\u00f6r att f\u00f6rb\u00e4ttra k\u00e4rnans prestanda. Fokus: Schemal\u00e4ggarens latens i Linux f\u00f6r exakt CPU-schemal\u00e4ggning och stabila svarstider p\u00e5 servern.<\/p>","protected":false},"author":1,"featured_media":20771,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-20778","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":"187","_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":"Linux Scheduler","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":"20771","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20778","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=20778"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/20778\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/20771"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=20778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=20778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=20778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}