NAS性能排查工具

nasiostat工具是阿里云NAS团队开发的,用于在Linux客户端采集NFS协议操作时延等实时的指标工具。

功能概述

Linux客户端内核中,NFS Client模块在执行应用层发起的NFS协议操作时,会将操作时延等指标记录到客户端本地的/proc/self/mountstats文件中。nasiostat工具的主要功能是读取并解析该文件,以更易于理解的方式展示指标结果。因此,该工具在运行时非常轻量级,不会占用过多的CPU或内存资源。

监测指标项

指标项

说明

ops/s

每秒完成的 I/O或元数据操作次数。

kB/s

每秒的吞吐大小。

kB/op

每秒所有I/O或元数据操作的平均块大小。

avg RTT (ms)

I/O或元数据请求从NFS Client发送后到NFS Client接收到响应的平均时间。即I/O或元数据请求从NFS Client发送后在网络上的传输时间T2NAS服务端处理请求的时间T3再到服务端响应返回NFS Client的时间T4的平均时间。

avg exe (ms)

I/O或元数据从请求到响应整个操作的完成时间。即请求在内核NFS Client排队等待时间T1 + avg RTT 。

avg queue (ms)

I/O或元数据请求在内核NFS Client中排队等待发送的时间T1。

avg RTT、avg exe、avg queue 时间示意图

image

下载nasiostat工具

  1. 下载nasiostat工具脚本。

    • 如果您的ECS已开通公网权限,可执行以下命令下载。

      wget https://raw.githubusercontent.com/aliyun/nas-client-tools/master/linux_client/nasiostat -O /tmp/nasiostat
    • 如果您的ECS未开通公网权限,您可以将nasiostat工具脚本下载至本地后再上传至服务器。

      1. 下载nasiostat至本地。

      2. 将下载的nasiostat工具脚本上传至ECS。具体操作,请参见上传或下载文件(Linux)

  2. 为工具脚本增加可执行权限。

    sudo chmod +x /tmp/nasiostat

查看性能

执行以下命令,查看NFS协议性能。

/tmp/nasiostat 1 10 -A write,read,getattr,setattr,access,rename,lookup,create,readdir,readdirplus,remove <NAS挂载路径>

重要参数说明如下所示,请根据实际情况替换。

  • 1 : 表示每几秒采样一次,单位为秒。

  • 10 : 表示持续采样多少次。

  • -A : 指定采样的NFS协议操作。例如,write,read,getattr等,常见NFS协议操作,请参见常见NFS协议操作命令

  • <NAS挂载路径> : NAS已挂载至本地的挂载路径。您可以执行mount -l | grep nas查看。

    例如1ca404****.cn-hangzhou.nas.aliyuncs.com:/ /mnt,其中:

    • 1ca404****.cn-hangzhou.nas.aliyuncs.com:NAS挂载点地址。您可以在文件存储NAS控制台文件系统列表页面,单击目标文件系统后的管理,进入挂载使用页面获取挂载地址。更多信息,请参见管理挂载点

    • /:NAS文件系统目录。

    • /mnt:当前服务器上挂载NAS的本地路径。

预期返回示例如下所示:

           ops/s     concurrency      bklogqueue       sendqueue       pendqueue
         777.085               2               0               1               1
op                 ops/s            kB/s           kB/op         retrans    avg RTT (ms)    avg exe (ms)  avg queue (ms)
write              0.722         738.623        1023.263        0 (0.0%)         155.534         823.704         667.887
read             776.335        3296.389           4.246        0 (0.0%)           7.971           8.085           0.091
getattr            0.005           0.001           0.218       1 (14.3%)           2.857           2.857           0.000
setattr            0.001           0.000           0.262        0 (0.0%)           1.000           1.000           0.000
access             0.004           0.001           0.230        0 (0.0%)           0.200           0.200           0.000
rename             0.000           0.000           0.000        0 (0.0%)           0.000           0.000           0.000
lookup             0.001           0.000           0.234        0 (0.0%)           0.000           0.000           0.000
create             0.001           0.000           0.379        0 (0.0%)           1.000           1.000           0.000
readdir            0.000           0.000           0.000        0 (0.0%)           0.000           0.000           0.000
readdirplus        0.000           0.000           0.000        0 (0.0%)           0.000           0.000           0.000
remove             0.000           0.000           0.000        0 (0.0%)           0.000           0.000           0.000

常见NFS协议操作命令

命令

说明

getattr

获取文件属性。

用于检索指定文件系统对象的属性。该对象通过服务器在 LOOKUP、CREATE、MKDIR、SYMLINK、MKNOD 或 READDIRPLUS 过程(或从其他地方描述的 MOUNT 服务)响应中返回的文件句柄来标识。

setattr

设置文件属性。

用于更改服务器上文件系统对象的一个或多个属性。SETATTR 不保证是原子操作。失败的 SETATTR 可能部分更改文件的属性。使用 SETATTR 更改文件大小会间接更改 mtime。

access

检查访问权限。

用于确定用户(由请求中的凭据标识)对文件系统对象拥有的访问权限。客户端将要检查的权限集编码为一个位掩码。服务器会检查位掩码中编码的权限。正常情况下服务器会返回 NFS3_OK 状态以及一个包含客户端被允许的权限的位掩码。

lookup

查找文件名。

在目录中搜索特定名称,并返回对应文件系统对象的文件句柄。

read

读取文件中的数据。

根据文件句柄从文件中读取数据的过程。

write

向文件写入数据。

根据文件句柄将数据写入文件的过程。

create

创建一个文件。

创建一个普通文件的过程。NFS版本3协议引入了MKNOD过程来处理设备文件和FIFO文件的创建。

mkdir

创建一个目录。

用于创建一个新的子目录的过程。许多服务器实现不允许使用文件名 . .. 作为MKDIR操作的目标。在这种情况下,服务器应返回 NFS3ERR_EXIST

remove

删除一个文件。

用于从目录中删除(移除)一个条目。如果目录中的该条目是对应文件系统对象的最后一个引用,则该对象可能会被销毁。通常情况下,REMOVE 操作用于删除非目录文件对象,而RMDIR用于删除目录。

rename

重命名文件或目录。

RENAME操作会将一个文件或目录从其原始位置和名称移动并重命名为新的位置和名称。源目录和目标目录必须位于同一个文件系统和服务器上,以确保操作的一致性和完整性。

readdir

读取目录。

READDIR按顺序从目录中检索可变数量的条目,并返回每个条目的名称和文件标识符,同时提供信息以允许客户端在后续的READDIR请求中获取附加的目录条目。例如ls -l命令是调用了该操作来遍历目录。

readirplus

读取目录扩展。

READDIRPLUS从文件系统目录中检索可变数量的条目,并返回每个条目的完整信息,以及允许客户端在后续READDIRPLUS请求中获取附加的目录条目的信息。READDIRPLUSREADDIR的区别仅在于返回的信息量。在READDIR中,每个条目仅返回文件名和文件标识符(fileid)。而在 READDIRPLUS中,每个条目返回名称、文件标识符(fileid)、属性(包括文件标识符)和文件句柄(file handle)。如ls -l命令是调用了该操作来遍历目录。

异常场景

场景一:avg exe 指标高, avg RTT 指标也高,avg queue 指标很低

这种现象说明瓶颈不在NFS Client,请求在NAS服务端响应慢或网络延时比较高,请提交工单专人支持处理。

场景二:avg exe 指标高, avg RTT 指标低,avg queue 指标很高

这种现象说明瓶颈在客户端,请求在NFS Client排队,建议提升单台ECS访问NAS的吞吐能力。具体操作,请参见如何解决Linux操作系统上访问NAS性能不好?