在 NFS 共享中复制文件是否涉及网络?

GP9*_*P92 6 performance memory nfs dd transfer

我假设使用以下方法在 NFS 共享中复制文件:

流程一:

  • 客户端请求从 NFS 共享复制数据(如果缓存不存在),数据块会异步复制到 NFS 客户端的内存,然后再次异步将其发送到 NFS 文件管理器以复制到新位置。
  • NFS 文件管理器在内存中异步接收数据块并将其写入新位置。
  • 在这个过程中,虽然读和写都会涉及到网络,但由于读写是异步的,整个读写操作的延迟将与整个数据的读写操作的延迟相同。

因此,从本地硬盘读取并写入NFS与从NFS读取并写入NFS几乎相同。

第一步,如果缓存已经存在,那么读取速度会非常快。

流程2:

  • 客户端向 NFS 服务器发送启动数据复制操作的请求,以及必须读取的位置和必须写入的位置(似乎不是)。
  • 服务器使用它自己的内存来完成其余的读写操作。

因此,不涉及网络。因此,可以有更好的性能(除非网络端没有延迟),但它可能不是这样的。

如果我错了,请随时纠正我。

另外,内存是否涉及每个操作,我的意思是当它通过网络发送数据时,数据首先从磁盘发送到内存(数据缓冲区),然后从内存(数据缓冲区)发送到数据缓冲区(在网络的另一侧)网络),但不是从数据缓冲区到网络另一端的磁盘,对吗?

kof*_*ann 7

NFSv4.2 确实具有卸载复制操作,可以进行服务器到服务器的复制,而无需通过客户端代理数据。现代 Linux 内核(> 3.13?)支持这一点。其他服务器我不知道。

更新

Linux服务器不支持Linux内核4.7服务器端复制 https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/nfsd/nfs4xdr.c?id=refs /标签/v4.7-rc6#n1797

更新2

在内核版本 5.6 中,服务器端副本已添加到 NFSD 实现中

https://lkml.org/lkml/2020/2/7/687