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