Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C NFS中的强制属性刷新_C_Linux_Caching_Mmap_Nfs - Fatal编程技术网

C NFS中的强制属性刷新

C NFS中的强制属性刷新,c,linux,caching,mmap,nfs,C,Linux,Caching,Mmap,Nfs,我不知道我的要求是否正确,这也是问题的一部分。我们在linux机器上使用NFS。我们已装载到文件服务器上的目录。我们使用1小时属性超时和1小时数据超时。我们必须学习写文件的模式。1) 我们添加到文件的末尾。当添加到文件末尾时,我们保持相同的文件名。2) 更改以前写入的数据。更改文件时,我们会更改其文件名。其思想是,这将与缓存一起很好地工作,因为写入文件的数据永远不会更改。我还需要一件事来完成这项工作。在当前设置下,当我使用mmap访问文件中新添加的部分时,如果该部分在缓存属性时不存在,则会出现“

我不知道我的要求是否正确,这也是问题的一部分。我们在linux机器上使用NFS。我们已装载到文件服务器上的目录。我们使用1小时属性超时和1小时数据超时。我们必须学习写文件的模式。1) 我们添加到文件的末尾。当添加到文件末尾时,我们保持相同的文件名。2) 更改以前写入的数据。更改文件时,我们会更改其文件名。其思想是,这将与缓存一起很好地工作,因为写入文件的数据永远不会更改。我还需要一件事来完成这项工作。在当前设置下,当我使用mmap访问文件中新添加的部分时,如果该部分在缓存属性时不存在,则会出现“总线错误”。这一切都是有道理的,也是意料之中的。我想做的是强制NFS刷新文件属性,以便它知道文件现在变大了。在一个完美的世界里,我只有在发生总线错误时才会这样做。所以是否有一个命令可以从c或shell执行

编辑 我被否决了,所以我想我的问题很愚蠢。也许更多的信息会有所帮助。当我使用具有长属性和数据刷新的挂载时,我可以获得所需的微秒性能。当我使用带有短属性刷新的挂载时,它会慢1000倍。我只需要在出现总线错误时刷新属性。这是linux,因此很有可能存在强制刷新的方法。我们的数据每20分钟只更改一次,因此我想探讨一下按需刷新场景。

NFS使用“接近打开的缓存一致性”。根据手册(mannfs),“当应用程序打开存储在nfs服务器上的文件时,nfs客户端会检查该文件是否仍然存在于服务器上,并通过发送GETATTR或访问请求允许打开程序打开该文件”

根据的A8,“Linux通过将文件关闭后执行的GETATTR操作的结果与下次打开文件时执行的GETATTR操作的结果进行比较来实现接近打开的缓存一致性。如果结果相同,客户端将假定其数据缓存仍然有效;否则,缓存将被清除。”

我认为,当您收到“总线错误”时,应该关闭并重新打开(然后重新映射)该文件


顺便提一下,这个问题问得好。

-1因为我没有用谷歌搜索什么?我到处找!嘘,退房。中建议的drop_缓存方法可能适用于您的情况,但您需要先同步写入!嗯,我想试试。你可能知道什么了。谢谢你没有给我a-1!