A Linux kernel testreszabható Out of Memory-kezelést hoz a BPF segítségével

Roman Gushchin új, tizennégy elemből álló patchsorozatot mutatott be, amely lehetővé teszi a Linux kernel memória­kezelésében az out-of-memory (OOM) események rugalmasabb kezelését a BPF (Berkeley Packet Filter) segítségével. Az ötlet nem új keletű, de a korábbi javaslatokkal szemben ez a megközelítés egy általános interfészt vezet be, amelyet az OOM killer kód lefutása előtt hív meg a rendszer. Ennek köszönhetően akár teljesen egyedi szabályok is megvalósíthatók: kiválasztható az áldozatként kijelölt folyamat vagy memóriacsoport, de akár más megoldások is alkalmazhatók, például ideiglenes fájlok törlése a memória felszabadítása érdekében. A megoldás célja, hogy a korábban vitatott, kernelbe épített fix OOM-stratégiák helyett a kívánt munkaterheléshez és rendszerstruktúrához igazítható, dinamikus szabályokat adjon a fejlesztők kezébe.

A Linux kernel testreszabható Out of Memory-kezelést hoz a BPF segítségével

PSI-alapú riasztások integrálása

A sorozat másik fontos eleme a Pressure Stall Information (PSI) alapú OOM-invokáció kezelése. Az elmúlt években több felhasználói térben futó megoldás, például a Facebook-féle OOMd vagy a systemd-OOMd, már épített a PSI-re, hogy megelőzze a rendszer teljes elakadását. Ezekben a modellekben a felhasználói térben futó daemon figyelte a memóriahelyzetet, és igyekezett időben beavatkozni, míg a kernel OOM killer csak végső biztosítékként működött. Ez ugyan működőképes, de bonyolult ökoszisztémát hozott létre, hiszen a daemonokat telepíteni, karbantartani és monitorozni kellett, miközben a kernel és a felhasználói tér külön-külön kezelte a naplókat és az eseményeket. Az új javaslat a BPF-re támaszkodva közvetlenül a kernelben teszi lehetővé PSI-triggerekkel az OOM-kezelést, ezáltal megszüntetve a párhuzamos infrastruktúra szükségességét.

Újdonságok az első verzióban

Az első kiadás több újdonságot tartalmaz a fejlesztők javaslatai alapján. Mind az OOM, mind a PSI kezelés BPF struct ops mechanizmuson keresztül valósul meg, amely jövőbeli bővítéseknek is teret ad. Újdonság, hogy a PSI-triggereket közvetlenül BPF-ből lehet létrehozni, nincs szükség külön felhasználói térbeli ügynökre. Bevezetésre került a bpf_task_is_oom_victim segédfüggvény, valamint lehetőség nyílik arra, hogy a rendszer ne azonnal adja fel az OOM lockot, hanem blokkoljon rajta. A PSI-callbackek külön munkasorba kerülnek, ami megbízhatóbb ütemezést biztosít. A patchsorozat számos új kódot hoz a kernel memóriakezelő és ütemező alrendszereibe, valamint új önellenőrző tesztekkel is bővül, amelyek biztosítják a stabilitást és a kompatibilitást.

További részletek a kernel levelezőlistán található bejelentésben olvashatók.