我们在一组 isilons 上运行 nfs,并且在一台机器上创建目录并在另一台机器上读取时间歇性地遇到相当大的延迟(大约 30 秒)。
这似乎只在网络非常繁忙时发生,但有人建议在尝试读取新目录之前在父目录上运行“ls”将强制 NFS 重新缓存。
听起来对吗?
我们在一组 isilons 上运行 nfs,并且在一台机器上创建目录并在另一台机器上读取时间歇性地遇到相当大的延迟(大约 30 秒)。
这似乎只在网络非常繁忙时发生,但有人建议在尝试读取新目录之前在父目录上运行“ls”将强制 NFS 重新缓存。
听起来对吗?
听起来您需要调整客户端上的 acdirmin/acdirmax 挂载选项,以更改目录信息缓存年龄的上限和下限。这 30 秒对应于 30 秒的默认 acdirmin,这意味着信息必须在缓存中至少 30 秒,然后客户端才会考虑出去并刷新它。
看看将 acdirmin 调低到 15 或 10 秒是否有帮助。
此外,“ls”可能有所帮助的原因是它导致 stat() 在“.”上发生。这可能会使该条目的缓存无效。我记得我们必须在 open() 之前修改我们的一些工具来 stat() 一个文件或目录,以验证该项目是否存在于我们的某些 NFS 内容中。
所以这是其他客户端注意到文件已创建文件?(或者它是否包括文件包含多少数据的变化)。
操作是否都在单个目录中,因为 isilons 在单个目录中存在元数据性能问题。
您确定不是服务器在写入正在执行缓存的文件吗?如果您登录到 isilon 并从“设备”查看目录,您是否看到文件同时出现在服务器上,因为客户端说它有写它。
出于好奇,这两台机器安装了相同的 isilon 砖(虽然这并不重要,但它会很有趣)。
您有哪些安装选项?(nfs v2 有什么不同吗(更多的是好奇,它没有 readir+))