NFS 吞吐量缓慢

NFS 吞吐量缓慢

我遇到了一些 NFS 吞吐量低于预期的问题。在检查了许多选项(无休止地谷歌搜索)后,包括 raid 设置、网络接口等,我想测试一个基本设置,导出安装在 /media/ramdisk 上的 ramdisk 并通过 localhost 访问它。

使用 ramdisk 进行的测试显示出与我的 SSD RAID0 NFS 导出相同的性能问题模式,通过 NFS 访问时性能会大幅下降,并且 SSD raid 和 ramdisk 的最大读取速度都约为 13K IOPS,写入速度约为 4K IOPS。

服务器:

Ubuntu 18.04,已全面更新。虚拟机配备 5 GB RAM 和 8 个处理器。(主机 CPU:Intel(R) Core(TM) i7-4800)

/etc/exports的内容:

/media/ramdisk       *(rw,async,no_subtree_check,fsid=1)

安装方式:

sudo mount 127.0.0.1:/media/ramdisk /mnt/ramdisk -o async

mount 命令的输出:

127.0.0.1:/media/ramdisk on /mnt/ramdisk type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)

使用 fio 测试没有 NFS 的 ramdisk 的速度,命令如下:

sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

我得到:

read: IOPS=283k, BW=1107MiB/s (1160MB/s)(3070MiB/2774msec)
write: IOPS=94.7k, BW=370MiB/s (388MB/s)(1026MiB/2774msec)
cpu          : usr=21.89%, sys=78.07%, ctx=5, majf=0, minf=7

非常快,正如预期的那样

使用以下命令通过 NFS 进行测试:

sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test2 --filename=/mnt/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

我得到:

read: IOPS=12.7k, BW=49.6MiB/s (51.0MB/s)(3070MiB/61951msec)
write: IOPS=4239, BW=16.6MiB/s (17.4MB/s)(1026MiB/61951msec)
cpu          : usr=5.24%, sys=21.16%, ctx=786004, majf=0, minf=5

我在测试过程中使用 atop 监控系统,测试过程中 CPU 和网络都没有特别大的压力。

直接在 ramdisk 上使用 dd:

sudo dd if=/media/ramdisk/test of=/dev/null bs=1M iflag=nocache status=progress

我得到:

4294967296 bytes (4.3 GB, 4.0 GiB) copied, 0.691044 s, 6.2 GB/s

通过 NFS (/mnt/ramdisk/test) 执行相同操作,我得到:

4294967296 bytes (4.3 GB, 4.0 GiB) copied, 2.58302 s, 1.7 GB/s

我已将 RPCNFSDCOUNT 增加到 64

在本地主机上运行 iperf,我得到

[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  64.6 GBytes  55.5 Gbits/sec

显然网络吞吐量良好。

那么什么因素会阻碍 NFS 的性能呢?

答案1

sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

哦不 :-(,你正在使用--iodepth=64ioengine libaiodirect=0所以这个命令可能不会像你期望的那样运行!请参阅帮助/手册中关于使用ioengine时fio无法使用的警告direct=1libaio

利巴约

Linux 原生异步 I/O。请注意Linux 可能仅支持非缓冲 I/O 的排队行为(设置 direct=1 或 buffered=0)。该引擎定义了引擎特定的选项。[强调添加]

所以libaio很可能表现得好像iodepth=1......(见https://github.com/axboe/fio/issues/512#issuecomment-356604533以获得更详细的解释)

那么什么因素会阻碍 NFS 的性能呢?

我担心您创建的 fio 命令作业会阻碍您的发展 - 也许您需要使用不同的选项和/或不同的 I/O 引擎?

PS:您不太可能推动足够的 I/O,因此这--gtod_reduce=1对您来说不会有任何影响......

相关内容