如何有选择地将内存放入交换? (Linux)的

时间:2014-06-22 03:55:28

标签: c linux memory-management swapfile

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

是否有一些命令告诉内核这个?

如果不这样做,可能最好将这些文件转储到临时文件中,但我对发送到交换(或类似的东西)的能力感到好奇。


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

2 个答案:

答案 0 :(得分:6)

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

madvise(base, length, MADV_SOFT_OFFLINE);

告诉内核你不会很快就需要内存,所以它可以刷新到后备存储(或者如果从文件映射并且没有改变就丢弃)。

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

答案 1 :(得分:0)

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

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