普利克德

2021-06-20 06:00:20

prelockd是一个守护程序,锁定内存映射可执行文件和内存中的共享库,以提高低内存条件下的系统响应性。

是否有可能保留用于缓存的固定(可配置的)RAM,并提前触发OOM杀手,在从内存中逐出大多数UI代码之前?在我的用例中,我很高兴牺牲。 0.5GB并在系统冻结之前杀死失控任务。潜在的Oom杀手也会在这种情况下更好地工作。我几乎从未在接近完整的内存容量,它' s始终是一个出错的单一任务,并带来了系统。

没有缓存意味着所有可执行的页面,RO页面(例如字体)都是通过内存传导,并且必须在每个用户动作上不断重新加载。

确实是一个困难的问题 - 再次可能不需要Somecached页面(流IO),并且应该尽快丢弃,其他(如MBApped可执行文件/ RO页面)在高记忆压力下驱逐时会导致捶打。

我想尝试禁用/限制对某些/ AllFile页面的驱逐(例如Exec页面)类似于禁用交换,但没有这样的机制。是的,需要解决的RO MMAPPE文件可能会出现问题,但在许多应用程序中,用户将有兴趣获得此类选项。

一旦交换运行,内核就可以选择。它只能通过回收重要的缓存来腾出空间。这将很快变坏,因为它最终将包括必须在正常工作时加载的可执行文件/库!

所以,我们不希望将内核陷入其中必须从主内存中删除可执行文件/库的情况。如果发生这种情况,您最终可以击中每个函数调用的磁盘。

在这个视频上:在Debian 10 Gnome的循环中运行快速内存Hogs,4个Gib梅特特没有交换空间。 prelockd启用:大约500 mib mlocked。 开始虽然是真的; 尾/开/零; 完成:没有冻结。 OOM杀手快速,系统快速恢复。 它'很容易使用最新的Git快照构建DEB包。 安装构建依赖项: $ git clone https://github.com/hakavlad/prelockd.git&& CD prelockd $ sudo make install $ sudo systemctl启用--now prelockd.service