A Linux 7.0 fejlesztési ciklusában a memóriakezelésért felelős alrendszer számos olyan optimalizációval gazdagodott, amelyek nemcsak mérhető gyorsulást, hanem jobb energiahatékonyságot is ígérnek. Az MM (memory management) alrendszerbe bekerült módosítások különösen nagy memóriával rendelkező rendszereken, szervereken és hordozható gépeken hozhatnak látványos előrelépést. A fejlesztések fókuszában a hatékonyabb lapkezelés, az intelligensebb lapnullázás és a felesleges műveletek megszüntetése állt. A változtatások már most ígéretes benchmarkeredményeket mutatnak.
A Linux 7.0 beolvasztási időszakában a memóriakezeléssel kapcsolatos javításokat Andrew Morton továbbította, amelyeket végül Linus Torvalds hivatalosan is beemelt a Linux kernel forráskódjába. A megszokott módon ezek a változtatások elsősorban a teljesítményre és a hatékonyabb erőforrás-kezelésre koncentrálnak, különösen olyan környezetekben, ahol nagy mennyiségű RAM áll rendelkezésre.
Az egyik legérdekesebb újdonság a Zram tömörített adat-visszaírásának (compressed data writeback) bevezetése. A Zram eddig is tömörítve tárolta a memóriában lévő adatokat, azonban a háttértárra történő kiírás során nem optimális, tömörítetlen visszaírást alkalmazott. Az új megoldás ezzel szemben már tömörített formában kezeli az adatokat, ami csökkenti a CPU-terhelést és javítja az energiahatékonyságot, különösen laptopokon és alacsony fogyasztású rendszereken. Ez a fejlesztés jól illeszkedik a kernel hosszabb ideje tartó törekvéseihez, amelyek a mobil és hordozható eszközök üzemidejének növelését célozzák.
Szintén figyelemre méltó a hugepage-ekhez kapcsolódó módosítás, amely a nagy méretű memórialapok nullázását (page clearing) optimalizálja. A korábbi, széttagolt lapnullázási megközelítést egy folytonos lapkezelésre épülő módszer váltja fel, amely hatékonyabban használja ki a modern processzorok hardveres előtöltőit (hardware prefetcher). Emellett a kötegelt lapnullázás (batched clearing) lehetővé teszi, hogy a processzor nagyobb egységeket lásson egyetlen műveletként, ami bizonyos architektúrákon jelentős gyorsulást eredményez. A fejlesztés részleteit Oracle mérnöke, Ankur Arora ismertette, külön kiemelve, hogy egyes modern mikroarchitektúrák ilyenkor elkerülik a felesleges gyorsítótár-allokációt, ami nemcsak nagyobb memória-sávszélességet, hanem hatékonyabb cache-használatot is biztosít.
$ perf bench mem mmap -p $pg-sz -f demand -s 64GB -l 5
baseline +series
(GBps +- %stdev) (GBps +- %stdev)
pg-sz=2MB 11.76 +- 1.10% 25.34 +- 1.18% [*] +115.47% preempt=*
pg-sz=1GB 24.85 +- 2.41% 39.22 +- 2.32% + 57.82% preempt=none|voluntary
pg-sz=1GB (similar) 52.73 +- 0.20% [#] +112.19% preempt=full|lazyA Linux 7.0-ban emellett jelentősen felgyorsult az óriásméretű foliók (gigantic folios) lefoglalása is. Az optimalizáció lényege, hogy a kernel elkerüli azokat a belső lépéseket, amelyek ezeknél a méreteknél már nem adtak valódi hozzáadott értéket. Ennek eredményeként egy korábban több mint három és fél másodpercig tartó művelet kevesebb mint fél másodperc alatt lefut, ami nagy memóriaterhelésű szerveralkalmazásoknál komoly előnyt jelenthet.
A cserehely (swap) kezelésének átalakítása szintén kézzelfogható eredményeket hozott. A swap-in műveletek egységesítése és több, rosszul skálázódó régi kódrész eltávolítása akár 20 százalékos gyorsulást is eredményezett egy Redis-alapú terheléses teszt során. Ez jól mutatja, hogy a kernelben végrehajtott „láthatatlan” tisztogatások is komoly gyakorlati haszonnal járhatnak.
Végül, de nem utolsósorban, a Linux 7.0 memóriakezelési fejlesztései kiterjesztik a PT_RECLAIM mechanizmus támogatását több 64 bites architektúrára is, köztük az Alpha, LoongArch, MIPS, Parisc és UM platformokra. Ez a lépés hosszabb távon egységesebb és kiszámíthatóbb memóriavisszanyerést tesz lehetővé a kevésbé elterjedt architektúrákon is.
Összességében elmondható, hogy a Linux 7.0 memóriakezelési újdonságai nem látványos felhasználói funkciókban, hanem mélyen a rendszer motorházteteje alatt zajló, mégis jól mérhető teljesítmény- és hatékonyságnövekedésben mutatkoznak meg. Ezek a változtatások különösen fontosak lehetnek nagyvállalati, felhős és nagy memóriát használó környezetekben, de a hétköznapi felhasználók is profitálhatnak belőlük a gyorsabb és takarékosabb rendszer működés révén.
Fogalom-magyarázat
MM (Memory Management)
A Linux kernel memóriakezelési alrendszere. Feladata a fizikai és virtuális memória kiosztása, felszabadítása, lapozása, valamint a teljesítmény és az erőforrás-hatékonyság optimalizálása. Az MM az egyik legösszetettebb és legkritikusabb része a kernelnek.
Merge window
Az a fejlesztési időszak, amikor a Linux kernel új főverziójába bekerülhetnek a nagyobb változtatások. Ebben az időszakban a karbantartók elküldik a módosításaikat, amelyeket végül Linus Torvalds fogad el vagy utasít el.
Zram
Egy memóriában működő tömörített blokk-eszköz a Linuxban. Lehetővé teszi, hogy a rendszer tömörítve tároljon adatokat a RAM-ban, így csökkentve a swapelés szükségességét és javítva a rendszer reakcióidejét.
Tömörített adat-visszaírás (compressed data writeback)
Olyan eljárás, amelynél a memóriából háttértárra kiírt adatok tömörített formában maradnak. Ez csökkenti az adatmozgatás költségét, kevesebb CPU-munkát igényel, és energiahatékonyabb működést tesz lehetővé.
Hugepage
A normál, jellemzően 4 KB-os memórialapoknál jóval nagyobb méretű memórialap, például 2 MB vagy 1 GB. Főként nagy teljesítményű alkalmazásoknál használatos, mivel csökkenti a lapkezelési többletterhelést.
Demand faulting
Olyan memória-hozzáférési mechanizmus, amikor egy lap csak akkor kerül ténylegesen lefoglalásra vagy betöltésre, amikor a program először használni próbálja. Hatékonyabb memóriahasználatot tesz lehetővé, de érzékeny a lapkezelés teljesítményére.
Contiguous page clearing
Folytonos memórialap-tartományok egyben történő nullázása. Ez a megközelítés jobban kihasználja a modern processzorok hardveres előtöltőit, és gyorsabb memória-előkészítést eredményez.
Hardware prefetcher
A processzor azon egysége, amely előre megpróbálja betölteni a várhatóan szükséges adatokat a gyorsítótárba. Folytonos memóriaelérés esetén különösen hatékony, ezért profitál a kernel optimalizált lapkezeléséből.
Batched clearing / clear_pages()
Több memórialap egyetlen műveletben történő törlése. Ez lehetővé teszi, hogy a processzor nagyobb egységként kezelje az adatokat, és architektúrától függően speciális, gyorsabb utasításokat használjon.
Cacheline
A processzor gyorsítótárának legkisebb kezelési egysége. Ha feleslegesen kerül felülírásra, az kiszoríthat hasznos adatokat, ezért a cacheline-allokáció elkerülése teljesítménynövekedést eredményezhet.
LLC (Last Level Cache)
A processzor utolsó szintű gyorsítótára, amelyet több mag is közösen használhat. Az ennél nagyobb memória-műveleteknél egyes architektúrák eltérő optimalizált működési módra váltanak.
Gigantic folio
Nagyon nagy méretű memóriablokk (folio), amelyet a kernel egy egységként kezel. Főként nagy memóriájú rendszereken és szervereken használatos a lapkezelési overhead csökkentésére.
Swap-in
Az a folyamat, amikor a háttértáron lévő, korábban kiswapelt memóriaadat visszakerül a RAM-ba. Teljesítménye kritikus lehet adatbázisok és memóriaintenzív alkalmazások esetén.
Swap
A RAM kiegészítésére szolgáló háttértár-terület, amelyet a rendszer akkor használ, ha nincs elegendő szabad fizikai memória. Lassabb, mint a RAM, ezért a hatékony kezelése kiemelten fontos.
PT_RECLAIM
Olyan kernelmechanizmus, amely lehetővé teszi a lapozótáblákhoz kapcsolódó memória visszanyerését. Különösen nagy címterű, 64 bites rendszereken segít csökkenteni a memóriahasználatot.

