为什么 Linux 不保护操作系统免于交换?

为什么 Linux 不保护操作系统免于交换?

据我了解,当 RAM 填满并且内核开始将页面从磁盘到 RAM 来回移动时,程序的响应速度将会降低。然而,就我而言,每次进入交换时,整个系统都会冻结(或严重滞后,鼠标每 10 秒左右移动一次)。我认为这是因为操作系统要么太忙于移动东西,要么正在移动自己的部分进行交换。

为什么我们不能保护操作系统的主要组件(包括图形界面 (X))免于交换(通过将它们固定在 RAM 中),以便我们至少拥有一个响应式操作系统,同时我们的其他应用程序会出现延迟? (或者如果问题是内核太忙,请将交换优先级设置得较低?)

答案1

首先,您可以使用以下一行更改“swappiness” - 您的操作系统使用交换的渴望程度:

sudo bash -c "echo 'vm.swappiness = 15' >> /etc/sysctl.conf"

至于为什么操作系统不锁定 X 服务器,答案很简单:这只是您的用例。看,如果我用我的脚本计算一些东西,我希望它尽可能快(并尽快结束) - 在内存中保留不必要的程序将意味着我的程序必须使用交换,使其变得很多速度慢几个数量级。

许多运行此类占用大量内存的脚本的用户要么根本不使用 X,要么不关心它们,因为他们不理会自己的 PC。

tl;dr:这是一个复杂的设计决策,当前的解决方案可能是最好的。

答案2

如果您谈论保护操作系统的主要组件但禁用它们上的交换,我希望你不应该这样做(无论如何你不能,因为很久以前可执行文件遵守粘性位+t,这会告诉内核不要交换,但今天它被忽略了)。如果内核决定必须进行交换,那么它肯定有一个正当的理由。 Linux 对内存的使用非常积极,因为空闲的 RAM 是一种浪费的资源。

现在,如果您决定关闭整个交换空间,您可以通过 -

要禁用交换区域:swapoff [-v] specialfile...

禁用所有交换区域:swapoff -a

也看看这个回答了解更多信息。

相关内容