【问题标题】:Interpreting data from /proc/[id]/mountstats or /proc/self/mountstats解释来自 /proc/[id]/mountstats 或 /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
 ...

【问题讨论】:

标签: linux bash proc


【解决方案1】:

完整来源:http://www.fsl.cs.stonybrook.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

服务器功能(上限)

  1. 上限:服务器功能
  2. wtmult:服务器磁盘块大小
  3. dtsize: 读取目录大小
  4. bsize:服务器块大小
  5. namlen:

nfsv4 (nfs_show_stats)

  1. bm0:attribute_bitmask[0],支持哪些属性
  2. bm1:attribute_bitmask[1],支持哪些属性
  3. acl:acl_bitmask,支持哪些acl属性

秒,此挂载有效的安全特性 (nfs_show_stats)

  1. 风格:auth->au_ops->au_flavor
  2. 伪风味:auth->au_flavor

事件(linux/nfs_iostat.h:nfs_stat_eventcounters)

  1. inoderevalidate
  2. dentry 重新验证
  3. 数据无效
  4. attrinvalidate
  5. vfsopen
  6. vfslookup
  7. vfsaccess
  8. vfsupdatepage
  9. vfsreadpage
  10. vfsreadpages
  11. vfswritepage
  12. vfswritepages
  13. vfsgetdents
  14. vfssetattr
  15. vfsflush
  16. vfsfsync
  17. vfslock
  18. vfsrelease
  19. 拥塞等待
  20. 设置attrtrunc
  21. 扩展写入
  22. 愚蠢的重命名
  23. 短读
  24. 短写
  25. 延迟
  26. pnfs_read
  27. pnfs_write

字节(linux/nfs_iostat.h:nfs_stat_bytecounters)

  1. 正常读取字节数
  2. 正常写入字节数
  3. 直接读取字节数
  4. 直接写入字节
  5. 服务器读取字节数
  6. 服务器写入字节(服务器写入字节)
  7. 阅读页面
  8. 写页

xprt (tcp)

  • linux/net/sunrpc/xprtsock.c: xs_tcp_print_stats
  • linux/include/linux/sunrpc/xprt.h: struct rpc_xprt
  1. srcport:临时端口
  2. bind_count:多少 rpcbind 操作
  3. connect_count:多少个 TCP 连接
  4. connect_time:连接用了多长时间
  5. idle_time:传输空闲了多长时间
  6. rpcsends:发送多少个套接字
  7. rpcrecvs:接收多少个套接字
  8. badxids:收到了多少无法匹配的 XID
  9. req_u:网络上的平均请求(槽表利用率)
  10. bklog_u:积压队列利用率(baklog 队列的平均长度)
  11. max_slots:使用的最大 rpc_slots
  12. sending_u:发送 q 利用率
  13. pending_u:等待 q 利用率

每个 RPC 操作类型显示 (rpc_print_iostats)

统计记录:rpc_exit_task ---> xprt_release ---> rpc_count_iostats

这里解释了所有 NFS 协议:http://www.freesoft.org/CIE/Topics/115.htm

  1. 操作类型的名称
  2. ops 请求了多少这种类型的操作
  3. trans:已发送多少次这种操作类型的传输
  4. 超时:发生了多少次这种操作类型的超时
  5. bytes_sent:已为此操作类型发送了多少字节
  6. bytes_recv:此操作类型已收到多少字节
  7. 队列:这种类型的操作在队列中等待了多长时间 传输(毫秒)
  8. rtt:客户端等待接收此操作的回复的时间 从服务器输入(毫秒)
  9. 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.hhttps://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 啊,这很有用,您可以考虑将其作为示例添加到您的问题中 - 这将是最有帮助的。
      猜你喜欢
      • 2010-11-26
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多