我一直在阅读 Linux 的“swappiness”可调参数,它控制内核在不使用时将应用程序的内存交换到磁盘的积极程度。如果你用谷歌搜索这个词,你会看到很多这样的页面讨论优缺点。简而言之,论点是这样的:
如果您的 swappiness 太低,不活动的应用程序将占用其他程序可能想要使用的所有系统内存。
如果您的 swappiness 太高,当您唤醒那些不活动的应用程序时,将会有很大的延迟,因为它们的状态会从磁盘读回。
这个论点对我来说没有意义。如果我有一个使用大量内存的非活动应用程序,为什么内核不将其内存分页到磁盘并将该数据的另一个副本留在内存中?这似乎是两全其美:如果另一个应用程序需要该内存,它可以立即申请物理 RAM 并开始对其进行写入,因为它的另一个副本在磁盘上,并且可以在不活动的应用程序被唤醒时换回向上。当原始应用程序唤醒时,它的任何仍在 RAM 中的页面都可以按原样使用,而无需将它们从磁盘中拉出。
还是我错过了什么?