3

如果内存已分配并且已知它(几乎可以肯定/可能)不会长时间使用,则标记此内存以更积极地移动到交换空间可能很有用。

有什么命令可以告诉内核吗?

如果做不到这一点,最好将它们转储到临时文件中,但我很好奇发送到交换(或类似的东西)的能力。


当然,如果没有交换空间,这将无济于事,在这种情况下,编写临时文件可能会更好。

4

2 回答 2

6

您可以使用该madvise调用告诉内核您将来可能会对内存做什么。例如:

madvise(base, length, MADV_SOFT_OFFLINE);

告诉内核您不会很快需要有问题的内存,因此可以将其刷新到后备存储(或者如果它是从文件映射并且未更改,则直接删除)。

MADV_DONTNEED即使修改了内容,也允许内核删除内容(因此,当您下次访问内存时,如果您这样做,它可能会被归零或从原始映射文件中重新读取)。

于 2014-06-22T04:26:27.783 回答
0

我能想到的最接近的事情是mmapMemory-mapped I/O。这不会写入linux swap partition,但允许分页(完整的内存页面)到磁盘进行访问。临时文件和目录也可用于tempfile,mkstempmkdtemp,但同样,这不会写入交换分区,而是发生在普通文件系统上。

除了与上述类似的功能外,我不相信有任何东西可以直接访问交换分区(除了耗尽系统内存)。

于 2014-06-22T04:17:39.213 回答