小文件的 NFS 传输性能缓慢

小文件的 NFS 传输性能缓慢

我在 HP ML370 G5、Smart Array P400 和使用 RAID 1+0 的 SAS 磁盘上使用 Openfiler 2.3。

我使用 Openfiler 的基于 Web 的配置从 ext3 分区设置了 NFS 共享,并成功从另一台主机挂载了该共享。两台主机都使用专用千兆链路连接。

简单基准测试使用dd

 $ dd if=/dev/zero of=outfile bs=1000 count=2000000
 2000000+0 records in
 2000000+0 records out
 2000000000 bytes (2.0 GB) copied, 34.4737 s, 58.0 MB/s

我看到它可以实现中等传输速度 (58.0 MB/s)。

但是,如果我复制一个包含许多小文件(每个文件大约 1-4 kB)的目录,.php.jpg大小约为 300 MB,则该cp过程大约需要 10 分钟才能结束。

NFS 是否不适合上述情况的小文件传输?或者是否必须调整某些参数?

答案1

传输许多小文件总是比传输单个大文件慢的原因有很多。对于读取,文件更有可能分散在磁盘各处,需要到处搜索才能找到它们。正如 Evan 提到的,在 NFS(或任何其他文件系统)的情况下还涉及元数据,这也使事情变得复杂。

您可以尝试增加NFS 挂载的参数,看看这是否会对性能有所提高。另请rsize查看wsize这个问题关于调整 NFS 以获得最小延迟,因为它有很多有用的建议,可以帮助解决许多小文件传输的情况。

答案2

我没有太多 NFS 经验,但我使用其他网络文件共享协议的经验表明,在“许多小文件”的情况下,性能几乎普遍受到影响。您会遇到往返延迟,而对于一大组文件,这种延迟会累积起来。

答案3

您是否尝试过使用其他文件系统,例如 XFS?它解决了我在进行大量小型 iSCSI 块传输时遇到的所有问题。不知道为什么。

此外,iSCSI/NFS 通常配置为相当大的数据帧(巨型帧等),如果您一次复制一个小文件,这可能会对您造成伤害。也许打包然后传输会对您有所帮助。

答案4

检查您是否正在使用 TCP 连接(安装-t nfs-o tcp 主机:/安装/目标)。现代系统的性能不会受到影响,但如果您的网络负载较大,小型 IO 可能会显著改善。

你还应该尝试其他文件系统;ext3 基本上是所有文件系统中最慢的。它很稳定,众所周知,但不太适合文件服务器。XFS 要好得多,reiserfs 在小 IO 方面也好得多。

相关内容