Egy új Linux kernel patch lehetővé tenné a hibernálási folyamat megszakítását

A Linux kernel energiamenedzsment alrendszerének egyik régóta fennálló hiányosságát célozza meg Muhammad Usama Anjum a Collabora alkalmazottjának új patchsorozata, amely a hibernálás megszakíthatóságának támogatását vezetné be a kernelbe. A fejlesztő szerint a hibernálási folyamat egy átlagos laptopon 15–20 másodpercet vesz igénybe, és amint a rendszer hibernálásra utasítást kap, a folyamat nem állítható le – sem parancssorból, sem grafikus felületről. Bár ez nem akadályozza a működést, rossz felhasználói élményt eredményez. A javaslat célja, hogy a felhasználó képes legyen megszakítani a hibernálást például a bekapcsológomb megnyomásával, ha azt időközben meggondolja.

Egy új Linux kernel patch lehetővé tenné a hibernálási folyamat megszakítását

A folyamat és a probléma technikai háttere

A hibernálás elindításakor a rendszer első lépésként „lefagyasztja” a felhasználói teret, vagyis az összes folyamatot felfüggeszti. Emiatt a bekapcsológomb lenyomására érkező megszakítási jel ugyan keletkezik, de a felhasználói térben futó komponensek – például a systemd logind – már nem képesek azt kezelni, így a művelet nem szakítható meg. Anjum tesztjei során egy körülbelül 19 másodperc alatt hibernáló eszközt vizsgált, és azt tapasztalta, hogy amikor az rtcwake eszközzel 10 másodperces időzítést állított be, a rendszer képes volt a hibernálás megszakítására, amikor az időzítő megszakítást generált. Ez a viselkedés inspirálta a fejlesztést, amely immár szabályozott és biztonságos módon tenné lehetővé a folyamat megszakítását.

A megoldás és a kapcsolódó kiegészítő fejlesztések

A négy részből álló patchsorozat egy új függvény, a hibernation_in_progress() exportálását hozza el, amely lehetővé teszi, hogy más alrendszerek felismerjék, ha hibernálás folyamatban van. Az ACPI gombkezelő ezután képes lesz megszakítani a hibernálást, ha a felhasználó a bekapcsológombot megnyomja. Az input alrendszer ezen túlmenően figyelmen kívül hagyja a KEY_POWER eseményeket, amíg a hibernálás tart, elkerülve a konfliktusokat. Végül a PM alrendszer módosítása biztosítja, hogy a hibernálási megszakítás után a rendszer megfelelően törölje a függőben lévő állapotjelzőket, ezzel megakadályozva a későbbi hibákat.

AMD illesztőprogram-javítások a kernelhez a hibernálás-megszakítás támogatásához

A módosítás a hardveres illesztőprogramok terén is éreztette hatását. Mario Limonciello, az AMD fejlesztője három kiegészítő javítást készített az új funkcióhoz, miután kiderült, hogy a hibernálás megszakítása következetlen állapotot eredményezhet az amdgpu illesztőprogramban. A hiba oka, hogy a legtöbb esetben a hibernálás „thaw” lépése – vagyis a visszatérés előtti feloldás – kimarad, így a hibernálás megszakítása után a GPU félkész állapotban marad. A javítások lehetővé teszik, hogy az eszköz -EBUSY hibakóddal jelezze a folyamatban lévő műveletet, és a PM alrendszer ezt helyesen kezelje.

A fejlesztések egyelőre RFC (Request for Comments) státuszban vannak, tehát a közösség visszajelzéseire várnak, mielőtt a kód bekerülne a fővonalas kernelbe.