调用msync是否必要?

时间:2017-10-19 09:40:36

标签: c linux-kernel centos7 centos6

阅读了几篇文章和帖子后: https://lwn.net/Articles/502612/ mmap, msync(MS_ASYNC) and munmap

我有点困惑:
1. msync是否真的做了什么(上面的第二个链接包含一个联机帮助页的一部分,表明它不在更新的内核中;所以,第一个链接说它确实做了什么)
2.如果进程可能被杀死或崩溃(但不是操作系统),是否需要调用msync 3.内核将mmapped内存刷回“磁盘”的频率是多少?

假设我使用内核3.10和2.6.32。

感谢。

1 个答案:

答案 0 :(得分:1)

我们需要小心 - 你的问题标题是“调用msync是否必要? “但是msync()会使参数变得复杂:

  1. 在Linux上msync(MS_ASYNC)是一个无操作。在其他操作系统上,它可以执行某些操作,当然您可以使用其他参数调用msync()
  2. 如果您需要知道是否已完成同步并且您愿意阻止它,则可以使用msync(MS_SYNC)(请注意缺少A)。如果just your program crashes the Linux kernel will continue to track dirty filesystem pages
  3. 这取决于您的文件系统和VM设置。请参阅https://www.kernel.org/doc/Documentation/sysctl/vm.txt中的dirty_*设置。
  4. 这个问题类似于having linux persist memory changes to disk - 如果您需要知道当您的数据在稳定媒体上时,您将不得不使用阻塞调用(这将触发立即回写)。在Linux上没有“请在后台开始同步”调用。