为什么网络文件传输有多个小文件时那么慢?

Jam*_*ood 2 nfs network-share samba ftp sftp

通过各种形式的文件传输(例如:FTP、SFTP、NFS 和 Samba)传输大量(数 GB)数据时。它们都面临着相同的问题,即多个小文件有时会阻碍速度降至 MB 或 KB,甚至在 10Gbps 链路上也是如此。

但是,如果我在传输之前压缩、tar 或 rar 整个文件夹,那么网络链接就会完全饱和。

  • 是什么造成了这种效应呢?

  • 可以采取哪些措施来提高通过网络传输大量小文件的性能?

  • 在可用的文件传输协议中,哪种最适合此目的?

我对网络拥有全面的管理权,因此所有配置和选项都可用,例如在网络接口上设置 MTU 和缓冲区大小以及在文件服务器配置中关闭异步和加密,作为一些一次性的想法。

Ter*_*nen 5

每个单独的文件传输都是一个事务,每个事务都有与之相关的开销。一个粗略的例子:

  1. 客户端告诉服务器:“我想发送一个文件,文件名为example.txt,大小为100字节”。
  2. 服务器告诉客户端:“好的,我准备好接收”。
  3. 客户端向服务器发送 100 字节的文件数据。
  4. 服务器确认客户端已收到文件,并关闭本地文件句柄。

在步骤 1,2 和 4 中,客户端和服务器之间存在额外的往返,这会降低吞吐量。此外,这些步骤中发送的信息加起来就是要传输的总体数据。如果元数据为 20 字节,则对于 100 字节文件来说,这将是 20% 的开销。

没有办法避免协议上的每个文件的开销。