Liten Linux-förändring ger stor effekt

Permalänk
Melding Plague

Liten Linux-förändring ger stor effekt

En ändring i version 6.13 av Linux-kärnan utlovar kraftigt sänkta elräkningar för datacenter.

Läs hela artikeln här

Visa signatur

Observera att samma trivselregler gäller i kommentarstrådarna som i övriga forumet och att brott mot dessa kan leda till avstängning. Kontakta redaktionen om du vill uppmärksamma fel i artikeln eller framföra andra synpunkter.

Permalänk
Medlem

En interrupt är ju en signal till operativsystemet att en hårdavaruenhet behöver göra ett jobb "just nu". IRQ-kod ska inte ta lång tid att exekvera, bara det nödvändigaste, och sen släppa tillbaka kontrollen till OS:et. Excempel på IRQ är t.ex nätverkspaket som nämnts, men också allt annat som BT, ljud, grafik, I/O-enheter (mus/tangentbord), lagring m.m. IRQ-kod finns väl framförallt i drivrutiner.
Att de bygger om hanteringen här med att IRQ "kan vänta lite" verkar ju konceptuellt märkligt, men jag antar att de vet vad de gör med den här förändringen. Uppenbarligen så är fördröjningarna inom marginalerna.

EDIT: Efter att ha läst på lite bättre ser jag att ändringen endast verkar ha med just nätverkshårdvara att göra, inte övriga IRQ.

Permalänk
Medlem

Lite goda nyheter i ett annars dystert nyhetsflöde!

Visa signatur

Stationär: Core i9 13900k | Asus X790 ROG Strix Gaming-F | 32GB DDR5 | RX 7900 XT | Lian Li PC-O11 dynamic evo
Laptop: Macbook Pro 16" | Apple M1 Max

Permalänk
Medlem

"enkelt uttryckt ber processorn att vänta ett ögonblick så att den hinner slutföra en viktig uppgift."

Nja, en interrupt i det här fallet används som ett sätt för nätverkskortet att få operativsystemet att hantera inkommande data exempelvis, det är ett sätt för I/O-enheter att meddela OS att de behöver ta hand om saker på hårdvarans "förmaning". Läsa data ur hårdvarans buffert.

Ett annat exempel är gamla PS/2-kontakter för tangentbord. Tangentbordet triggar en interrupt varje gång en tangent trycks ned och i den interrupt-proceduren läser OS av vilket tangent som tycktes ned.

Permalänk
Medlem
Skrivet av Barsk66:

En interrupt är ju en signal till operativsystemet att en hårdavaruenhet behöver göra ett jobb "just nu". IRQ-kod ska inte ta lång tid att exekvera, bara det nödvändigaste, och sen släppa tillbaka kontrollen till OS:et. Excempel på IRQ är t.ex nätverkspaket som nämnts, men också allt annat som BT, ljud, grafik, I/O-enheter (mus/tangentbord), lagring m.m. IRQ-kod finns väl framförallt i drivrutiner.
Att de bygger om hanteringen här med att IRQ "kan vänta lite" verkar ju konceptuellt märkligt, men jag antar att de vet vad de gör med den här förändringen. Uppenbarligen så är fördröjningarna inom marginalerna.

Misstänker att om man har kod som ursprungligen designades för en 386a på 20MHz så kan man vänta några fler cykler innan man exekverar en IRQ om processorn är ett par hundra gånger snabbare.

Visa signatur

5900X | 6700XT

Permalänk
Medlem
Skrivet av Barsk66:

En interrupt är ju en signal till operativsystemet att en hårdavaruenhet behöver göra ett jobb "just nu". IRQ-kod ska inte ta lång tid att exekvera, bara det nödvändigaste, och sen släppa tillbaka kontrollen till OS:et. Excempel på IRQ är t.ex nätverkspaket som nämnts, men också allt annat som BT, ljud, grafik, I/O-enheter (mus/tangentbord), lagring m.m. IRQ-kod finns väl framförallt i drivrutiner.
Att de bygger om hanteringen här med att IRQ "kan vänta lite" verkar ju konceptuellt märkligt, men jag antar att de vet vad de gör med den här förändringen. Uppenbarligen så är fördröjningarna inom marginalerna.

Mer läsvärt om du faktiskt undrar vad det är de gjort:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linu...

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || Sapphire Pulse RX 7900 XTX || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av evil penguin:

Mer läsvärt om du faktiskt undrar vad det är de gjort:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linu...

Tack. Jag läste väl inte allt i detalj, men ändringen verkar vara centrerad just runt nätverkshårdvara och inte övriga delsystem såvitt jag kan se. Men man kan väl anta av detta att just nätverksstacken drar en hel del IRQ-anrop och optimering här ger ett bra utfall.

Permalänk
Medlem
Skrivet av evil penguin:

Mer läsvärt om du faktiskt undrar vad det är de gjort:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linu...

Här finns ännu mer läsvärd information: https://dl.acm.org/doi/pdf/10.1145/3626780

Permalänk
Medlem

Mycket nytt i 6.13 även för mer normala användare:
https://www.omgubuntu.co.uk/2025/01/linux-kernel-6-13-release...

Kör däremot 6.12.3 i några månader till innan jag hoppar till 6.13.

Ser bara 6.13-rc3 här för Ubuntu:
https://kernel.ubuntu.com/mainline/

Permalänk
Medlem

OT. Hur går det med rapporteringen kring DeepSeek? SweLångsammers!

Visa signatur

Antagligen en bättre dator än vad du har!

Permalänk
Medlem

Dock använder jättarna oftast distros för datacenter.

Snackar vi senaste RHEL/CentOS 10 så ligger dom på kernel 6.12, och är låst till det under hela version 10 - som kommer supportas till 2030.

Visa signatur

Intel i9-12900K | Asus STRIX Z690-I | 32 GB DDR5-6400 CL30 | AMD Radeon RX 7900 XTX | WD Black SN850 1 TB
Asus ROG Loki SFX-L 750W | SSUPD Meshlicious | Arctic Cooling Freezer II 280 | Alienware AW3423DWF

Permalänk
Medlem

Om jag förstått det rätt så handlar det om att växla mellan IRQ och busy-polling beroende på nätverksbelastning. IRQ är effektivt när belastningen är låg eftersom CPUn då kan vila och låta nätverkskortet säga till när det finns paket att hantera, men vid hög belastning så orsakar det onödig overhead när IRQ avbryter programmet hela tiden.

Busy-polling innebär istället att CPUn frågar nätverkskortet om det finns paket att hantera i en loop, vilket är oeffektivt vid låg belastning eftersom CPUn då ligger på 100% belastning hela tiden även om det inte finns något att göra men effektivt vid hög belastning eftersom CPUn kan fråga efter fler paket när den är redo istället för att bli avbruten av IRQ hela tiden.

Permalänk
Medlem

Om det sänker elräkningen så ger det väl liten effekt?

Permalänk
Medlem
Skrivet av m4gnify:

Om det sänker elräkningen så ger det väl liten effekt?

Fantastisk kommentar, jag nominerar den till årets kommentar redan nu

Permalänk
Medlem
Skrivet av superapan:

Dock använder jättarna oftast distros för datacenter.

Snackar vi senaste RHEL/CentOS 10 så ligger dom på kernel 6.12, och är låst till det under hela version 10 - som kommer supportas till 2030.

De brukar backporta viktiga funktioner. Lär garanterat göras om de kan spara mkt pengar på det.

Permalänk
Medlem

Jag anar ugglor i mossen, känns lite som att hävda om kundtjänsten slutar svara på frågor, så ger några kunder upp och löser det själva, så kan kundtjänsten bli mer effektiv.

Det här kan nog leda till system som inte svara lika snabbt och att paket med farlig data får det lättare att sprida sig obemärkt, men vad vet jag egentligen, kanske är det här en toppenlösning.
Jag skulle dock inte välja att fokusera på elbesparing utan istället mer effektiv kod, adblocker är ju också elbesparing med samma logik.

Visa signatur

*5800X|B550M|64GB|RTX2080S|GX750W|Core V21|280AIO|2TB+2TB|1440p 240Hz

AMD Ryzen 7 @4,95GHz|Gigabyte Aorus Elite(rev1.3)|Corsair 2x32 LPX Vengeance 2666C16 @3600C20|Gigabyte Windforce OC @Stock|Seasonic Focus| Thermaltake mATX kub|Arctic freezer II| NVMe SSD PCIE 4.0x4 Samsung 980 Pro 7000/5100 + 2,5" HDD Toshiba 1TB & Seagate 1TB i RAID 0|Acer Nitro XV272Uz 27" IPS 270Hz @240Hz.

Permalänk
Medlem
Skrivet av Fenrisulvfan:

Jag anar ugglor i mossen, känns lite som att hävda om kundtjänsten slutar svara på frågor, så ger några kunder upp och löser det själva, så kan kundtjänsten bli mer effektiv.

De säger ju specifikt att just det inte händer... De har inget att vinna på att ljuga om saken.

Visa signatur

Lian Li TU150 Silver # ASUS ROG Crosshair VIII Impact [AMD Ryzen 3700X|G.Skill Trident Z Neo 3600MHz CL16 (2x16GB)|Samsung 970 EVO plus (500GB)|Intel 660p (2TB)|MSI RTX 2070 Super Ventus OC 8GB] + Seasonic FOCUS SGX 650W #

Permalänk
Medlem
Skrivet av mickeko:

De säger ju specifikt att just det inte händer... De har inget att vinna på att ljuga om saken.

Jag tvivlar på att de testat alla möjliga och ej ännu möjliga scenarion, men det fungerar säker bra i 99% av fallen nu.

Visa signatur

*5800X|B550M|64GB|RTX2080S|GX750W|Core V21|280AIO|2TB+2TB|1440p 240Hz

AMD Ryzen 7 @4,95GHz|Gigabyte Aorus Elite(rev1.3)|Corsair 2x32 LPX Vengeance 2666C16 @3600C20|Gigabyte Windforce OC @Stock|Seasonic Focus| Thermaltake mATX kub|Arctic freezer II| NVMe SSD PCIE 4.0x4 Samsung 980 Pro 7000/5100 + 2,5" HDD Toshiba 1TB & Seagate 1TB i RAID 0|Acer Nitro XV272Uz 27" IPS 270Hz @240Hz.

Permalänk
Medlem
Skrivet av Fenrisulvfan:

Jag tvivlar på att de testat alla möjliga och ej ännu möjliga scenarion, men det fungerar säker bra i 99% av fallen nu.

Varken kernelutvecklare eller professorer i datateknik brukar i allmänhet vara klåpare när det kommer till de här sakerna men de är ofta öppna för tips om du hör av dig till dem och förklarar vad de har missat!

Här finns kontaktuppgifter till Martin Karsten som nämns i artikeln, forskare i mjukvara, nätverk och prestandaoptimering: https://cs.uwaterloo.ca/~mkarsten/

Permalänk
Medlem
Skrivet av Fenrisulvfan:

Jag tvivlar på att de testat alla möjliga och ej ännu möjliga scenarion, men det fungerar säker bra i 99% av fallen nu.

Det är inte meningen att det ska fungera i 99% av fallen, det är en optimering för ett specifikt användningsfall och kräver att applikationer uttryckligen använder funktionaliteten. Det har även tagit många revisioner med mycket community-feedback innan koden till slut accepterades, så den är nog rätt mogen vid det här laget.

Permalänk
Medlem
Skrivet av Fenrisulvfan:

Det här kan nog leda till system som inte svara lika snabbt och att paket med farlig data får det lättare att sprida sig obemärkt, men vad vet jag egentligen, kanske är det här en toppenlösning.

Det är inte paket på posten vi pratar om direkt..

Permalänk
Medlem

Fler rader.

Om nu 30 rader kod fixade 30% bättre. Synd att han inte skrev 95 rader då 😂.
Ne skämt åsido, kul när de hittar en effektivisering på ändå rätt få rader

Permalänk
Skrivet av Fenrisulvfan:

Jag anar ugglor i mossen, känns lite som att hävda om kundtjänsten slutar svara på frågor, så ger några kunder upp och löser det själva, så kan kundtjänsten bli mer effektiv.

Det här kan nog leda till system som inte svara lika snabbt och att paket med farlig data får det lättare att sprida sig obemärkt, men vad vet jag egentligen, kanske är det här en toppenlösning.
Jag skulle dock inte välja att fokusera på elbesparing utan istället mer effektiv kod, adblocker är ju också elbesparing med samma logik.

Rätt beskrivning är nog mer effektiv kod, mer i stil med att ta en större bit åt gången istället för många små. Men det tar en liten längre stund att samla en större bit också, därför får en liten ändring stor effekt. "Längre stund" i detta fall är antagligen räknat i klockcykler, och de går i GHz så en handfull nanosekunder.

Däremot ditt andra förslag är guld, jag tycker vi inför AdBlock som standard och sparar alla dessa pengar!

Permalänk
Medlem

Apropå adblock och sådant... Tänkt om vi kunde acceptera 0,1 sekunders väntetid på google istället för idag, och ta bort all skit på internet.. läste också att varje dag/timme laddas det upp mer innehåll på youtube än vad som ryms på en livstid. Detta ska sparas och lagras i alla format i en skådlig framtid. Osv osv osv.
Priset på energi (och lagring) är egentligen alldeles för lågt ... Och planeten är det som tar stryk.
Heja de som fortfarande optimerar!

Permalänk
Medlem
Skrivet av Fenrisulvfan:

Jag anar ugglor i mossen, känns lite som att hävda om kundtjänsten slutar svara på frågor, så ger några kunder upp och löser det själva, så kan kundtjänsten bli mer effektiv.

Det här kan nog leda till system som inte svara lika snabbt och att paket med farlig data får det lättare att sprida sig obemärkt, men vad vet jag egentligen, kanske är det här en toppenlösning.
Jag skulle dock inte välja att fokusera på elbesparing utan istället mer effektiv kod, adblocker är ju också elbesparing med samma logik.

inte alls vad som händer här. Det som händer här när IRQ tar mer energi än ren polling är när så pass mycket data kommer in att övriga delar av systemet redan är upptaget med att hantera den data som precis kom och nu kommer det en IRQ som avbryter det och säger "nu kom det lite till". Mycket effektivare då att helt ta bort IRQ:n och helt sonika hantera klart den data som du har och sedan bara kolla med NIC:en om det finns mer data, om det inte finns mer data så kan man slå på IRQ igen men om det finns data så är det bara att processa på och kolla igen nästa gång.

Dvs det handlar om tillfällen när IRQ avbryter hantering av sådant som precis triggats av IRQ. Vid low-latency uppsättningar så har man oftast tidigare konfiguerat kärnan så att den alltid gör busy-polling (dvs stänger alltid av IRQ) vilket ger betydligt lägre latens, dock extremt mycket högre enerianvändning om det inte skickas så pass mycket data vid tillfället.

Visa signatur

|Ryzen 5800x3d|RX 7900XTX Hellhound|Asus Prime X370 Pro|32GiB Corsair 3200MHz CL16 Vengeance|Corsair HX1000i|Fractal Define R5|LG 45GR95QE|Corsair K100|Razer DeathAdder V3 Pro|Ubuntu 24.04|

Permalänk
Medlem

Är skeptisk till detta med -30% energiförbrukning. Detta ändrar väl bara saker i CPUn, och om CPUn använder, säg, 30% av hela energiförbrukningen så betyder det att CPUn nu drar noll. Alltså måste CPUerna stå för långt mer än 30% av en datacenter, men redan kylningen kan stå för en tredjedel. Sen har vi all lagring och övrig nätverksutrustning...

Permalänk
Medlem
Skrivet av ajp_anton:

Är skeptisk till detta med -30% energiförbrukning. Detta ändrar väl bara saker i CPUn, och om CPUn använder, säg, 30% av hela energiförbrukningen så betyder det att CPUn nu drar noll. Alltså måste CPUerna stå för långt mer än 30% av en datacenter, men redan kylningen kan stå för en tredjedel. Sen har vi all lagring och övrig nätverksutrustning...

Vi pratar om servrar här, en enda EPYC 9686X har en TDP på 400W och du har ofta 2 i samma server. Kylningen finns ju där primärt för att få fort den värme som genereras av CPU:n. Ju mer / oftare som du kan få CPU:n att klocka ner desto mindre energi drar CPU:n och desto mindre värme måste du kyla.

Switchar och routrar genererar inte speciellt mycket värme (i relation till en server CPU).

Visa signatur

|Ryzen 5800x3d|RX 7900XTX Hellhound|Asus Prime X370 Pro|32GiB Corsair 3200MHz CL16 Vengeance|Corsair HX1000i|Fractal Define R5|LG 45GR95QE|Corsair K100|Razer DeathAdder V3 Pro|Ubuntu 24.04|

Permalänk
Medlem

Många bra och initierade svar här. Hade ingen vidare koll på IRQ innan, så tack för infon!

Permalänk
Datavetare
Skrivet av perost:

Om jag förstått det rätt så handlar det om att växla mellan IRQ och busy-polling beroende på nätverksbelastning. IRQ är effektivt när belastningen är låg eftersom CPUn då kan vila och låta nätverkskortet säga till när det finns paket att hantera, men vid hög belastning så orsakar det onödig overhead när IRQ avbryter programmet hela tiden.

Busy-polling innebär istället att CPUn frågar nätverkskortet om det finns paket att hantera i en loop, vilket är oeffektivt vid låg belastning eftersom CPUn då ligger på 100% belastning hela tiden även om det inte finns något att göra men effektivt vid hög belastning eftersom CPUn kan fråga efter fler paket när den är redo istället för att bli avbruten av IRQ hela tiden.

Linux har sedan väldigt långt tillbaka (NAPI från 2002) växlat mellan att driva nätverkskort med en kombination av IRQ och busy-polling.

Att till 100 % låta applikationer styra polling är bra så långe som applikationer uppför sig, men blir katastrofalt om den inte gör det. Så går inte att köra en sådan modell med mindre än att då helt räkna applikationen som en del av OS-kärnan.

Nyheten här är egentligen otroligt simpel: en till timer.

Processen i NAPI är att NIC ger ett RX IRQ när ett paket kommer in. "Top-half" av IRQ-rutinen maskar då den IRQ-kanalen och schemalägger ett "soft-IRQ" som hanterar paketet. I detta läge kommer alltså inga fler IRQs.

ALLA paket (eller normalt alla paket, finns en övre "budget" när man låter andra saker komma emellan men normalfallet är alla) processas sedan i soft-IRQ. När man är klar slås IRQ på igen.

Här är nyheten. Vid hög last kommer ett nytt IRQ nästan direkt triggas igen, det kommer i praktiken hända innan applikationer haft en chans att beta av allt som redan kommit in -> detta leder till lägre IPC då cacha:ar trashas av frekventa kontext-switchar.

Istället för att direkt slå på IRQ när man processat alla paket startar man nu en timer. Om applikationen är "well-behaved" kan man nu helt driva all nätverkstrafik mot den RX-ringen med IRQ permanent avslaget så länge det kommer paket "tillräckligt snabbt".

Om applikationen får för sig att sluta poll:a av någon anledning triggar timer som slår på IRQ så inte andra applikationer blir lidande. "Worst case tail-latency" begränsas då av denna timer.

Så länge applikationen uppför sig så kommer paket drivas av att den rätt snabbt går in för att kolla efter paket.

Besparingen kommer av att det är mer effektivt att driva trafik med IRQ avslaget vid hög last. Alt. om man kör out-of-kernel polling (t.ex. via DPDK) så är vinsten att detta ger nästan samma prestanda, fast utan extremt hög effekt när det kommer få paket.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av superapan:

Dock använder jättarna oftast distros för datacenter.

Snackar vi senaste RHEL/CentOS 10 så ligger dom på kernel 6.12, och är låst till det under hela version 10 - som kommer supportas till 2030.

RHEL och dess klon kör faktiskt Kernel 5.14.0-503.11.*