Pau*_*ann 5 linux nfs arch-linux
我一直在了解 NFS 的关闭对打开策略,它会导致每个文件在关闭时刷新到服务器,以确保客户端之间的一致性。(请参阅http://docstore.mik.ua/orelly/networking_2ndEd/nfs/ch07_04.htm。)当尝试写入许多小文件时,这会导致性能大幅下降。
显然,我知道“异步”导出选项,但还有一个“nocto”客户端挂载选项,它应该禁用该客户端的关闭到打开机制。据我所知,这应该阻止客户端在关闭时刷新文件(以及在打开时不费心检查缓存一致性)。但是,这似乎没有效果:客户端仍在关闭时将文件刷新到服务器,从而导致大量等待 io。
有谁知道为什么“nocto”没有我希望的效果?“async”选项按预期工作,但对我来说更重要的是在这种情况下客户端缓存是正确的,它只是让我感到烦恼。
例子:一组无盘节点共享一个远程根,它偶尔会从其中一个节点更新。每个文件在关闭后立即刷新并不重要,因为没有其他节点试图写入同一个文件。然而,更重要的是,如果服务器在更新一组包时崩溃,客户端知道哪些数据尚未写入服务器的磁盘,以便在服务器再次启动后再次尝试。使用“async”选项,这种情况可能会导致数据丢失(因为服务器向客户端谎报数据被刷新到磁盘),而禁用 close-to-open(并使用“sync”而不是“async”)) 理论上应该提供相同的性能优势而不会丢失潜在的数据(因为多个文件写入将被缓冲并一起刷新到服务器)。服务器和其他客户端会看到一个稍微过时的文件系统视图(几秒钟)。这对我来说似乎是合理的。
简而言之,“异步”进行服务器端缓冲,这大大加快了速度。我期待的是“nocto”应该以类似的速度提升进行客户端缓冲,但代价是其他客户端上出现的数据会出现一些滞后。