阅读了几篇文章和帖子后: https://lwn.net/Articles/502612/ mmap, msync(MS_ASYNC) and munmap
我有点困惑:
1. msync是否真的做了什么(上面的第二个链接包含一个联机帮助页的一部分,表明它不在更新的内核中;所以,第一个链接说它确实做了什么)
2.如果进程可能被杀死或崩溃(但不是操作系统),是否需要调用msync
3.内核将mmapped内存刷回“磁盘”的频率是多少?
假设我使用内核3.10和2.6.32。
感谢。
答案 0 :(得分:1)
我们需要小心 - 你的问题标题是“调用msync是否必要?
“但是msync()
会使参数变得复杂:
msync(MS_ASYNC)
是一个无操作。在其他操作系统上,它可以执行某些操作,当然您可以使用其他参数调用msync()
。msync(MS_SYNC)
(请注意缺少A)。如果just your program crashes the Linux kernel will continue to track dirty filesystem pages。dirty_*
设置。这个问题类似于having linux persist memory changes to disk - 如果您需要知道当您的数据在稳定媒体上时,您将不得不使用阻塞调用(这将触发立即回写)。在Linux上没有“请在后台开始同步”调用。