一,工具简介
NFS是一种分布式文件系统协议,允许客户端通过网络访问服务器上的文件。然而,由于网络延迟、服务器负载等原因,NFS操作可能会变得缓慢,从而影响系统性能。
nfsslower
显示慢于阈值的 NFS 读取、写入、打开和 getattr 操作。这有助于我们发现导致NFS性能下降的慢操作,并进一步分析其原因.
该工具还可以追踪commit操作,这是NFS特有的,可能会非常慢。
警告:这会对这些NFS操作(包括从文件系统缓存中的读取和写入)添加低开销的检测。这种读取和写入可能会非常频繁(取决于工作负载;例如,每秒1M次),此时,即使此工具没有打印任何“慢”事件,其开销也可能开始变得显著。
大部分代码是从类似的工具(如ext4slower、zfsslower等)中复制过来的。
默认情况下,使用的最小毫秒阈值为10。
此工具使用kprobes来检测内核的进入和退出信息。将来,首选的方法是使用tracepoints。目前,nfs_read_file、nfs_write_file和nfs_open_file没有任何可用的tracepoints,nfs_getattr有进入和退出的tracepoints,但出于一致性考虑,我们选择了使用kprobes。使用原始tracepoints来追踪nfs:nfs_initiate_commit和nfs:nfs_commit_done。
二,代码示例
#!/usr/bin/env python
from __future__ import print_function
from bcc import BPF
import argparse
from time im