我不知道我是否正在问这个问题,这是问题的一部分。我们在linux盒子上使用NFS。我们已经安装到文件服务器上的目录。我们使用1小时属性超时和1小时数据超时。我们必须编写文件模型。 1)我们添加到文件的末尾。添加到文件末尾时,我们保留相同的文件名。 2)更改以前写入的数据。更改文件时,我们更改其文件名。这个想法是,这将适用于缓存,因为写入文件的数据永远不会改变。我还需要一件事来完成这项工作。使用当前设置,当我使用mmap访问文件的新添加部分时,当文件的那部分在缓存属性时不存在时,我得到“总线错误”。这一切都是有道理的,也是预期的。我想要做的是强制NFS刷新文件属性,以便它知道文件现在更大。在一个完美的世界里,我只会在遇到总线错误时这样做。所以......有没有我可以从c或shell执行的命令可以执行此操作?
修改 我投了票,所以我猜我的问题很愚蠢。也许更多信息会有所帮助。当我使用具有长属性和数据刷新的挂载时,我获得了我需要的微秒性能。当我使用具有短属性刷新的安装时,它会慢1000倍。我只有在遇到总线错误时才需要刷新属性。这是linux,因此很有可能存在强制刷新的方法。我们的数据每20分钟只更改一次,因此我想探索按需刷新方案。
答案 0 :(得分:1)
NFS使用“近乎开放的缓存一致性”。根据手册(man nfs),“当应用程序打开存储在NFS服务器上的文件时,NFS客户端检查它是否仍然存在于服务器上,并通过发送GETATTR或ACCESS请求被允许进入开启者。” p>
根据FAQ的A8,“Linux通过比较文件关闭后完成的GETATTR操作的结果与文件完成的GETATTR操作的结果,实现了接近开放的缓存一致性接下来打开。如果结果相同,客户端将认为其数据缓存仍然有效;否则,清除缓存。“
我认为你应该在收到“总线错误”时关闭并重新打开(然后重新映射)文件。
P.S。顺便说一下好问题。