Ser*_*gey 23 performance nfs centos
我有两台连接 10Gbit 以太网的机器。让其中一个是 NFS 服务器,另一个是 NFs 客户端。
通过 TCP 测试网络速度,iperf显示双向约 9.8 Gbit/s 的吞吐量,因此网络正常。
测试 NFS 服务器的磁盘性能:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
Run Code Online (Sandbox Code Playgroud)
结果是 ~150 MBytes/s,因此磁盘可以正常写入。
服务器/etc/exports是:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
客户端/mnt/test使用以下选项将此共享安装到本地:
node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)
Run Code Online (Sandbox Code Playgroud)
如果我尝试从 NFS 共享在客户端计算机上下载一个大文件 (~5Gb),我会获得~130-140 MBytes/s 的性能,接近服务器的本地磁盘性能,所以它是令人满意的。
但是,当我尝试将大文件上传到 NFS 共享时,上传开始时约为 1.5 Mbytes/s,缓慢增加到 18-20 Mbytes/s 并停止增加。有时,在实际开始上传之前共享“挂起”几分钟,即主机之间的流量接近于零,如果我执行ls /mnt/test,它在一两分钟内不会返回。然后ls命令返回并以最初的 1.5Mbit/s 速度开始上传。
当上传速度达到最大值(18-20 Mbytes/s)时,我运行iptraf-ng并在网络接口上显示约 190 Mbit/s 的流量,因此网络不是这里的瓶颈,以及服务器的 HDD。
我试过的:
1.
在仅与 100Mbit 以太网 NIC 连接的第三台主机上设置 NFS 服务器。结果是类比的:DL 显示出良好的性能和接近 100Mbit 的网络利用率,上传速度不超过每秒数百 KB,使网络利用率非常低(根据 2.5 Mbit/s iptraf-ng)。
2. 我尝试调整一些 NFS 参数:
sync 或者 async
noatime
不 hard
rsize并且wsize在我的例子中是最大的,所以我试图将它们分几个步骤减少到 8192
3. 我尝试切换客户端和服务器机器(在以前的客户端上设置 NFS 服务器,反之亦然)。此外,还有六台具有相同配置的服务器,因此我尝试以不同的变体将它们相互安装。结果一样。
4. MTU=9000,MTU=9000和802.3ad链路聚合,MTU=1500的链路聚合。
5. sysctl 调优:
node01:~ # cat /etc/sysctl.conf
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000
Run Code Online (Sandbox Code Playgroud)
结果一样。
6. 从本地挂载:
node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/
Run Code Online (Sandbox Code Playgroud)
在这里我得到了相同的结果:从下载/mnt/testmount/速度很快,上传到/mnt/testmount/很慢,不超过 22 MBytes/s 并且在传输实际开始之前有一个小的延迟。这是否意味着网络堆栈可以完美运行并且问题出在 NFS 中?
所有这些都没有帮助,结果与默认配置没有显着差异。echo 3 > /proc/sys/vm/drop_caches在所有测试之前执行。
所有 3 台主机的所有 NICS 的 MTU 为 1500,未执行非标准网络调整。以太网交换机是 Dell MXL 10/40Gbe。
操作系统是 CentOS 7。
node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
我缺少哪些设置?如何使 NFS 快速写入且不挂起?
您在导出语句中使用同步选项。这意味着服务器仅在实际写入磁盘后确认写入操作。假设您有一个旋转的磁盘(即没有 SSD),则每次写入操作平均至少需要磁盘旋转 1/2 圈,这就是速度变慢的原因。
使用异步设置,当写入操作被处理但尚未写入磁盘时,服务器立即向客户端确认写入操作。这有点不可靠,例如,当客户端收到未发生操作的 ack 时发生电源故障的情况。但是,它极大地提高了写入性能。
(编辑)我刚刚看到您已经测试了异步与同步选项。但是,我几乎可以肯定,这是导致您的性能下降问题的原因——我曾经对相同的设置有完全相同的指示。也许你再测试一下。您是否在服务器的导出语句和客户端的挂载操作中同时提供了 async 选项?
| 归档时间: |
|
| 查看次数: |
26957 次 |
| 最近记录: |