如果内存已分配并且已知它(几乎可以肯定/可能)不会长时间使用,则标记此内存以更积极地移动到交换空间可能很有用。
有什么命令可以告诉内核吗?
如果做不到这一点,最好将它们转储到临时文件中,但我很好奇发送到交换(或类似的东西)的能力。
当然,如果没有交换空间,这将无济于事,在这种情况下,编写临时文件可能会更好。
如果内存已分配并且已知它(几乎可以肯定/可能)不会长时间使用,则标记此内存以更积极地移动到交换空间可能很有用。
有什么命令可以告诉内核吗?
如果做不到这一点,最好将它们转储到临时文件中,但我很好奇发送到交换(或类似的东西)的能力。
当然,如果没有交换空间,这将无济于事,在这种情况下,编写临时文件可能会更好。
您可以使用该madvise
调用告诉内核您将来可能会对内存做什么。例如:
madvise(base, length, MADV_SOFT_OFFLINE);
告诉内核您不会很快需要有问题的内存,因此可以将其刷新到后备存储(或者如果它是从文件映射并且未更改,则直接删除)。
MADV_DONTNEED
即使修改了内容,也允许内核删除内容(因此,当您下次访问内存时,如果您这样做,它可能会被归零或从原始映射文件中重新读取)。
我能想到的最接近的事情是mmap
:Memory-mapped I/O。这不会写入linux swap partition
,但允许分页(完整的内存页面)到磁盘进行访问。临时文件和目录也可用于tempfile
,mkstemp
和mkdtemp
,但同样,这不会写入交换分区,而是发生在普通文件系统上。
除了与上述类似的功能外,我不相信有任何东西可以直接访问交换分区(除了耗尽系统内存)。