{"id":21631,"date":"2026-09-21T15:04:22","date_gmt":"2026-09-21T13:04:22","guid":{"rendered":"https:\/\/webhosting.de\/kernel-tracepoints-linux-performanceanalyse-tracing-focus\/"},"modified":"2026-09-21T15:04:22","modified_gmt":"2026-09-21T13:04:22","slug":"kaernans-sparpunkter-linux-prestandaanalys-sparning-fokus","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/kernel-tracepoints-linux-performanceanalyse-tracing-focus\/","title":{"rendered":"Att f\u00f6rst\u00e5 och anv\u00e4nda k\u00e4rnsp\u00e5rningspunkter f\u00f6r prestandaanalyser i Linux"},"content":{"rendered":"<p>Med hj\u00e4lp av k\u00e4rnsp\u00e5rpunkter kan jag f\u00f6rst\u00e5 prestandaproblem i Linux \u00e4nda ner p\u00e5 k\u00e4rnniv\u00e5 och m\u00e4ta exakt var tid g\u00e5r f\u00f6rlorad. Jag anv\u00e4nder dessa <strong>M\u00e4tpunkter<\/strong>, f\u00f6r att \u00f6vervaka processer i schemal\u00e4ggaren, i I\/O-stacken och i n\u00e4tverksv\u00e4gen \u2013 med liten extra arbetsinsats och tydliga h\u00e4ndelsedata.<\/p>\n\n<h2>Centrala punkter<\/h2>\n<p>F\u00f6ljande huvudpunkter ger dig en snabb \u00f6verblick \u00f6ver vad jag t\u00e4nker p\u00e5 n\u00e4r jag arbetar med sp\u00e5rningspunkter.<\/p>\n<ul>\n  <li><strong>Statisk<\/strong> F\u00f6rankrade h\u00e4ndelser levererar tillf\u00f6rlitliga data vid viktiga st\u00e4llen i koden.<\/li>\n  <li><strong>L\u00e5g overhead<\/strong> g\u00f6r sp\u00e5rning praktiskt genomf\u00f6rbar \u00e4ven under h\u00f6g belastning.<\/li>\n  <li><strong>Ett omfattande ekosystem<\/strong> med ftrace, perf, LTTng och eBPF-verktyg.<\/li>\n  <li><strong>M\u00e5lmedveten aktivering<\/strong> och filtrering f\u00f6rhindrar dat\u00f6versv\u00e4mningar.<\/li>\n  <li><strong>Kombination<\/strong> med prestandam\u00e4tare visar orsakskedjor.<\/li>\n<\/ul>\n<p>Jag h\u00e5ller listan kort och fokuserar p\u00e5 <strong>Prioriteringar<\/strong> analysen. P\u00e5 s\u00e5 s\u00e4tt sl\u00f6sar jag inte tid p\u00e5 ov\u00e4sentliga detaljer och h\u00e5ller koll p\u00e5 de viktigaste signalerna. De n\u00e4mnda punkterna styr mitt praktiska arbete fr\u00e5n den f\u00f6rsta misstanken till den verifierade optimeringen. P\u00e5 s\u00e5 s\u00e4tt skapar jag <strong>\u00d6ppenhet<\/strong> och reproducerbarhet. Jag arbetar utifr\u00e5n data och kontrollerar varje steg.<\/p>\n\n<h2>Vad \u00e4r k\u00e4rnsp\u00e5rpunkter?<\/h2>\n\n<p>En tracepoint \u00e4r en statisk instrumenteringspunkt i k\u00e4rnkoden som utl\u00f6ser en h\u00e4ndelse med strukturerade f\u00e4lt. D\u00e4r ser jag bland annat <strong>PID<\/strong>, tidsst\u00e4mplar, CPU, statuskoder eller storleksuppgifter, beroende p\u00e5 h\u00e4ndelse. Genom makron som TRACE_EVENT definierar k\u00e4rnan platsen, formatet och de data som levereras. Dessa h\u00e4ndelser finns vid meningsfulla gr\u00e4nssnitt som schemal\u00e4ggning, block-I\/O, filsystem eller n\u00e4tverksv\u00e4gen. Jag kan aktivera dem n\u00e4r som helst utan att beh\u00f6va patcha k\u00e4rnan eller uts\u00e4tta produktionssystem f\u00f6r risker, vilket ger mig <strong>Planering av s\u00e4kerhet<\/strong> d\u00e4r.<\/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\/09\/linux-tracepoints-analyse-4875.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Varf\u00f6r man ska anv\u00e4nda sp\u00e5rpunkter f\u00f6r prestandam\u00e4tning<\/h2>\n\n<p>Tracepoints \u00e4r i inaktivt l\u00e4ge praktiskt taget kostnadsfria och medf\u00f6r endast en liten extra belastning n\u00e4r de aktiveras. \u00c4ven n\u00e4r h\u00e4ndelserna \u00e4r aktiverade m\u00e4ter jag vanligtvis bara en extra f\u00f6rdr\u00f6jning i det l\u00e4gre tv\u00e5siffriga nanosekundomr\u00e5det \u2013 vilket \u00e4r tillr\u00e4ckligt bra f\u00f6r system med strikta <strong>Latensm\u00e5l<\/strong>. Eftersom de \u00e4r stabilt integrerade i k\u00e4rnan kan jag upprepa analyserna p\u00e5 ett konsekvent s\u00e4tt \u00f6ver olika k\u00e4rnversioner. Deras strukturerade utdata kan p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt analyseras och bearbetas vidare. P\u00e5 s\u00e5 s\u00e4tt vinner jag <strong>p\u00e5litlig<\/strong> M\u00e4tningar ist\u00e4llet f\u00f6r otydliga loggfragment.<\/p>\n\n<h2>Tidsst\u00e4mplar, klockor och ordningsf\u00f6ljd<\/h2>\n<p>F\u00f6r att kunna tolka f\u00f6rdr\u00f6jningar korrekt \u00e4r jag noga med vilken tidsk\u00e4lla som anv\u00e4nds. Monotona klockor (t.ex. CLOCK_MONOTONIC) \u00e4r mer tillf\u00f6rlitliga f\u00f6r m\u00e4tningar \u00e4n realtid, eftersom NTP-korrigeringar inte p\u00e5verkar tid i efterhand. P\u00e5 flerk\u00e4rniga system levererar buffertar per CPU h\u00e4ndelser vars ordning st\u00e4mmer lokalt p\u00e5 CPU:n, men som endast kan j\u00e4mf\u00f6ras mellan olika CPU:er med hj\u00e4lp av tidsst\u00e4mplar. D\u00e4rf\u00f6r kalibrerar jag perspektivet: antingen sorterar jag h\u00e4ndelserna per CPU, eller s\u00e5 anv\u00e4nder jag verktyg som synkroniserar buffertarna och l\u00f6ser tidslinjekonflikter p\u00e5 r\u00e4tt s\u00e4tt. Vid mycket knappa budgetar kontrollerar jag om TSC-basen \u00e4r stabil, s\u00e5 att avvikelser inte felaktigt uppfattas som jitter. P\u00e5 s\u00e5 s\u00e4tt f\u00f6rhindrar jag felaktiga tolkningar n\u00e4r till exempel v\u00e4ckningar sker p\u00e5 CPU 3 och kontextbyten p\u00e5 CPU 7.<\/p>\n\n<h2>\u00d6versikt \u00f6ver Linux-sp\u00e5rningssystemet<\/h2>\n\n<p>Jag anv\u00e4nder flera verktyg som alla bygger p\u00e5 samma Tracepoint-h\u00e4ndelser. ftrace g\u00f6r det m\u00f6jligt att snabbt aktivera dem via sp\u00e5rningsfilsystemet och l\u00e4mpar sig f\u00f6r ad hoc-kontroller med <strong>Live-vy<\/strong>. Med perf kopplar jag samman sp\u00e5rpunkter, h\u00e5rdvarur\u00e4knare och samplingsdata f\u00f6r att synligg\u00f6ra korrelationer. LTTng hanterar l\u00e5nga inspelningar med h\u00f6g h\u00e4ndelsefrekvens och l\u00e5g extra belastning, vilket \u00e4r avg\u00f6rande f\u00f6r djupg\u00e5ende analyser. eBPF-baserade verktyg l\u00e4ser av sp\u00e5rpunkter, utf\u00f6r aggregeringar i k\u00e4rnan och minskar d\u00e4rmed <strong>Datatrafik<\/strong> till anv\u00e4ndarutrymmet.<\/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\/09\/linux_kernel_trace_4173.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ringbuffert och f\u00f6rlustkontroll<\/h2>\n<p>Bakom varje aktiv h\u00e4ndelse finns en ringbuffert per CPU. Jag dimensionerar dessa buffertar s\u00e5 att belastningstoppar d\u00e4mpas utan att h\u00e4ndelser f\u00f6rkastas. F\u00f6rlustr\u00e4knare och varningar fr\u00e5n verktygen \u00e4r viktiga: I perf h\u00e5ller jag koll p\u00e5 r\u00e4knaren f\u00f6r f\u00f6rlorade h\u00e4ndelser, i ftrace kontrollerar jag statistiken \u00f6ver bortkastade h\u00e4ndelser i tracefs. LTTng visar ocks\u00e5 n\u00e4r konsumentv\u00e4gen inte h\u00e4nger med. Om f\u00f6rluster uppst\u00e5r \u00f6kar jag buffertarna, filtrerar str\u00e4ngare eller aggregerar tidigare. F\u00f6r \u201eFlight Recorder\u201c-scenarier anv\u00e4nder jag \u00f6gonblicksbilder som bevarar en tidsperiod kring en utl\u00f6sare. P\u00e5 s\u00e5 s\u00e4tt h\u00e5ller jag datakvaliteten h\u00f6g och undviker felaktiga hypoteser baserade p\u00e5 ofullst\u00e4ndiga sp\u00e5r.<\/p>\n\n<h2>Val av verktyg: ftrace, perf, LTTng, eBPF<\/h2>\n\n<p>Jag b\u00f6rjar ofta med perf, eftersom jag d\u00e4r analyserar samplingar, r\u00e4knev\u00e4rden och sp\u00e5rpunkter tillsammans. F\u00f6r snabba h\u00e4ndelseinspektioner anv\u00e4nder jag ftrace och aktiverar specifikt <strong>H\u00e4ndelser<\/strong> fri. Komplexa, l\u00e5ngvariga sessioner med m\u00e5nga CPU:er k\u00f6r jag g\u00e4rna med LTTng, eftersom det p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt loggar h\u00f6ga datahastigheter. Om jag vill f\u00f6raggregera i k\u00e4rnan anv\u00e4nder jag eBPF-baserade sp\u00e5rare f\u00f6r att endast exportera aggregerade nyckeltal. Den som vill f\u00f6rdjupa sig i perf hittar praktiska tips i inl\u00e4gget om <a href=\"https:\/\/webhosting.de\/sv\/linux-perf-verktyget-analys-av-cpu-flaskhalsar-optimering-serverbelastning-profilering\/\">perf-verktyg<\/a>, vilket \u00e4r till hj\u00e4lp f\u00f6r b\u00e5de nyb\u00f6rjare och mer erfarna anv\u00e4ndare.<\/p>\n\n<h2>Reproducerbarhet och automatisering av sessioner<\/h2>\n<p>Jag dokumenterar framg\u00e5ngsrika sessioner enligt f\u00f6ljande: aktiverade h\u00e4ndelser, filter, buffertstorlekar, samplingsfrekvenser och k\u00f6rtid. Dessutom dokumenterar jag k\u00e4rnversion, verktygsversioner, CPU-topologi och str\u00f6minst\u00e4llningar, s\u00e5 att senare m\u00e4tningar blir j\u00e4mf\u00f6rbara. P\u00e5 s\u00e5 s\u00e4tt kan jag vid behov upprepa en session of\u00f6r\u00e4ndrad, \u00f6verf\u00f6ra den till andra v\u00e4rddatorer eller automatisera den i CI-pipelines. Vid l\u00e4ngre analyser sparar jag r\u00e5data och genererar sammanfattningar (histogram, percentiler, v\u00e4rmekartor) direkt efter m\u00e4tningen. Jag arbetar iterativt: korta, m\u00e5linriktade k\u00f6rningar, utv\u00e4rdering, f\u00f6rtydligande av hypoteser \u2013 och sedan m\u00e4ter jag igen. P\u00e5 det h\u00e4r s\u00e4ttet f\u00f6rlorar jag mig inte i data, utan drar tillf\u00f6rlitliga slutsatser med minimal slingtid.<\/p>\n\n<h2>Anv\u00e4ndningsscenarier i praktiken<\/h2>\n\n<p>I schemal\u00e4ggaren \u00f6vervakar jag kontextbyten, v\u00e4ckningar och k\u00f6interaktioner f\u00f6r att uppt\u00e4cka \u00f6verdrivna v\u00e4xlingar eller ol\u00e4mpliga prioriteringar. I blockstacken korrelerar jag inl\u00e4mning och slutf\u00f6rande av f\u00f6rfr\u00e5gningar med k\u00f6djup och storlek, vilket g\u00f6r att jag kan uppt\u00e4cka <strong>F\u00f6rvaring<\/strong>-Flaskhalsar. I n\u00e4tverksv\u00e4gen f\u00f6ljer jag paketens in- och utfl\u00f6de samt k\u00f6erna f\u00f6r att f\u00f6rst\u00e5 latenskedjorna per fl\u00f6de. N\u00e4r det g\u00e4ller systemanrop kontrollerar jag frekvens och latens f\u00f6r att uppt\u00e4cka avvikelser i hotpaths. Vid behov kombinerar jag detta med h\u00e5rdvarur\u00e4knare s\u00e5 att cache-missar, grenf\u00f6ruts\u00e4gelser och I\/O-h\u00e4ndelser kan <strong>Orsakskedja<\/strong> resultat.<\/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\/09\/kernel-tracepoints-linux-8101.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Konkreta evenemangsnamn och f\u00e4ltinterpretation<\/h2>\n<p>Jag v\u00e4ljer h\u00e4ndelser s\u00e5 att jag kan rekonstruera hela v\u00e4gen med endast ett f\u00e5tal m\u00e4tpunkter. En grundupps\u00e4ttning som har visat sig fungera bra:<\/p>\n<ul>\n  <li>Schemal\u00e4ggare: sched:sched_switch (f\u00f6reg\u00e5ende\/n\u00e4sta kommando, f\u00f6reg\u00e5ende tillst\u00e5nd), sched:sched_wakeup och sched:sched_wakeup_new (v\u00e4ckningsk\u00e4lla, m\u00e5l-CPU)<\/li>\n  <li>Block-I\/O: block:block_rq_issue, block:block_rq_complete (sektorer, storlek, enhet, latens via delta)<\/li>\n  <li>N\u00e4tverk: net:net_dev_queue, net:netif_receive_skb (k\u00f6hantering och mottagning), tcp:tcp_retransmit_skb (om s\u00e4ndningar)<\/li>\n  <li>Systemanrop: syscalls:sys_enter_*, syscalls:sys_exit_* (varaktighet per anrop, felkoder)<\/li>\n<\/ul>\n<p>Jag kontrollerar f\u00e4ltens betydelser i f\u00f6rv\u00e4g f\u00f6r att kunna korrelera korrekt: Fr\u00e5n prev_state l\u00e4ser jag av vilande uppgifter, och fr\u00e5n CPU-f\u00e4lten identifierar jag f\u00f6rflyttningar mellan olika socklar. Vid n\u00e4tverksh\u00e4ndelser tar jag, om det \u00e4r m\u00f6jligt, med fl\u00f6desmetadata (t.ex. portar) f\u00f6r att gruppera f\u00f6rdr\u00f6jningar per anslutning. P\u00e5 s\u00e5 s\u00e4tt f\u00e5r jag fram v\u00e4gar som faktiskt st\u00e4mmer \u00f6verens med det observerade beteendet i tj\u00e4nsten.<\/p>\n\n<h2>Steg f\u00f6r steg: Fr\u00e5n fr\u00e5gan till sp\u00e5rningssessionen<\/h2>\n\n<p>Jag b\u00f6rjar alltid med en tydlig fr\u00e5ga, till exempel: \u201eVarf\u00f6r \u00f6kar svarstiderna under toppbelastningar?\u201c Det h\u00e4r steget tvingar mig att hitta r\u00e4tt <strong>Delsystem<\/strong> att v\u00e4lja: Schemal\u00e4ggare, n\u00e4tverk, block, filsystem eller lagringshantering. D\u00e4refter listar jag l\u00e4mpliga sp\u00e5rpunkter med \u201eperf list\u201c eller i sp\u00e5rningsfilsystemet och antecknar relevanta f\u00e4lt. Jag konfigurerar sessionen, st\u00e4ller in filter p\u00e5 PID-, CPU- eller h\u00e4ndelsef\u00e4lt och anger buffertstorlek samt varaktighet. D\u00e4refter k\u00f6r jag belastningsscenariot och analyserar sedan latensf\u00f6rdelningar, sekvenser och korrelationer innan jag testar en hypotes och m\u00e4ter f\u00f6r\u00e4ndringen p\u00e5 nytt f\u00f6r att fastst\u00e4lla <strong>Effekt<\/strong> f\u00f6r att bekr\u00e4fta.<\/p>\n\n<h2>Filtrering och korrelation: PID:er, TID:er, cgroups och fl\u00f6den<\/h2>\n<p>Exakta filter sparar tid \u00e5t mig. Beroende p\u00e5 m\u00e5let arbetar jag med PID-\/TID-filter, CPU-urval eller cgroup-filter f\u00f6r att h\u00e5lla mig inom gr\u00e4nserna f\u00f6r containrar eller tj\u00e4nster. N\u00e4r jag vill f\u00f6rst\u00e5 n\u00e4tverkslatensen korrelerar jag h\u00e4ndelser utifr\u00e5n fl\u00f6desattribut (t.ex. k\u00e4ll-\/m\u00e5lport) f\u00f6r att skilja mellan masstrafik och latensk\u00e4nsliga fl\u00f6den. N\u00e4r det g\u00e4ller filer ordnar jag dem efter enhets-\/blockadress eller grupperar dem efter monteringspunkt, beroende p\u00e5 vilket verktyg jag anv\u00e4nder. N\u00e4r det g\u00e4ller schemal\u00e4ggningen m\u00e4ter jag tiden fr\u00e5n uppvaknandet till den f\u00f6rsta sched_switch till m\u00e5l-CPU:n; p\u00e5 s\u00e5 s\u00e4tt kan jag se v\u00e4ntetiden i k\u00f6rk\u00f6erna separat fr\u00e5n den faktiska CPU-tiden.<\/p>\n\n<h2>Hantera overheadkostnader: b\u00e4sta praxis<\/h2>\n\n<p>Jag aktiverar bara de sp\u00e5rningspunkter som jag verkligen beh\u00f6ver f\u00f6r att h\u00e5lla datam\u00e4ngden och den extra belastningen p\u00e5 en l\u00e5g niv\u00e5. Filtrering efter PID, CPU eller f\u00e4lt h\u00e5ller brusniv\u00e5n l\u00e5g och skonsam <strong>Buffert<\/strong>. Jag anpassar buffertstorleken efter h\u00e4ndelsefrekvensen f\u00f6r att inte g\u00e5 miste om n\u00e5gra h\u00e4ndelser. Jag s\u00e4tter tydliga tidsgr\u00e4nser f\u00f6r sessionerna och upprepar dem endast n\u00e4r jag vill testa en hypotes. Vid extremt frekventa h\u00e4ndelser anv\u00e4nder jag sampling eller in-kernel-aggregering via eBPF, s\u00e5 att utv\u00e4rderingen i anv\u00e4ndarutrymmet <strong>smal<\/strong> kvarst\u00e5r.<\/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\/09\/kernel_tracepoints_analyse_4512.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>J\u00e4mf\u00f6relse: Tracepoints j\u00e4mf\u00f6rt med prestanda-h\u00e4ndelser<\/h2>\n\n<p>De b\u00e5da metoderna kompletterar varandra. Tracepoints f\u00f6rklarar specifika h\u00e4ndelser i delsystem och ger meningsfull <strong>F\u00e4lt<\/strong>. Prestandatester ger mig en statistisk \u00f6verblick \u00f6ver cykler, cache-missar och f\u00f6rgreningar. Genom att sammanst\u00e4lla dessa uppgifter kan jag se hur mycket tid som g\u00e5r f\u00f6rlorad och i vilket steg det uppst\u00e5r problem. Tabellen nedan hj\u00e4lper mig att v\u00e4lja verktyg och fokuserar p\u00e5 vad jag beh\u00f6ver i n\u00e4sta m\u00e4tomg\u00e5ng. Den fungerar som <strong>\u00d6nskelista<\/strong> f\u00f6r planeringen av sessionen.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Aspekt<\/th>\n      <th>Tracepoints<\/th>\n      <th>Prestationsh\u00e4ndelser (perf)<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Stabilitet<\/td>\n      <td>Statiska h\u00e4ndelser p\u00e5 olika st\u00e4llen i k\u00e4rnan, i stort sett versionsberoende<\/td>\n      <td>Beror p\u00e5 h\u00e5rdvarur\u00e4knare och k\u00e4rnimplementering<\/td>\n    <\/tr>\n    <tr>\n      <td>Overhead<\/td>\n      <td>L\u00e5g, h\u00e4ndelsestyrd<\/td>\n      <td>Mycket l\u00e5g vid provtagningen<\/td>\n    <\/tr>\n    <tr>\n      <td>Fokus<\/td>\n      <td>Konkreta h\u00e4ndelser i delsystemen<\/td>\n      <td>Systemomfattande nyckeltal<\/td>\n    <\/tr>\n    <tr>\n      <td>Dataformat<\/td>\n      <td>Strukturerad, maskinl\u00e4sbar<\/td>\n      <td>M\u00e4tv\u00e4rden, prover, profiler<\/td>\n    <\/tr>\n    <tr>\n      <td>Typisk anv\u00e4ndning<\/td>\n      <td>\u201eVad\u201c och \u201en\u00e4r\u201c i en v\u00e4g<\/td>\n      <td>\u201eHur mycket\u201c och \u201eHur dyrt\u201c<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Jag brukar b\u00f6rja med prestandatester f\u00f6r att hitta en grov flaskhals och g\u00e5r sedan in p\u00e5 detaljerna med sp\u00e5rningspunkter. Omv\u00e4nt aktiverar jag f\u00f6rst sp\u00e5rningspunkterna n\u00e4r jag vill f\u00f6rst\u00e5 en v\u00e4g och l\u00e4gger sedan till r\u00e4knare f\u00f6r <strong>Kvantisering<\/strong>. Denna ordning sparar tid och g\u00f6r datainsamlingen m\u00e5linriktad. Det \u00e4r viktigt att h\u00e5lla koll p\u00e5 h\u00e4ndelsefrekvensen s\u00e5 att inga data g\u00e5r f\u00f6rlorade. P\u00e5 s\u00e5 s\u00e4tt h\u00e5ller jag mig uppdaterad med <strong>M\u00e4tdisciplin<\/strong> p\u00e5 r\u00e4tt kurs.<\/p>\n\n<h2>Gr\u00e4nser, validering och korskontroller<\/h2>\n<p>Inte alla drivrutinsv\u00e4gar \u00e4r genomg\u00e5ende instrumenterade, och vissa s\u00e4llsynta felv\u00e4gar syns inte i loggarna. D\u00e4rf\u00f6r j\u00e4mf\u00f6r jag m\u00e4tningarna med alternativa datak\u00e4llor: r\u00e4knare, loggar, syntetiska tester, men ocks\u00e5 enkla tidsm\u00e4tningar i sj\u00e4lva tj\u00e4nsten. Om sp\u00e5r och r\u00e4knare inte st\u00e4mmer \u00f6verens kontrollerar jag f\u00f6rst filter och dataf\u00f6rluster, d\u00e4refter klockbasen. Jag \u00e4r dessutom uppm\u00e4rksam p\u00e5 st\u00f6rningar: debug-builds, h\u00f6ga loggningsfrekvenser eller s\u00e4kerhetshooks kan f\u00f6rskjuta latenser. Endast genom korskontroller kan jag med s\u00e4kerhet fastst\u00e4lla att en uppt\u00e4ckt orsak verkligen \u00e4r den avg\u00f6rande faktorn f\u00f6r optimeringen.<\/p>\n\n<h2>Exempel: M\u00e4ta lagringsf\u00f6rdr\u00f6jningar<\/h2>\n\n<p>Jag aktiverar sp\u00e5rpunkter i blockstacken f\u00f6r inl\u00e4mning och avslutning av I\/O-f\u00f6rfr\u00e5gningar. Medan ett belastningstest p\u00e5g\u00e5r registrerar jag tidsst\u00e4mplar, f\u00f6rfr\u00e5gans storlek, enhet och PID f\u00f6r att <strong>F\u00f6rdr\u00f6jningar<\/strong> f\u00f6r varje process. D\u00e4refter sorterar jag efter varaktighet och genererar histogram som visar toppar och avvikelser. I ett andra steg l\u00e4gger jag till CPU-r\u00e4knare f\u00f6r att kontrollera om ber\u00e4kningsbelastningen och I\/O-f\u00f6rdr\u00f6jningarna h\u00e4nger ihop. Till slut justerar jag I\/O-schemal\u00e4ggaren, k\u00f6djupet eller lagringsbackenden och upprepar m\u00e4tningen tills <strong>M\u00e5l<\/strong> har uppn\u00e5tts p\u00e5 ett tillf\u00f6rlitligt 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\/09\/linux_tracepoints_analyse_4723.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Exempel: F\u00f6rst\u00e5 latenser i schemal\u00e4ggare och v\u00e4ckningsmekanismer<\/h2>\n<p>N\u00e4r tr\u00e5dar uppvisar \u201espiky\u201c beteende m\u00e4ter jag tiden fr\u00e5n sched:sched_wakeup till den f\u00f6rsta sched:sched_switch p\u00e5 m\u00e5l-CPU:n. P\u00e5 s\u00e5 s\u00e4tt skiljer jag v\u00e4ntetiden i k\u00f6rk\u00f6erna fr\u00e5n den faktiska exekveringstiden. Jag grupperar efter CPU, prioritet och policy (CFS\/RT) f\u00f6r att uppt\u00e4cka avvikelser \u2013 till exempel n\u00e4r tr\u00e5dar med h\u00f6gt CPU-behov hamnar p\u00e5 \u00f6verbelastade k\u00e4rnor trots att det finns lediga k\u00e4rnor. Om jag ser m\u00e5nga v\u00e4ckningar \u00f6ver flera CPU:er kontrollerar jag affiniteter och NUMA-tilldelning. I kombination med Perf-r\u00e4knare f\u00f6r LLC-missar kan jag fastst\u00e4lla om felaktig placering driver upp cache-latenser. En liten justering av tr\u00e5daffinitet eller schemal\u00e4ggningsparametrar ger ofta omedelbara m\u00e4tbara f\u00f6rb\u00e4ttringar h\u00e4r.<\/p>\n\n<h2>Tips f\u00f6r produktiva arbetsmilj\u00f6er<\/h2>\n\n<p>Jag aktiverar sp\u00e5rning utanf\u00f6r underh\u00e5llsf\u00f6nstren endast med tydliga filter och korta tidsf\u00f6nster. Innan dess kontrollerar jag h\u00e4ndelsefrekvenserna p\u00e5 ett testsystem f\u00f6r att se till att jag <strong>Buffert<\/strong> st\u00e4ller in det p\u00e5 l\u00e4mpligt s\u00e4tt. I produktiva milj\u00f6er anv\u00e4nder jag aggregeringar inbyggda i k\u00e4rnan f\u00f6r att minska belastningen i anv\u00e4ndarutrymmet. F\u00f6r snabba ad hoc-diagnoser \u00e4r det v\u00e4rt att ta en titt p\u00e5 <a href=\"https:\/\/webhosting.de\/sv\/bpftrace-snabbare-upptaeckt-och-diagnostik-av-serverproblem-vid-webbhotell\/\">bpftrace i webbhotellet<\/a>, eftersom jag d\u00e5 f\u00e5r de f\u00f6rsta svaren inom n\u00e5gra minuter. Jag dokumenterar varje m\u00e4tk\u00f6rning omedelbart, s\u00e5 att jag <strong>Repeterbarhet<\/strong> sann.<\/p>\n\n<h2>S\u00e4kerhet, r\u00e4ttigheter och gr\u00e4nser f\u00f6r isolering<\/h2>\n<p>Sp\u00e5rning p\u00e5 k\u00e4rnniv\u00e5 kr\u00e4ver l\u00e4mpliga beh\u00f6righeter. Jag ser till att tracefs \u00e4r korrekt monterat och kontrollerar systemomfattande inst\u00e4llningar som perf_event_paranoid eller kptr_restrict, som kan d\u00f6lja detaljer. I k\u00e4nsliga milj\u00f6er begr\u00e4nsar jag vem som f\u00e5r aktivera sp\u00e5rning och fastst\u00e4ller rutiner f\u00f6r godk\u00e4nnande. Jag anonymiserar processnamn eller IP-adresser n\u00e4r data m\u00e5ste delas och definierar tydliga regler f\u00f6r hur l\u00e4nge sp\u00e5rningsdata ska sparas. I containrar g\u00e4ller f\u00f6ljande: Root i containern har inte automatiskt beh\u00f6righet att l\u00e4sa h\u00e4ndelser i v\u00e4rdk\u00e4rnan. Jag sp\u00e5rar d\u00e4rf\u00f6r helst fr\u00e5n v\u00e4rden eller arbetar med explicita cgroup-filter f\u00f6r att endast registrera den avsedda arbetsbelastningen.<\/p>\n\n<h2>Checklista och vanliga misstag<\/h2>\n\n<p>Jag definierar f\u00f6rst fr\u00e5gan, sedan delsystemen och d\u00e4refter h\u00e4ndelserna \u2013 i den ordningen. Jag kontrollerar att jag verkligen har angett alla n\u00f6dv\u00e4ndiga f\u00e4lt innan jag startar belastningstestet. Gl\u00f6m inte att st\u00e4lla in filter; ofiltrerade sessioner genererar snabbt enorma datam\u00e4ngder och \u00f6verbelastar <strong>Minne<\/strong>. Jag j\u00e4mf\u00f6r k\u00e4rnversionen, h\u00e4ndelsens namn och verktygsinst\u00e4llningarna f\u00f6r att undvika missf\u00f6rst\u00e5nd. F\u00f6r mer avancerade eBPF-arbetsfl\u00f6den ut\u00f6kar jag konfigurationen med <a href=\"https:\/\/webhosting.de\/sv\/bcc-verktyg-linux-prestanda-ebpf-oevervakbarhet-fokus\/\">BCC-verktyg<\/a>, f\u00f6r att f\u00f6rbehandla komplexa m\u00e4tv\u00e4rden i k\u00e4rnan och endast exportera aggregerade signaler, vilket <strong>Klarhet<\/strong> skapar.<\/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\/09\/linux-performance-analyse-5921.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Sp\u00e5rning i containrar och virtuella maskiner<\/h2>\n<p>I container-milj\u00f6er filtrerar jag helst efter cgroup f\u00f6r att se just den tj\u00e4nst som intresserar mig. P\u00e5 s\u00e5 s\u00e4tt kan jag m\u00e4ta i milj\u00f6er med flera anv\u00e4ndare utan att registrera andra arbetsbelastningar. N\u00e4r det g\u00e4ller virtuella maskiner g\u00e4ller att jag bara ser vad som h\u00e4nder i g\u00e4stk\u00e4rnan. Virtio-\/vhost-v\u00e4gar och hypervisorsidan f\u00f6rblir osynliga utan v\u00e4rdsp\u00e5rning. F\u00f6r att m\u00e4ta latens fr\u00e5n \u00e4ndpunkt till \u00e4ndpunkt korrelerar jag d\u00e4rf\u00f6r g\u00e4st- och v\u00e4rdm\u00e4tningar n\u00e4r jag vill ha \u00f6verblick \u00f6ver b\u00e5da p\u00e5verkansomr\u00e5dena. Dessutom beaktar jag tidssynkroniseringen mellan v\u00e4rd och g\u00e4st, s\u00e5 att jag p\u00e5 ett meningsfullt s\u00e4tt kan \u00f6verlagra loggar, m\u00e4tv\u00e4rden och sp\u00e5rningar. Med denna disciplin f\u00f6rblir analyserna tillf\u00f6rlitliga \u00e4ven i virtualiserade milj\u00f6er.<\/p>\n\n<h2>Att ta med sig: De viktigaste l\u00e4rdomarna<\/h2>\n\n<p>Tracepoints ger mig stabila f\u00f6rankringspunkter i k\u00e4rnan och levererar strukturerade h\u00e4ndelser utan on\u00f6digt skr\u00e4p. Jag anv\u00e4nder dem f\u00f6r att f\u00e5 exakta <strong>Processer<\/strong> att f\u00f6rst\u00e5, identifiera flaskhalsar och m\u00e4tbart utv\u00e4rdera f\u00f6r\u00e4ndringar. Med ftrace, perf, LTTng och eBPF v\u00e4ljer jag det verktyg som passar b\u00e4st f\u00f6r m\u00e5let och kombinerar dem vid behov. En tydlig fr\u00e5gest\u00e4llning, strikta filter och l\u00e4mpliga buffertstorlekar h\u00e5ller belastningen l\u00e5g och data anv\u00e4ndbara. P\u00e5 s\u00e5 s\u00e4tt hittar jag orsakerna snabbare, kan bel\u00e4gga effekten av mina \u00e5tg\u00e4rder och h\u00e5lla <strong>Prestanda<\/strong> st\u00e4ndigt under kontroll.<\/p>","protected":false},"excerpt":{"rendered":"<p>L\u00e4r dig hur du anv\u00e4nder tracepoints i Linux-k\u00e4rnan f\u00f6r en effektiv prestandaanalys. Artikeln visar vilka Linux-sp\u00e5rningsverktyg som bygger p\u00e5 tracepoints och hur du kan identifiera verkliga flaskhalsar med hj\u00e4lp av dem.<\/p>","protected":false},"author":1,"featured_media":21624,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[922],"tags":[],"class_list":["post-21631","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologie"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":"1790008692:1","_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":"111","_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":"kernel tracepoints","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":"21624","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/21631","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=21631"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/21631\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/21624"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=21631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=21631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=21631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}