programmatūra · 6 min · 26.07.2026

Linux 7.2 plānotājs sagrupē pavedienus vienā kešatmiņā: hackbench ātrāks par 30 %

Linux 7.2 kodola plānotājs pirmo reizi ņem vērā, kurš procesora kodols dala kešatmiņu ar kuru. Ielāpu kopa sched/cache jeb Cache Aware Scheduling ir iekļauta 7.2 apvienošanas logā. Uz Intel Sapphire Rapids servera, kur vienu pēdējā līmeņa kešatmiņu dala 60 kodoli, hackbench ar vienu grupu pēc tam pabeidz darbu apmēram 30 % ātrāk.

Iemesls, kāpēc tas vispār bija vajadzīgs, ir mūsdienu servera procesora uzbūve. Vienā ligzdā mēdz būt vairāki pēdējā līmeņa kešatmiņas domēni: AMD tie ir CCX bloki, Intel jaunākajos Xeon procesoros vairāki čipleti. Ja divi pavedieni pieder vienai programmai, tie parasti strādā ar tiem pašiem datiem. Vecais plānotājs par to nezināja neko. Tas skaitīja slodzi un centās kodolus noslogot vienmērīgi, tāpēc viena procesa pavedieni mierīgi izklīda pa visiem domēniem. Rezultāts ir kešatmiņas rindas, kas staigā šurpu turpu pa starpsavienojumu, kamēr pavedieni gaida.

Ko dara jaunais kods

Katrs process saņem vēlamo kešatmiņas domēnu, ielāpu terminoloģijā preferred LLC. Izvēli nosaka tas, kur process sāka darbu un kur atrodas tā atmiņa. Tālāk kodols ik pēc noteikta perioda pārrēķina, cik daudz šī procesa datu tiešām sēž vēlamajā kešatmiņā. Slodzes izlīdzināšanā priekšroku dabū tie pavedieni, kuri grib nokļūt savā domēnā.

Lai no tā nesanāktu jauna problēma, kodā ir divi ierobežotāji. Pavedienus uz vēlamo domēnu velk tikai tad, ja tā kodolu vidējais noslogojums ir zem llc_overload_pct sliekšņa, pēc noklusējuma 50 %. Procesi ar ļoti daudz pavedieniem no visas shēmas tiek izslēgti: simts pavedienu vienā kešatmiņas domēnā nesaliksi un mēģinājums to darīt sabojātu slodzes izlīdzināšanu visai mašīnai.

Plānotājs cenšas panākt, ka pavedieni, kas dala datus, nonāk vienā pēdējā līmeņa kešatmiņas domēnā. Tas uzlabo kešatmiņas lokalitāti un samazina kešatmiņas kļūdas. Tā ielāpu kopas mērķi formulē LWN apraksts.

Kur tas dod un kur nedod

Autoru mērījumi, kurus apkopo LWN raksts par Cache Aware Scheduling, nāk no trim dažādām mašīnām. Skaitļi atšķiras ļoti.

  • Intel Sapphire Rapids, 60 kodoli vienā kešatmiņas domēnā: hackbench ar vienu grupu apmēram 30 % ātrāk, schbench 99. percentiles pamodināšanas aizture par 9 līdz 38 % labāka, ChaCha20 caurlaide plus 10 %. Stream un netperf paliek turpat.
  • AMD Milan, 64 kodoli mezglā, sadalīti astoņos CCX: starpība paliek mērījumu troksnī.
  • AMD Genoa, 32 kodoli mezglā, divi CCX: ar agresīvākiem iestatījumiem ChaCha20 iegūst 44 %, ar noklusējumiem nemainās nekas.

Viena regresija arī ir. Netperf ar 360 pāriem uz Sapphire Rapids nokrita par 8,24 %, ko autori pieskaita mērījumu izkliedei.

No šiem skaitļiem izriet praktiskā daļa. Ieguvums parādās tikai tad, kad procesors sadalīts vairākos lielos kešatmiņas domēnos un darba slodze tiešām dala datus starp pavedieniem. Uz astoņu kodolu darbstacijas ar vienu domēnu neko nemanīsi.

Slēdži atkļūdošanas failsistēmā

Visi regulatori atrodas mapē /sys/kernel/debug/sched/ un tos var mainīt darbības laikā, bez kodola pārstartēšanas.

  • llc_aggr_tolerance no 0 līdz 100 nosaka, cik agresīvi grupēt. Nulle izslēdz funkciju pilnībā. Lielākas vērtības pieņem arī procesus ar lielāku atmiņas nospiedumu vai vairāk pavedieniem.
  • llc_overload_pct, pēc noklusējuma 50, ir noslogojuma robeža, virs kuras vēlamais domēns jaunus pavedienus vairs nepieņem.
  • llc_imb_pct, pēc noklusējuma 20, ir pieļaujamā nelīdzsvarotība starp domēniem.
  • llc_epoch_period, pēc noklusējuma 10 ms, nosaka, cik bieži kodols pārrēķina kešatmiņas aizņemtību.
  • llc_epoch_affinity_timeout, pēc noklusējuma 50 ms, ir laiks, pēc kura neaktīvs process zaudē savu vēlamo domēnu.

Genoa mērījumi labi parāda, kāpēc šie skaitļi ir svarīgi. Ar noklusējumiem tas pats ChaCha20 tests neiegūst nekā, ar augstāku llc_aggr_tolerance vērtību iegūst 44 %. Kas no visa tā negrib neko, ieraksta nulli un plānotājs uzvedas tāpat kā 7.1.

Kas to uzrakstīja un cik ilgi

Lielāko daļu ielāpu parakstījuši Intel inženieri Tim Chen un Chen Yu. Infrastruktūru, uz kuras tas stāv, uzlika plānotāja uzturētājs Peter Zijlstra. Recenzijās un labojumos piedalījās arī AMD, ARM un IBM izstrādātāji, tostarp Vincent Guittot, Juri Lelli un Dietmar Eggemann. Pirmā versija LKML nonāca 2025. gada oktobrī, otrā decembrī, trešā versija ar 21 ielāpu šā gada februārī. Pa ceļam Tim Chen sūtīja atsevišķu labojumu virkni pret pārmērīgu grupēšanu, kad plānotājs pavedienus dzina vienā domēnā pat tad, kad tas jau bija pilns.

Tik gara recenzija plānotāja kodam ir normāla. Katra izmaiņa sched/fair failā var kādam noņemt procentus tur, kur to negaida, tāpēc Zijlstra ielāpus turēja atsevišķā sched/cache zarā, līdz tie bija nostabilizējušies.

Pārējais tajā pašā ciklā

Kešatmiņas plānotājs nav vienīgais ātrdarbības labojums 7.2. Phoronix apkopotajā funkciju sarakstā ir arī MGLRU uzlabojums, kas testos deva MongoDB no 30 līdz 100 % lielāku caurlaidi. /proc/filesystems lasīšana kļuva līdz 444 % ātrāka. Samazināta konteineru izbeigšanas un atmontēšanas aizture, paātrinātas anonīmās caurules, kas noder čaulas skriptiem.

Aparatūras pusē pienāca AMDGPU atbalsts HDMI 2.1 FRL, AMD ISP4 draiveris tīmekļa kamerām HP ZBook Ultra G1a klēpjdatoros un USB4STREAM datu pārsūtīšanai pa USB4 vai Thunderbolt. Apple M3 mašīnas tagad var uzsāknēties, kaut praktiskas jēgas no tā vēl maz. Intel TDX drošības atjauninājumus var uzlikt darbības laikā, neveicot pārstartēšanu.

Linux 7.2-rc4 iznāca 19. jūlijā. Kodolā tobrīd bija 43 898 743 rindas, no kurām vairāk nekā 6,3 miljoni pieder AMD grafikas draiverim. Stabilā versija gaidāma augusta beigās. Pirms tam Torvalds aicināja rc kodolu testēt uz iespējami dažādākas aparatūras. Tempu, kādā izmaiņas ienāk kodolā vasaras vidū, viņš nosauca par jauno normālību.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie