在不使用mount上的noac的情况下,NFS可以强制刷新过时的文件/目录吗?

我们安装时不使用noac。 我有一个文件,每20分钟附加一次。 然后用mmap每分钟读取约5000次。 我们只为每次读取映射一对块。 不用说,noac只是杀死了访问性能,所以我们不使用它。

我使用noac的安装将数据添加到文件的末尾,并从没有noac的安装中读取数据。 正在阅读的坐骑没有看到新的数据。

我想知道是否有一个函数,我可以从c调用来刷新path及其所有文件的属性。

编辑:我应该添加,我们不能挂载和卸载,因为有16个服务器上运行的每个系统上,他们不断访问文件。 那么…也许我们可以挂载和卸载,如果每个服务器使用自己的挂载。 如果可能,我想避免这种情况。

谢谢!

嗯…..尝试使用“同步”选项安装NFS文件系统。

并查看手册页的这个摘录:(man 5 nfs)

同步装载选项。

NFS客户端将sync mount选项的处理方式与其他文件系统不同(请参阅mount(8)以获取有关通用同步和asynchronous装入选项的说明)。 如果既没有指定同步也没有指定asynchronous(或者指定了asynchronous选项),则NFS客户端会延迟向服务器发送应用程序写入,直到发生以下任何事件:

Memory pressure forces reclamation of system memory resources. An application flushes file data explicitly with sync(2), msync(2), or fsync(3). An application closes a file with close(2). The file is locked/unlocked via fcntl(2). 

换句话说,在正常情况下,应用程序写入的数据可能不会立即出现在托pipe该文件的服务器上。

如果在安装点上指定了同步选项,则任何将数据写入该安装点上的文件的系统调用都会导致在系统调用将控制权返回给用户空间之前将数据刷新到服务器。 这提供了客户端之间更高的数据caching一致性,但是性能成本却很高。

应用程序可以使用O_SYNC打开标志来强制应用程序写入单个文件以立即转到服务器,而不使用同步装入选项。