gpt4 book ai didi

linux - 为什么 "swappiness"的讨论就像一次只能在一个地方的信息一样?

转载 作者:IT王子 更新时间:2023-10-29 01:25:22 26 4
gpt4 key购买 nike

我一直在阅读 Linux 的“swappiness”可调参数,它控制内核在不使用应用程序时将内存交换到磁盘的积极程度。如果你谷歌这个词,你会得到很多像this这样的页面。讨论利弊。简而言之,争论是这样的:

If your swappiness is too low, inactive applications will hog all the system memory that other programs might want to use.

If your swappiness is too high, when you wake up those inactive applications, there's going to be a big delay as their state is read back off the disk.

这个论点对我来说没有意义。如果我有一个使用大量内存的非事件应用程序,为什么内核不将其内存分页到磁盘并在内存中保留该数据的另一个副本?这似乎是两全其美:如果另一个应用程序需要该内存,它可以立即申请物理 RAM 并开始写入它,因为它的另一个副本在磁盘上并且可以在非事件应用程序被唤醒时换回向上。当原始应用程序唤醒时,它仍然在 RAM 中的任何页面都可以按原样使用,而无需将它们从磁盘中取出。

还是我遗漏了什么?

最佳答案

If I have an inactive application that's using a ton of memory, why doesn't the kernel page its memory to disk AND leave another copy of that data in-memory?

假设我们做到了。我们将页面写入磁盘,但将其留在内存中。稍后另一个进程需要内存,所以我们想从第一个进程中踢出页面。

我们需要绝对确定第一个进程是否修改了页面,因为它被写入磁盘。如果有,我们必须重新写出来。我们跟踪它的方法是在我们第一次将页面写出到磁盘时取消进程对该页面的写权限。如果进程再次尝试写入页面,则会出现页面错误。内核可以在恢复写权限并允许应用程序继续之前注意到该进程已经弄脏了页面(因此需要再次写出)。

问题就在这里。取消页面的写权限实际上有些昂贵,尤其是在多处理器机器中。重要的是,所有 CPU 都要清除其页面翻译缓存,以确保它们取消写入权限。

如果进程确实写入页面,则发生页面错误的代价更高。我假设这些页面中有相当数量的页面最终会出现该错误,这会侵 eclipse 我们通过将其留在内存中寻找的 yield 。

那么值得吗?老实说,我不知道。我只是想解释为什么将页面留在内存中并不像听起来那么明显。

(*) 这整个事情非常类似于一种叫做 Copy-On-Write 的机制,它在进程 fork() 时使用。子进程很可能只执行几条指令并调用 exec(),因此复制所有父页面是很愚蠢的。取而代之的是取消写权限,只允许 child 运行。 Copy-On-Write 是一个胜利,因为页面错误几乎从未发生过: child 几乎总是立即调用 exec()。

关于linux - 为什么 "swappiness"的讨论就像一次只能在一个地方的信息一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/147125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com