文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>磁盘IO统计数据(一)

磁盘IO统计数据(一)

时间:2007-05-07  来源:LoveForLinux

1. /proc/partitions

kernel 2.4, iostat 数据来源 /proc/partitions

kernel 2.6,iostat 数据来源 /proc/diskstats或

                     /sys/block/[block-device-name]/stat。

 

说明:有的linux系统没有iostat命令,不过也没有关系相应获取数据的文件还是存在的.

 

/proc/partitions 内容

 

# cat /proc/partitions

 

major  minor  #blocks  name  rio  rmerge  rsect  ruse  wio  wmerge  wsect  wuse  

running  use aveq

 

3  0  19535040  hda  12524  31127   344371      344360   12941  25534  308434 1097290

 -1     15800720    28214662

 

3  1  7172991   hda1  13    71      168         140   0          0      0     0

0       140        140

 

3  2  1         hda2  0     0       0           0     0          0      0      0

 0       0          0

 

3  5  5116671   hda5  100   477     665         620   1          1      2     30

 0       610        650

 

3  6  265041    hda6  518   92      4616        2770  257       3375   29056  143880

0        46520     146650

 

3  7  6980211   hda7  11889 30475  338890     340740 12683  22158  279376 953380

 0       509350   1294120]

 

字段解释:

 

major:   主设备号。3 代表 hda。

 

minor:   次设备号。7 代表 No.7 分区。

 

#blocks: 设备总块数 (1024 bytes/block)。19535040*1024 => 20003880960(bytes) ~2G

 

name:   设备名称。如 hda7。

-----------------------------------------------------------------------------------------

 

rio:          完成的读 I/O 设备总次数。指真正向 I/O 设备发起并完成的读操作数目,也就是那些放到 I/O 队列中的读请求。注意很多进程发起的读操作(read())很可能会和其他的操作进行 merge,不一定每个 read() 调用都引起一个 I/O 请求。

 

rmerge:   进行了 merge 的读操作数目。

 

rsect:      读扇区总数 (512 bytes/sector)

 

ruse:       从进入读队列到读操作完成的时间累积 (毫秒)。上面的例子显示从开机开始,读 hda7 操作共用了约340秒。

-----------------------------------------------------------------------------------------

 

wio:    完成的写 I/O 设备总次数。

 

wmerge: 进行了 merge 的写操作数目。

 

wsect:   写扇区总数

 

wuse:   从进入写队列到写操作完成的时间累积 (毫秒)

 

-----------------------------------------------------------------------------------------

 

running:   已进入 I/O 请求队列,等待进行设备操作的请求总数。上面的例子显示 hda7 上的请求队列长度为 0。

 

use:       扣除重叠等待时间的净等待时间 (毫秒)。一般比 (ruse+wuse) 要小。比如 5 个读请求同时等待了 1 毫秒,那么 ruse值为5ms, 而 use值为1ms。use 也可以理解为I/O队列处于不为空状态的总时间。hda7 的I/O队列非空时间为 509 秒,约合8分半钟。

 

aveq:    在队列中总的等待时间累积 (毫秒) (约等于ruse+wuse)。为什么是“约等于”而不是等于呢?让我们看看aveq, ruse, wuse的计算方式,这些量一般是在I/O完成后进行更新的:

 

          aveq += in-flight * (now - disk->stamp);

 

          ruse += jiffies - req->start_time;   // 如果是读操作的话

 

          wuse += jiffies - req->start_time;  // 如果是写操作的话

 

注 意:

     aveq计算中的in-flight,这是当前还在队列中的I/O请求数目。

     这些I/O还没有完成,所以不能计算到ruse或wuse中。

     理论上,只有 在I/O全部完成后,aveq才会等于ruse+wuse。

 

举例:

     假设初始时队列中有三个读请求,每个请求需要1秒钟完成。

     在1.5秒这一时刻, aveq和ruse各是多少呢?

 

          ruse = 1 // 因为此时只有一个请求完成

 

          aveq = 3*1 + 2*0.5 = 4 // 因为第二个请求刚发出0.5秒钟,

                                              //另还有一个请求在队列中呢。

                                              //这样第一秒钟时刻有3个in-flight,而1.5秒

                                              //时刻有2个in-flight.

 

 如果三个请求全部完成后,ruse才和aveq相等:

  ruse = 1 + 2 + 3 = 6

  aveq = 1 + 2 + 3 = 6

 

详细说明请参考 linux/drivers/block/ll_rw_blk.c中的

end_that_request_last()和disk_round_stats()函数。

                                                            (待续)

相关阅读 更多 +
排行榜 更多 +
拉力竞速2

拉力竞速2

体育竞技 下载
文字乱舞水浒

文字乱舞水浒

角色扮演 下载
蓝图公考

蓝图公考

学习教育 下载