繁体   English   中英

在POSIX UNIX系统中,是否可以以永远不会将其交换到磁盘上而支持其他文件的方式对文件进行mmap()?

[英]In a POSIX unix system, is it possible to mmap() a file in such a way that it will never be swapped out to disk in favor of other files?

如果不使用mmap() ,似乎应该有一种方法可以赋予某些文件“优先级”,以便它们被换出的唯一时间是试图引入页面错误,例如执行代码或内存不足。是由某些进程执行的malloc() ,但从未由其他文件执行。 可以想到这种情况可能有用的情况。 考虑一下搜索引擎,该引擎应将其索引文件保留在缓存中,但可能同时写入新文件(不用于搜索)。

有几种方法。

最好的方法是使用madvise() ,它使您可以通知内核您很快将需要特定的内存范围,这使其具有比其他内存更高的优先级。 您也可以使用它来表示很快就不需要特定范围,因此应尽快将其替换掉。

hack方法是使用mlock() ,它强制将一定范围的内存保留在RAM中。 通常这不是一个好主意,仅应在特殊情况下使用。 最常见的情况是将密码存储在RAM中,以便在计算机关闭电源后无法从交换文件中恢复密码。 除非用尽其他选项,否则我不会使用mlock()进行性能调整。

最糟糕的方法是不断戳内存,迫使它保持新鲜。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM