NFS读写性能评估与优化指南(下)

发布于:2025-07-19 ⋅ 阅读:(19) ⋅ 点赞:(0)

#作者:stackofumbrella

3.4 使用fio进行高级性能测试

fio提供了更为详细和灵活的性能测试选项,适用于复杂的测试需求。
安装fio

# yum install -y fio​

编写fio配置文件
创建一个名为nfs_test.fio的配置文件:

[global] 
ioengine=libaio 
direct=1 
bs=4k 
size=1G 
numjobs=4 
runtime=60 
time_based 
group_reporting 
[write_test] 
filename=/mnt/fio_write_test 
rw=write 
[read_test] 
filename=/mnt/fio_write_test 
rw=read

解释
[global]定义了全局参数:
ioengine=libaio:使用Linux异步I/O。
direct=1:直接I/O,绕过缓存。
bs=4k:块大小为4KB。
size=1G:每个作业的测试文件大小为1GB。
numjobs=4:并发4个作业。
runtime=60:每个测试运行60秒。
time_based:基于时间的测试。
group_reporting:汇总报告。
[write_test]和[read_test]分别定义了写入和读取测试。

运行fio测试

# fio nfs_test.fio

示例输出

write_test: (groupid=0, jobs=4): err= 0: pid=12345: Thu Apr 27 12:34:56 2023
  write: IOPS=2000, BW=8000KiB/s (8192 kB/s)(480MiB/60s)
    clat (usec): min=4, max=3000, avg=50.00, stdev=10.00
    lat (usec): min=5, max=3000, avg=51.00, stdev=10.10
    clat percentiles (usec):
     |  1.00th=[    6],  5.00th=[    7], 10.00th=[    8], 20.00th=[    9],
     | 30.00th=[   10], 40.00th=[   11], 50.00th=[   12], 60.00th=[   13],
     | 70.00th=[   14], 80.00th=[   15], 90.00th=[   20], 95.00th=[   25],
     | 99.00th=[  100]

read_test: (groupid=0, jobs=4): err= 0: pid=12346: Thu Apr 27 12:35:56 2023
  read: IOPS=2500, BW=10000KiB/s (10240 kB/s)(600MiB/60s)
    clat (usec): min=3, max=2500, avg=45.00, stdev=8.00
    lat (usec): min=4, max=2500, avg=46.00, stdev=8.10
    clat percentiles (usec):
     |  1.00th=[    5],  5.00th=[    6], 10.00th=[    7], 20.00th=[    8],
     | 30.00th=[    9], 40.00th=[   10], 50.00th=[   11], 60.00th=[   12],
     | 70.00th=[   13], 80.00th=[   14], 90.00th=[   18], 95.00th=[   22],
     | 99.00th=[   90]

解释:
IOPS:每秒输入输出操作次数。
BW:带宽,表示数据传输速率。
clat和lat:分别表示完成时间和总延迟时间的统计数据。
percentiles:延迟时间的分布百分位数。

3.5 使用nfsstat进行统计分析

nfsstat工具用于收集和显示NFS客户端和服务器的性能统计信息。
查看客户端统计信息

# nfsstat -c​

查看服务器统计信息

# nfsstat -s

示例输出

Client rpc stats:
calls      retrans    authrefrsh
1000       0          0

Client nfs v4:
null     getattr   setattr   lookup    access    readlink  read      write
10       500       200       300       400       50        100       200

解释:
calls:NFS调用次数。
retrans:重传次数。
authrefrsh:认证刷新次数。
各种NFS操作(如read、write)的调用次数。

四、结果分析与优化建议 📈

通过dd和fio的测试结果,可以评估NFS的性能表现。同时,结合nfsstat的统计数据,深入分析NFS的调用和响应情况。

4.1 分析步骤

① 比较读写性能
使用dd和fio的带宽和IOPS数据,评估NFS的读写速度是否符合预期。
② 检查延迟
通过clat和lat数据,分析NFS的响应延迟,是否存在瓶颈。
③ 评估NFS调用效率
使用nfsstat查看各类NFS操作的调用次数和重传情况,识别潜在的网络或配置问题。

4.2 优化建议

① 调整NFS配置
增加rsize和wsize参数,优化数据传输块大小。例如:

# sudo mount -t nfs4 -o rsize=1048576,wsize=1048576 server_ip:/srv/nfs/shared /mnt

说明
rsize、wsize对于NFS的性能有很大的影响。wsize和rsize设定了SERVER和CLIENT之间往来数据块的大小,这两个参数的合理设定与很多方面有关,例如LINUX KERNEL、网卡,交换机等等。
用于测试的wsize,rsize最好是1024的倍数,如果使用的是NFS V3则可以尝试的最大数值是32768,而NFS V4则为1MB(1048576字节),更高的数值意义不大。
② 优化网络性能
确保NFS服务器和客户端之间的网络带宽充足,延迟低。使用高速网络(如万兆以太网或更高)。
③ 调整服务器性能
增加服务器的CPU和内存资源,提升处理能力。使用更快的存储设备(如SSD)作为NFS共享目录的存储介质。
④ 启用NFS缓存
在客户端启用fscache缓存机制,减少对服务器的频繁访问,提高性能。例如:

# sudo mount -t nfs4 -o fsc,rsize=1048576,wsize=1048576 server_ip:/srv/nfs/shared /mnt

⑤ 修改系统参数
提高nfsd的线程数(SUSE linux /etc/sysconfig/nfs文件中的USE_KERNEL_NFSD_NUMBER,一个CPU内核至少设置一个线程,根据经验一个CPU内核设置4~8个线程更好)。

# vim /etc/init.d/nfs

找到下面这行修改

[ -z "$RPCNFSDCOUNT" ] && RPCNFSDCOUNT=32 

说明:RPCNFSDCOUNT表示NFS服务器的进程数,增加该值可以提高并发处理能力
提高输入队列的内存限制,注意多个nfsd线程共享这些内存。NSF Client有很高的读负载,NFS Server有很高的写负载时,提高内存限制有重要的作用。

# echo 262144 > /proc/sys/net/core/rmem_default
# echo 262144 > /proc/sys/net/core/rmem_max
# echo 262144 > /proc/sys/net/core/wmem_default
# echo 262144 > /proc/sys/net/core/wmem_max

网站公告

今日签到

点亮在社区的每一天
去签到