系统相关
首页 > 系统相关> > linux – 网络文件系统预取吗? (或者:Internet文件系统进行优化以减少往返次数)

linux – 网络文件系统预取吗? (或者:Internet文件系统进行优化以减少往返次数)

作者:互联网

请使用以下代码snippit:

 f = open("/mnt/remoteserver/bar/foo.bin", O_RDONNLY);
 while (true)
 {
       byteseread = read(f, buffer, 1000);
       if (bytesread > 0)
           ProcessBytes(buffer, bytesread);
       else
           break;
  }

如果上面的例子,假设远程文件foo.bin是1MB,之前客户端从未访问过.因此,大约有1000次“读取”调用来获取整个文件.

此外,假设客户端上安装目录的服务器是通过Internet而不是本地服务器.为客户端提供快速带宽,但延迟时间长.

每次“读取”调用是否都会调用往返服务器的请求以获取更多数据?或者客户端/服务器协议是否识别出对远程文件的后续读取通常是顺序的,因此,在应用程序实际对其进行read()调用之前,会下推后续块.因此,后续的读取调用返回得更快,因为数据是预先获取和缓存的.

现代网络文件系统协议(NFS,SMB / Samba,还是其他任何协议?)可以进行任何这样的优化.是否有针对互联网调整的网络文件系统协议具有这样的优化?

我正在研究一个可能涉及通过互联网实施网络文件系统的个人项目.令我感到震惊的是,如果可以减少文件i / o的往返次数,性能可能会更快.

解决方法:

这将取决于协议实现.一般来说,我不认为大多数客户端实现预取,但大多数精明的存储管理员使用大块(32 kb参见rsize / wsize挂载选项),这实际上导致相同的事情.网络文件系统通常也会通过系统缓冲区缓存进行缓存,因此您绝对不会将read()调用直接转换为网络IO.

我的建议是天真地编写程序(或简单的测试用例),并通过nfsstat等方便地阅读网络统计数据,然后从那里进行优化.变量太多,无法以其他方式得到答案.

我不是专家,但据我所知,NFS4比旧协议(nfs2,3,cifs)有更多的WAN优化,所以我肯定会把它考虑在你的组合中.也就是说,大多数远程文件系统协议并非真正设计用于高延迟访问,这就是为什么我们最终会使用像S3那样的系统.

标签:filesystems,linux,network-protocols,nfs,samba
来源: https://codeday.me/bug/20190630/1339763.html