linux - 如何解释 /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)的意思是:
- 执行:这种类型的操作需要多长时间执行(从 rpc_init_task 到 rpc_exit_task)(微秒)
如何解释这个?无论块大小如何,它是每个读取操作的平均时间吗?我非常怀疑我的 NFS 有问题:我说的对吗?的值0.1 sec
对我来说看起来很糟糕,但我不确定如何准确地解释这个时间:平均值,一些总和......?
解决方案
阅读内核源代码后,统计信息从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 将是此类操作时间的总和。
推荐阅读
- mysql - 嵌套选择查询更高效
- python - 来自源代码的 TensorFlow 的工作速度比从 pip 安装的版本慢
- java - 在 Java 中清除 Artemis ActiveMQServer 队列
- node.js - 链码查询不同通道上的链码
- c# - 导致“InvalidCastExceptions”的多个异步 Cosmos DB 查询
- node.js - MONGODB_URI 未定义
- powershell - 连接到 microsoft.Exchange Office365 的脚本中途超时并再次提示输入凭据
- c# - 具有自定义 DI 的通用托管尝试获取错误的类型
- java - 如何将文本文件打印到介绍 jpanel?
- git - 使用 git svn 不完整的 svn 提交历史