通过nfs共享的mmap文件?

时间:2012-04-28 21:13:29

标签: linux memory-management shared-memory mmap nfs

情景A

  

要在同一主机上运行的两个进程之间共享一个读/写内存块,Joe会从两个进程中映射相同的本地文件。

情景B

  

要在两个不同主机上运行的两个进程之间共享一个读/写内存块,Joe在主机之间通过nfs共享一个文件,然后从两个进程中共享mmaps共享文件。

有没有人尝过场景B?场景B中出现的哪些额外问题不适用于场景A?

3 个答案:

答案 0 :(得分:5)

如果没有其他一些操作,Mmap将不会共享数据。

如果更改文件的mmaped部分中的数据,则更改将仅存储在内存中。它们不会被刷新到文件系统(本地或远程),直到msync或munmap或关闭甚至决定OS内核及其FS。

使用NFS时,锁定和存储数据的速度比使用本地FS要慢。刷新超时和文件操作时间也会有所不同。

On the sister site人们说NFS可能具有较差的缓存策略,因此会有更多的I / O请求到NFS服务器,将I / O请求数与本地FS进行比较。

答案 1 :(得分:3)

您需要使用字节范围锁定才能获得正确的行为。它们在NFS> = v4.0中可用。

答案 2 :(得分:0)

我认为方案B存在各种问题(假设它按照评论中的建议运行)。最明显的是标准并发问题 - 2个进程共享1个资源而没有任何形式的锁定等。这可能会导致问题......不确定NFS在这方面是否有其特有的怪癖。

假设您可以以某种方式解决并发问题,那么您现在依赖于维护稳定(且快速)的网络连接。显然,如果网络退出,您可能会错过一些更改。这是否重要取决于您的架构。

我的想法是,这听起来像是在不同的机器上共享一块内存的简单方法,但我不能说我听说它已经完成,这让我觉得它不太好。当我认为在procs之间共享数据时,我认为数据库,消息传递或专用服务器。在这种情况下,如果你使一个proc成为master(处理并发并拥有概念-e.e.无论这个人说的是数据的最佳副本)它可能有用......