解释来自 /proc/[id]/mountstats 或 /proc/self/mountstats 的数据
Posted
技术标签:
【中文标题】解释来自 /proc/[id]/mountstats 或 /proc/self/mountstats 的数据【英文标题】:Interpreting data from /proc/[id]/mountstats or /proc/self/mountstats 【发布时间】:2012-05-04 01:28:57 【问题描述】:我想监控我的 NFS 共享的 IO。有很多程序正在解释/proc/[id]/mountstats
([id] = nfs 客户端/服务器的 id)或/proc/self/mountstats
中的数据。问题是,这些程序每秒计算一些 IO。这在命令行中非常好,但对于我的监控解决方案来说却毫无用处。所以我想自己解读mountstats
的计数器。我现在的问题是,我需要一些关于 nfs v4 的 mountstats
的文档。
到目前为止,我的搜索还没有找到任何有用的东西。
感谢您的帮助
/proc/self/mountstats 在 Ubuntu(nfs 客户端)上的示例输出:
...
device IPADRESS:/mountpoint mounted on /mnt/mountpoint with fstype nfs4 statvers=1.0
opts: rw,vers=4,rsize=1048576,wsize=1048576,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys
age: 77663
caps: caps=0x1e,wtmult=512,dtsize=4096,bsize=0,namelen=255
nfsv4: bm0=0xfdffbfff,bm1=0xf9be3e,acl=0x3
sec: flavor=1,pseudoflavor=1
events: 1462723 25756220 1025148 1164028 1083099 2027020 31347107 1984730 279773 1915700 1346583 21077199 520498 31825 525298 39026 2180470 1083041 0 16822 990144 11011 0 0 0
bytes: 46686144592 3990939437 0 0 30238687174 3759616491 7739053 1346583
RPC iostats version: 1.0 p/v: 100003/4 (nfs)
xprt: tcp 852 1 2 0 0 11822378 11822377 0 17669710 13357205
per-op statistics
NULL: 0 0 0 0 0 0 0 0
READ: 1950114 1950114 0 330348288 30355844804 105050 6678050 6907640
WRITE: 911822 911822 0 3932410080 215189360 10653830 1472320 12211620
COMMIT: 389509 389509 0 65718096 88808052 8060 253550 284360
OPEN: 1168845 1168845 0 292577612 554554444 430040 628900 1229990
OPEN_CONFIRM: 43 43 0 7048 2924 0 10 10
OPEN_NOATTR: 0 0 0 0 0 0 0 0
OPEN_DOWNGRADE: 54 54 0 9952 12744 90 0 120
CLOSE: 1081161 1081161 0 191495392 255153996 201030 404620 767870
SETATTR: 43303 43303 0 8753024 10046296 1060 25650 30380
FSINFO: 2 2 0 268 184 0 0 0
RENEW: 0 0 0 0 0 0 0 0
SETCLIENTID: 0 0 0 0 0 0 0 0
SETCLIENTID_CONFIRM: 0 0 0 0 0 0 0 0
LOCK: 1140050 1140050 0 246277244 77523400 76270 326950 469890
LOCKT: 1 1 0 188 52 0 0 0
LOCKU: 1037895 1037895 0 187916912 70576860 18130 357530 441480
ACCESS: 450451 450451 0 72511716 102702828 21440 222460 280950
GETATTR: 1462724 1462724 0 224029496 310097488 21290 390910 485350
LOOKUP: 2043380 2043380 0 361899452 532433688 18200 499200 585170
LOOKUP_ROOT: 1 1 0 116 232 0 0 0
REMOVE: 32356 32356 0 5953448 7765440 600 15450 18560
RENAME: 20388 20388 0 5593088 9215376 510 7740 9750
LINK: 537 537 0 132024 231984 0 220 270
SYMLINK: 0 0 0 0 0 0 0 0
CREATE: 999 999 0 227376 293140 30 650 830
PATHCONF: 1 1 0 140 72 0 0 0
STATFS: 2872 2872 0 419360 333152 580 3980 4880
READLINK: 0 0 0 0 0 0 0 0
READDIR: 82718 82718 0 14625720 118955760 770 48470 53310
SERVER_CAPS: 3 3 0 400 264 0 0 0
DELEGRETURN: 0 0 0 0 0 0 0 0
GETACL: 0 0 0 0 0 0 0 0
SETACL: 0 0 0 0 0 0 0 0
FS_LOCATIONS: 0 0 0 0 0 0 0 0
...
【问题讨论】:
我也有同样的问题:serverfault.com/questions/810729/…。你找到解决方案了吗? @JeevanPatnaik 你看过utcc.utoronto.ca/~cks/space/blog/linux/NFSMountstatsIndex吗? 嗨,谢谢..这行得通。请把它作为答案! 还有很多信息:fsl.cs.stony***.edu/~mchen/mountstat-format.txt 【参考方案1】:完整来源:http://www.fsl.cs.stony***.edu/~mchen/mountstat-format.txt
Format of NFS mountstat
Linux内核版本:2.6.32-358.el6.x86_64
重要的统计文件:
- linux/fs/nfs/super.c: nfs_show_stats
- linux/include/linux/nfs_iostat.h: nfs_stat_eventcounters
- linux/net/sunrpc/stats.c: rpc_print_iostats
- linux/net/sunrpc/xprtsock.c: xs_tcp_print_stats
服务器功能(上限)
-
上限:服务器功能
wtmult:服务器磁盘块大小
dtsize: 读取目录大小
bsize:服务器块大小
namlen:
nfsv4 (nfs_show_stats)
-
bm0:attribute_bitmask[0],支持哪些属性
bm1:attribute_bitmask[1],支持哪些属性
acl:acl_bitmask,支持哪些acl属性
秒,此挂载有效的安全特性 (nfs_show_stats)
-
风格:auth->au_ops->au_flavor
伪风味:auth->au_flavor
事件(linux/nfs_iostat.h:nfs_stat_eventcounters)
-
inoderevalidate
dentry 重新验证
数据无效
attrinvalidate
vfsopen
vfslookup
vfsaccess
vfsupdatepage
vfsreadpage
vfsreadpages
vfswritepage
vfswritepages
vfsgetdents
vfssetattr
vfsflush
vfsfsync
vfslock
vfsrelease
拥塞等待
设置attrtrunc
扩展写入
愚蠢的重命名
短读
短写
延迟
pnfs_read
pnfs_write
字节(linux/nfs_iostat.h:nfs_stat_bytecounters)
-
正常读取字节数
正常写入字节数
直接读取字节数
直接写入字节
服务器读取字节数
服务器写入字节(服务器写入字节)
阅读页面
写页
xprt (tcp)
linux/net/sunrpc/xprtsock.c: xs_tcp_print_stats linux/include/linux/sunrpc/xprt.h: struct rpc_xprt-
srcport:临时端口
bind_count:多少 rpcbind 操作
connect_count:多少个 TCP 连接
connect_time:连接用了多长时间
idle_time:传输空闲了多长时间
rpcsends:发送多少个套接字
rpcrecvs:接收多少个套接字
badxids:收到了多少无法匹配的 XID
req_u:网络上的平均请求(槽表利用率)
bklog_u:积压队列利用率(baklog 队列的平均长度)
max_slots:使用的最大 rpc_slots
sending_u:发送 q 利用率
pending_u:等待 q 利用率
每个 RPC 操作类型显示 (rpc_print_iostats)
统计记录:rpc_exit_task ---> xprt_release ---> rpc_count_iostats
这里解释了所有 NFS 协议:http://www.freesoft.org/CIE/Topics/115.htm
-
操作类型的名称
ops 请求了多少这种类型的操作
trans:已发送多少次这种操作类型的传输
超时:发生了多少次这种操作类型的超时
bytes_sent:已为此操作类型发送了多少字节
bytes_recv:此操作类型已收到多少字节
队列:这种类型的操作在队列中等待了多长时间
传输(毫秒)
rtt:客户端等待接收此操作的回复的时间
从服务器输入(毫秒)
execute:这种类型的操作需要多长时间才能执行(来自
rpc_init_task 到 rpc_exit_task)(毫秒)
rpc_run_task ---> rpc_new_task ---> rpc_init_task
最后三个时间统计是用ns收集的,不过是转换的 打印出来时发送到 ms。
执行时间应该接近 (queue + rtt)。
注意,在 Linux 源代码中,字段名称的前缀是 “om_”,例如,第一个字段是“om_ops”而不是“ops”。
NFSv4.0 示例
device 130.245.177.235:/nfsdata/ mounted on /mnt with fstype nfs4 statvers=1.1
opts: rw,vers=4,rsize=1048576,wsize=1048576,namlen=255,acregmin=3,acregmax=60,
acdirmin=30,acdirmax=60,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,
clientaddr=130.245.177.234,minorversion=0,local_lock=none
age: 19 (time, in seconds, since the NFS is mounted)
caps: caps=0xfff7,wtmult=512,dtsize=32768,bsize=0,namlen=255
nfsv4: bm0=0xfdffafff,bm1=0xf9be3e,acl=0x0
sec: flavor=1,pseudoflavor=1
events: 0 168232 0 0 0 10095 217808 0 2 9797 0 9739 0 0 19739 19739 0 19739 0 0 0 0 0 0 0 0 0
bytes: 1612840960 0 0 0 627536112 0 158076 0
RPC iostats version: 1.0 p/v: 100003/4 (nfs)
xprt: tcp 737 0 1 0 0 69698 69697 0 81817 0 2 1082 12119
per-op statistics
NULL: 0 0 0 0 0 0 0 0
READ: 9797 9797 0 1567520 628138612 71 7953 8200
WRITE: 0 0 0 0 0 0 0 0
COMMIT: 0 0 0 0 0 0 0 0
OPEN: 19740 19740 0 4737600 7343280 505 3449 4172
OPEN_CONFIRM: 10211 10211 0 1552072 694348 74 836 1008
OPEN_NOATTR: 0 0 0 0 0 0 0 0
OPEN_DOWNGRADE: 0 0 0 0 0 0 0 0
CLOSE: 19739 19739 0 3316152 2605548 334 3045 3620
SETATTR: 0 0 0 0 0 0 0 0
FSINFO: 1 1 0 132 108 0 0 0
RENEW: 0 0 0 0 0 0 0 0
SETCLIENTID: 0 0 0 0 0 0 0 0
SETCLIENTID_CONFIRM: 0 0 0 0 0 0 0 0
LOCK: 0 0 0 0 0 0 0 0
LOCKT: 0 0 0 0 0 0 0 0
LOCKU: 0 0 0 0 0 0 0 0
ACCESS: 96 96 0 14584 19584 0 8 10
GETATTR: 1 1 0 132 188 0 0 0
LOOKUP: 10095 10095 0 1655576 2382420 36 898 1072
LOOKUP_ROOT: 0 0 0 0 0 0 0 0
REMOVE: 0 0 0 0 0 0 0 0
RENAME: 0 0 0 0 0 0 0 0
LINK: 0 0 0 0 0 0 0 0
SYMLINK: 0 0 0 0 0 0 0 0
CREATE: 0 0 0 0 0 0 0 0
PATHCONF: 1 1 0 128 72 0 0 0
STATFS: 0 0 0 0 0 0 0 0
READLINK: 0 0 0 0 0 0 0 0
READDIR: 0 0 0 0 0 0 0 0
SERVER_CAPS: 2 2 0 256 176 0 0 0
DELEGRETURN: 0 0 0 0 0 0 0 0
GETACL: 0 0 0 0 0 0 0 0
SETACL: 0 0 0 0 0 0 0 0
FS_LOCATIONS: 0 0 0 0 0 0 0 0
RELEASE_LOCKOWNER: 0 0 0 0 0 0 0 0
SECINFO: 0 0 0 0 0 0 0 0
EXCHANGE_ID: 0 0 0 0 0 0 0 0
CREATE_SESSION: 0 0 0 0 0 0 0 0
DESTROY_SESSION: 0 0 0 0 0 0 0 0
SEQUENCE: 0 0 0 0 0 0 0 0
GET_LEASE_TIME: 0 0 0 0 0 0 0 0
RECLAIM_COMPLETE: 0 0 0 0 0 0 0 0
LAYOUTGET: 0 0 0 0 0 0 0 0
GETDEVICEINFO: 0 0 0 0 0 0 0 0
LAYOUTCOMMIT: 0 0 0 0 0 0 0 0
LAYOUTRETURN: 0 0 0 0 0 0 0 0
NFSv4.1 EXAMPLE
===============
device 130.245.177.235:/nfsdata mounted on /mnt with fstype nfs4 statvers=1.1
opts: rw,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=130.245.177.234,local_lock=none
age: 44
impl_id: name='',domain='',date='0,0'
caps: caps=0x3ffff,wtmult=512,dtsize=32768,bsize=0,namlen=255
nfsv4: bm0=0xfdffbfff,bm1=0xf9be3e,bm2=0x800,acl=0x3,sessions,pnfs=not configured
sec: flavor=1,pseudoflavor=1
events: 67379 1692812 0 30749 0 980 1984612 0 0 0 0 0 0 0 96611 96611 0 96611 0 0 0 0 0 0 0 0 0
bytes: 0 0 0 0 0 0 0 0
RPC iostats version: 1.0 p/v: 100003/4 (nfs)
xprt: tcp 674 0 1 0 0 279772 279771 0 649944 0 5 1711 90409
per-op statistics
NULL: 0 0 0 0 0 0 0 0
READ: 0 0 0 0 0 0 0 0
WRITE: 0 0 0 0 0 0 0 0
COMMIT: 0 0 0 0 0 0 0 0
OPEN: 96612 96612 0 27824256 34007424 13349 16253 32061
OPEN_CONFIRM: 0 0 0 0 0 0 0 0
OPEN_NOATTR: 0 0 0 0 0 0 0 0
OPEN_DOWNGRADE: 0 0 0 0 0 0 0 0
CLOSE: 96610 96610 0 19708440 17003360 2936 11082 15386
SETATTR: 0 0 0 0 0 0 0 0
FSINFO: 1 1 0 168 152 0 0 0
RENEW: 0 0 0 0 0 0 0 0
SETCLIENTID: 0 0 0 0 0 0 0 0
SETCLIENTID_CONFIRM: 0 0 0 0 0 0 0 0
LOCK: 0 0 0 0 0 0 0 0
LOCKT: 0 0 0 0 0 0 0 0
LOCKU: 0 0 0 0 0 0 0 0
ACCESS: 16932 16932 0 3183200 2844576 83 1919 2308
GETATTR: 67380 67380 0 12128380 15632160 336 8367 10644
LOOKUP: 1236 1236 0 247176 167784 7 153 197
LOOKUP_ROOT: 0 0 0 0 0 0 0 0
REMOVE: 0 0 0 0 0 0 0 0
RENAME: 0 0 0 0 0 0 0 0
LINK: 0 0 0 0 0 0 0 0
SYMLINK: 0 0 0 0 0 0 0 0
CREATE: 980 980 0 219516 305760 5 168 197
PATHCONF: 1 1 0 164 116 0 0 0
STATFS: 0 0 0 0 0 0 0 0
READLINK: 0 0 0 0 0 0 0 0
READDIR: 0 0 0 0 0 0 0 0
SERVER_CAPS: 2 2 0 328 280 0 0 0
DELEGRETURN: 0 0 0 0 0 0 0 0
GETACL: 0 0 0 0 0 0 0 0
SETACL: 0 0 0 0 0 0 0 0
FS_LOCATIONS: 0 0 0 0 0 0 0 0
RELEASE_LOCKOWNER: 0 0 0 0 0 0 0 0
SECINFO: 0 0 0 0 0 0 0 0
EXCHANGE_ID: 0 0 0 0 0 0 0 0
CREATE_SESSION: 0 0 0 0 0 0 0 0
DESTROY_SESSION: 0 0 0 0 0 0 0 0
SEQUENCE: 0 0 0 0 0 0 0 0
GET_LEASE_TIME: 0 0 0 0 0 0 0 0
RECLAIM_COMPLETE: 0 0 0 0 0 0 0 0
LAYOUTGET: 0 0 0 0 0 0 0 0
GETDEVICEINFO: 0 0 0 0 0 0 0 0
LAYOUTCOMMIT: 0 0 0 0 0 0 0 0
LAYOUTRETURN: 0 0 0 0 0 0 0 0
SECINFO_NO_NAME: 0 0 0 0 0 0 0 0
TEST_STATEID: 0 0 0 0 0 0 0 0
FREE_STATEID: 0 0 0 0 0 0 0 0
GETDEVICELIST: 0 0 0 0 0 0 0 0
BIND_CONN_TO_SESSION: 0 0 0 0 0 0 0 0
DESTROY_CLIENTID: 0 0 0 0 0 0 0 0
# vim: tabstop=2:shiftwidth=2:expandtab:foldmethod=indent
还有https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/linux/nfs_iostat.h 和https://utcc.utoronto.ca/~cks/space/blog/linux/NFSMountstatsIndex 以供进一步阅读。
【讨论】:
【参考方案2】:显然没有比code of the mountstats utility 更好的“文档”了。
【讨论】:
【参考方案3】:你在什么 Linux 上这样做,因为对我来说,在 Redhat 上,mountstats(用于 v4)是这样的:
[root@riau petri]# cat /proc/1511/mountstats
device rootfs mounted on / with fstype rootfs
device /proc mounted on /proc with fstype proc
device /sys mounted on /sys with fstype sysfs
device udev mounted on /dev with fstype devtmpfs
device devpts mounted on /dev/pts with fstype devpts
device tmpfs mounted on /dev/shm with fstype tmpfs
device /dev/mapper/vg_riau-lv_root mounted on / with fstype ext4
device /proc/bus/usb mounted on /proc/bus/usb with fstype usbfs
device /dev/sda1 mounted on /boot with fstype ext4
device /dev/mapper/vg_riau-lv_home mounted on /home with fstype ext4
device none mounted on /proc/sys/fs/binfmt_misc with fstype binfmt_misc
device cgroup mounted on /cgroup/cpuset with fstype cgroup
device cgroup mounted on /cgroup/cpu with fstype cgroup
device cgroup mounted on /cgroup/cpuacct with fstype cgroup
device cgroup mounted on /cgroup/memory with fstype cgroup
device cgroup mounted on /cgroup/devices with fstype cgroup
device cgroup mounted on /cgroup/freezer with fstype cgroup
device cgroup mounted on /cgroup/net_cls with fstype cgroup
device cgroup mounted on /cgroup/blkio with fstype cgroup
device sunrpc mounted on /var/lib/nfs/rpc_pipefs with fstype rpc_pipefs
device /etc/auto.misc mounted on /misc with fstype autofs
device -hosts mounted on /net with fstype autofs
device nfsd mounted on /proc/fs/nfsd with fstype nfsd
【讨论】:
我在 Ubuntu 上执行此操作,对于 nfs 挂载点设备 IPADRESS:/store 使用 fstype nfs4 statvers=1.0 opts: rw,vers=4,rsize 安装在 /mnt/store 上看起来像这样=1048576,wsize=1048576,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys 年龄:75405 ...跨度> @tiflor 啊,这很有用,您可以考虑将其作为示例添加到您的问题中 - 这将是最有帮助的。以上是关于解释来自 /proc/[id]/mountstats 或 /proc/self/mountstats 的数据的主要内容,如果未能解决你的问题,请参考以下文章