- 论坛徽章:
- 0
|
在网上找到的,看看合用不
第一行参数(major minor name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq)的值是通过genhd.c中的diskstats_show()来获得,具体解释如下:
值 变量 描述
3 major 主设备号。3 代表 had
0 minor 次设备号。7 代表 第7 分区
hda name 设备名称
32618 rio 自系统启动以来,完成的读 I/O 设备总次数。这里指真正向 I/O 设备发起并完成的读操作数目,也就是那些放到 I/O 队列中的读请求,并不是每个 read() 调用都引起一个 I/O 请求,很多进程发起的读操作(read())很可能会和其它的读操作进行 merge。
4686 rmerge 自系统启动以来,进行了 merge 读操作的次数
1280392 rsect 自系统启动以来,一共读的扇区总数 (512 bytes/sector)
369680 ruseT 自系统启动以来,全部的从进入读队列到读操作完成的时间总和 (毫秒)。上面的例子显示从开机开始,读 hda 操作共享了约369680秒
52350 Wio 自系统启动以来,完成的写 I/O 设备总次数
18007 wmerge 自系统启动以来,进行了 merge 写操作的次数
8192864 Wsect 自系统启动以来,一共写的扇区总数
19727372 wuseT 自系统启动以来,全部的从进入写队列到写操作完成的时间累积 (毫秒)
0 running 采样时,已进入 I/O 请求队列的正等待进行设备操作的请求总数。上面的例子显示 hda 上的请求队列长度为 0。
303656 useT 自系统启动以来,等待I/O操作完成的等待时间(毫秒)。扣除重复等待时间的净等待时间 (毫秒)。一般比 (ruseT+wuseT) 要小。比如 10 个读请求同时等待了 1 毫秒,那么 ruseT值为10ms, 而 useT值为1ms。因此useT可以理解为I/O队列处于不为空状态的总时间。hda的I/O队列非空时间为 303656 秒,大约5分钟。
20097096 queueT 自系统启动以来,在队列中总的等待时间累积 (毫秒) (约等于ruseT+wuseT)。为什么是“约等于”而不是等于呢?让我们看看queueT, ruseT, wuseT的计算方式,这些量一般是在I/O完成后进行更新的:
queueT += in_flight * (now - disk->stamp);
ruseT += jiffies - req->start_time; // 如果是读操作的话
wuseT += jiffies - req->start_time; // 如果是写操作的话
注意aveq计算中的in_flight,这是当前还在队列中的I/O请求数目。这些I/O还没有完成,所以不能计算到ruseT或wuseT中。理论上,只有在I/O全部完成后,queueT才会等于ruseT+wuseT。
第二行参数(3 3 hda3 35145 1265570 69915 8133232)的解释如下:
3 major 主设备号。3 代表 had
3 minor 次设备号。7 代表 第7 分区
hda3 name 设备名称
35145 rio 自系统启动以来,该扇区完成的读 I/O 设备总次数。
1265570 read sectors 自系统启动以来,一共从该扇区读的总数
69915 write 自系统启动以来,该扇区完成的写I/O 设备总次数。
8133232 write sectors 自系统启动以来,一共从该扇区写的总数 |
|