A Linux 6.17 kernel fejlesztési ciklusának összeolvadási időszakában került be egy ARM64-re optimalizált javítás, amely bizonyos helyzetekben akár tizenhatszorosára csökkenthette volna a hívások számát. Bár a cél az ARM64 teljesítményének növelése volt, a módosítás más architektúrákon komoly teljesítményromlást okozott. Az Intel kernelteszt-robot 37 százalékos visszaesést jelzett egy stress-ng mikrobemutatóban, míg az Oracle mérnöke, Lorenzo Stoakes egy Intel Raptor Lake rendszeren ennél is súlyosabb, 43 százalékos lassulást tapasztalt a Linux 6.17 Git verziójában.
Tartalomjegyzék

A kernelben jelentkező hiba felderítése és a fő ok azonosítása
Stoakes vizsgálatai feltárták, hogy az „mm: optimize mremap() by PTE batching” commit áll a visszaesés mögött. A mérések alapján az átlagos mremap() hívások száma másodpercenként 143 857-ről 81 503-ra esett vissza, ami jelentős teljesítménycsökkenést jelentett. A folio_pte_batch() és a folio_test_large() optimalizálása nem hozott eredményt, így a gyanú a vm_normal_folio() hívásra terelődött. Ez a függvény a vmemmap-ból kér le adatokat, ami hideg memória-hozzáférést, úgynevezett „cold memory access” jelenséget eredményez. Ilyenkor az adat nem a processzor gyorsítótárából, hanem közvetlenül a főmemóriából kerül beolvasásra, ami jelentős lassulást okoz. A feltételezés igazolódott, és megerősítést nyert, hogy ez a fő oka a teljesítményromlásnak.
Egyszerű, de hatásos javítás
A megoldás egy korábban elvetett megközelítés részleges visszaállítása volt: a pte_batch_hint() meghívása, amely kizárólag a PTE-re támaszkodva határozza meg a köteg méretét, elkerülve az időigényes vmemmap-hozzáférést. ARM64-en ez a módosítás alig jelent pluszterhelést, míg x86-64-en teljes mértékben megszünteti a problémát. A javítás hatására a teljesítmény 81 503 hívás/másodpercről 138 701-re emelkedett, ami csupán 3,6 százalékos eltérést jelent a korábbi állapothoz képest, és ez bőven a mérési szóráson belül van. A mindössze két soros patch-nek köszönhetően a Linux 6.17-rc1 kiadását követő néhány napon belül sikerült kontroll alá vonni a súlyos regressziót.
