Linux 5.15改進系統記憶體調用 可更快釋放垂死進程的資源
為解決 systemd-oomd 或 Android 的 LMKD 等記憶體問題,Linux 社區開發者一直提議引入更好的系統調用策略,以更快地釋放垂死進程的記憶體。 比如今夏早些時候,Phoronix 的 Michael Larabel,就提出了一個名叫”process_reap”的系統調用方案,特點是能夠在壓力下更快地回收記憶體資源。
(來自:Kernel.org)
最新消息是,這項工作已經演變成為了”process_mrelease”,且Linux 5.15也做好了迎接新版系統調用策略的準備。 而使用新系統調用的最大優勢,就在於能夠更快、更可預測地回收垂死進程的記憶體資源。
Phoronix指出,傳統 Linux(尤其是桌面 Linux)無法很好地應對記憶體壓力,但近年來 systemd-oomd、各種內核創新、以及現在的 process_mrelease,都已經取得了穩步的發展。
在該補丁合併到Linux 5.15之後,Andrew Morton 繼續深入解釋了 process_mrelease 的系統調用方式:
對於此類系統元件來說,能夠快速高效地釋放記憶體資源,是非常重要的一點。
遺憾的是,進程在收到SIGKILL後釋放記憶體所需的時間、可能因進程的狀態(不間斷睡眠)、正在運行的核心大小、以及 OPP 級別而異。
若能夠找到以更可預測的方式來釋放目標進程資源的機制,也將能夠提升系統控制其記憶體壓力的能力。
通過引入 process_mrelease 系統調用方案,系統就能夠從調用方(caller)的上下文中釋放垂死進程的記憶體。
基於此,記憶體能夠以更可控的方式來釋放,具有CPU親和性和調用優先順序,釋放記憶體的工作量也會由調用方來承擔,不過相關操作只允許針對垂死進程來執行。