linux iostat统计原理
1.diskstats统计io统计主要读取/proc/diskstats节点rd_ios:merge后读操作的次数rd_merges合并读操作的次数。如果两个读操作读取相邻的数据块时,可以被合并成一个,rd_sectors读取的扇区数量。d_ticks 读操作消耗的时间(以毫秒为单位)。每个读操作从__make_request()开始计时,到__blk_mq_end_request()为止,包括了
1.diskstats统计
io统计主要读取/proc/diskstats节点
rd_ios:merge后读操作的次数
rd_merges合并读操作的次数。如果两个读操作读取相邻的数据块时,可以被合并成一个,rd_sectors读取的扇区数量。
d_ticks 读操作消耗的时间(以毫秒为单位)。每个读操作从__make_request()开始计时,到__blk_mq_end_request()为止,包括了在队列中等待的时间。
wr_ios:merge写操作的次数。
wr_merges:合并写操作的次数。
wr_sectors:写入的扇区数量。
wr_ticks:写操作消耗的时间(以毫秒为单位)。
in_flight: 当前未完成的I/O数量。在I/O请求进入队列时该值加1,在I/O结束时该值减1。
io_ticks:该设备用于处理I/O的时间(每个request耗时累加)。
time_in_queue:对字段io_ticks的加权值,ime_in_queue是用当前的I/O数量乘以自然时间。虽然该字段的名称是time_in_queue,但并不真的只是在队列中的时间,其中还包含了硬盘处理I/O的时间。iostat在计算avgqu-sz时会用到这个字段。iostat(1)是以/proc/diskstats为基础计算出来的,因为/proc/diskstats并未把队列等待时间和硬盘处理时间分开,所以凡是以它为基础的工具都不可能分别提供disk service time以及与queue有关的值。
2.iostat计算
“Δ”表示两次取样之间的差值,“Δt”表示采样周期。
tps:每秒I/O次数=[(Δrd_ios+Δwr_ios)/Δt]
r/s:每秒读操作的次数=[Δrd_ios/Δt]
w/s:每秒写操作的次数=[Δwr_ios/Δt]
rkB/s:每秒读取的千字节数=[Δrd_sectors/Δt]*[512/1024]
wkB/s:每秒写入的千字节数=[Δwr_sectors/Δt]*[512/1024]
rrqm/s:每秒合并读操作的次数=[Δrd_merges/Δt]
wrqm/s:每秒合并写操作的次数=[Δwr_merges/Δt]
avgrq-sz:每个I/O的平均扇区数=[Δrd_sectors+Δwr_sectors]/[Δrd_ios+Δwr_ios]
avgqu-sz:平均未完成的I/O请求数量=[Δtime_in_queue/Δt]
(平均未完成的I/O请求数量。)
await:每个I/O平均所需的时间=[Δrd_ticks+Δwr_ticks]/[Δrd_ios+Δwr_ios]
(不仅包括硬盘设备处理I/O的时间,还包括了在kernel队列中等待的时间。)
r_await:每个读操作平均所需的时间=[Δrd_ticks/Δrd_ios]
不仅包括硬盘设备读操作的时间,还包括了在kernel队列中等待的时间。
w_await:每个写操作平均所需的时间=[Δwr_ticks/Δwr_ios]
不仅包括硬盘设备写操作的时间,还包括了在kernel队列中等待的时间。
%util:该硬盘设备的繁忙比率=[Δio_ticks/Δt]
表示该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,只考虑有没有。
svctm:已被废弃的指标,没什么意义,svctm=[util/tput]
3.评估IO瓶颈
主要使用await,rwait,rwait反映IO平均处理时间,具体时间需要参照硬盘说明书,一般不超过10毫秒。
util 100%不能真实反映磁盘的饱和度,只能代表有IO一直在处理,那怎么描述磁盘的饱和度?
可以使用avgqu-sz对比硬件队列深度来衡量磁盘的饱和度
更多推荐
所有评论(0)