首页 > 解决方案 > 如何解释 /proc/self/mountstats 中时间列的这种值 - 它是否表明存在性能问题?

问题描述

我有一些 Bladefs 卷,我刚刚检查/proc/self/mountstats了每个操作的统计信息:

...
    opts:   rw,vers=3,rsize=131072,wsize=131072,namlen=255,acregmin=1800,acregmax=1800,acdirmin=1800,acdirmax=1800,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.2.100,mountvers=3,mountport=903,mountproto=tcp,local_lock=all
    age:    18129
    caps:   caps=0x3fc7,wtmult=512,dtsize=32768,bsize=0,namlen=255
    sec:    flavor=1,pseudoflavor=1
    events: 18840 116049 23 5808 22138 21048 146984 13896 287 2181 0 7560 31380 0 9565 5106 0 6471 0 0 13896 0 0 0 0 0 0 
    bytes:  339548407 48622919 0 0 311167118 48622919 76846 13896 
    RPC iostats version: 1.0  p/v: 100003/3 (nfs)
    xprt:   tcp 875 1 7 0 0 85765 85764 1 206637 0 37 1776 35298
    per-op statistics
            NULL: 0 0 0 0 0 0 0 0
         GETATTR: 18840 18840 0 2336164 2110080 92 8027 8817
         SETATTR: 0 0 0 0 0 0 0 0
          LOOKUP: 21391 21392 0 3877744 4562876 118 103403 105518
          ACCESS: 20183 20188 0 2584304 2421960 72 10122 10850
        READLINK: 0 0 0 0 0 0 0 0
            READ: 3425 3425 0 465848 311606600 340 97323 97924
           WRITE: 2422 2422 0 48975488 387520 763 200645 201522
          CREATE: 2616 2616 0 447392 701088 21 870 1088
           MKDIR: 858 858 0 188760 229944 8 573 705
         SYMLINK: 0 0 0 0 0 0 0 0
           MKNOD: 0 0 0 0 0 0 0 0
          REMOVE: 47 47 0 6440 6768 0 8 76
           RMDIR: 23 23 0 4876 3312 0 3 5
          RENAME: 23 23 0 7176 5980 0 5 6
            LINK: 0 0 0 0 0 0 0 0
         READDIR: 160 160 0 23040 4987464 0 16139 16142
     READDIRPLUS: 15703 15703 0 2324044 8493604 43 1041634 1041907
          FSSTAT: 1 1 0 124 168 0 0 0
          FSINFO: 2 2 0 248 328 0 0 0
        PATHCONF: 1 1 0 124 140 0 0 0
          COMMIT: 68 68 0 9248 10336 2 272 275...

关于我的刀片。我对 READ 操作统计感兴趣。据我所知,最后一列(97924)的意思是:

  1. 执行:这种类型的操作需要多长时间执行(从 rpc_init_task 到 rpc_exit_task)(微秒)

如何解释这个?无论块大小如何,它是每个读取操作的平均时间吗?我非常怀疑我的 NFS 有问题:我说的对吗?的值0.1 sec对我来说看起来很糟糕,但我不确定如何准确地解释这个时间:平均值,一些总和......?

标签: linux

解决方案


阅读内核源代码后,统计信息从net/sunrpc/stats.c rpc_clnt_show_stats()打印出来,第 8 列per-op statistics统计信息似乎从_print_rpc_iostats打印出来,它是打印struct rpc_iostats成员om_execute。(最新的内核有 9 列,最后一列有错误。)

该成员看起来仅在rpc_count_iostats_metrics中被引用/实际更改:

execute = ktime_sub(now, task->tk_start);
op_metrics->om_execute = ktime_add(op_metrics->om_execute, execute);

假设按照ktime_add 所说的去做,价值om_execute只会增加。因此,第 8 列 mountstats 将是此类操作时间的总和。


推荐阅读