【问题标题】:Concurrent file access in nfsv4 linux cnfsv4 linux c中的并发文件访问
【发布时间】:2015-06-06 17:20:31
【问题描述】:

使用在 Linux 下运行的 C,我试图弄清楚如何让 2 个不同的进程访问位于 NFSv4 文件系统上的同一个文件。具体来说,我想让一个程序打开文件进行读取,并让第二个程序打开文件进行写入。我打算使用 AWS 的新 EFS(弹性文件系统),而 EFS 只有 NFSv4。

程序的本质是编写器本质上只会附加到文件中。在作者完成并调用 fflush 之前,读者永远不会访问新附加的信息。

NFSv4 是否支持这种情况?

或者有没有更好的方法来实现这种并发的 NFSv4 文件访问?

【问题讨论】:

  • NFSv4 是否支持这种情况? 我不知道。为什么不使用ipcs 的共享内存?
  • @ElliottFrisch:我可以将共享内存与 ipcs 一起使用,但是在大量文件(> 4000 万)中存在大量数据(> 500 TB)。并且不断增长。
  • 那么听起来你应该看看HDFS
  • @ElliottFrisch:我编辑了我的问题以反映 AWS ElasticFileSystem 仅在 NFSv4 下运行
  • 这两个进程是否在同一台机器上运行?如果是这样,文件映射几乎肯定是要走的路。

标签: linux amazon-web-services file-io nfs file-locking


【解决方案1】:

NFS v4 确实支持文件的字节范围锁定(如RFC 3530 "NFS version 4 protocol" 的摘录中所述):

1.4.5。文件锁定

对于 NFS 版本 4 协议,对字节范围文件锁定的支持是 NFS 协议的一部分。文件锁定支持的结构使得不需要 RPC 回调机制。这与以前版本的 NFS 文件锁定协议 Network Lock Manager (NLM) 不同。与文件锁相关的状态在基于租约的模型下在服务器上维护。服务器为 NFS 客户端持有的所有状态定义一个租用期。如果客户端在定义的期限内没有更新其租约,则与客户端租约相关的所有状态都可能由服务器释放。客户端可以使用RENEW 操作或隐含地使用其他操作(主要是READ)来更新其租约。

有关锁定和基于租约的模型的更多详细信息,请参阅同一 RFC 的第 8 节。

您的程序将需要使用fcntl 来管理锁定。我的建议是编写一个测试来检查 EFS 提供的 NFS v4 的实​​际实现是否支持预期的锁定(某些方面在规范中是可选的)。可以参考this lock testing suite的源码,支持多客户端测试。

【讨论】:

    猜你喜欢
    • 2013-01-14
    • 1970-01-01
    • 2012-04-02
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多