1. 程式人生 > >io利用率100%問題

io利用率100%問題

wmb future more ftw not time bsp 調度策略 sta

iostat -mx 1 dm-60 dm-61 dm-62 dm-63 dm-64 dm-65 dm-66 dm-67

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util

dm-60 6.00 0.00 235.00 0.00 118.03 0.00 1028.63 0.40 1.69 1.69 0.00 0.74 17.45
dm-61 0.00 0.00 231.50 0.00 112.55 0.00 995.71 0.38 1.63 1.63 0.00 0.70 16.30
dm-62 0.00 0.00 1349.00 0.00 662.08 0.00 1005.14 122.07 92.08 92.08 0.00 0.59 79.10
dm-63 0.50 0.00 1143.00 0.00 560.10 0.00 1003.57 357.50 271.83 271.83 0.00 0.87 100.00
dm-64 0.00 0.00 1268.00 0.00 623.26 0.00 1006.66 151.34 115.45 115.45 0.00 0.62 79.10
dm-65 0.00 0.00 1288.00 0.00 633.29 0.00 1006.98 156.79 121.89 121.89 0.00 0.63 81.10
dm-66 0.00 0.00 230.50 0.00 112.05 0.00 995.54 0.38 1.66 1.66 0.00 0.71 16.35
dm-67 0.00 0.00 241.50 0.00 117.05 0.00 992.65 0.39 1.61 1.61 0.00 0.70 17.00

svctm 值很小,有一塊盤的io利用率達到了100%。

查看iostat的manpage,

svctm
The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future
sysstat version.

發現該指標已經不具備參考性了,怎麽判斷我這塊100%利用率的硬盤,耗時情況怎麽樣呢,寫了個腳本如下:

#!/bin/bash

blktrace -d /dev/$1 -o hh -w 20
blkparse -i hh -d $1.blktrace.bin
btt -i $1.blktrace.bin >/dev/shm/$1-caq

一個I/O請求進入block layer之後,可能會經歷下面的過程:

  • Remap: 可能被DM(Device Mapper)或MD(Multiple Device, Software RAID) remap到其它設備
  • Split: 可能會因為I/O請求與扇區邊界未對齊、或者size太大而被分拆(split)成多個物理I/O
  • Merge: 可能會因為與其它I/O請求的物理位置相鄰而合並(merge)成一個I/O
  • 被IO Scheduler依照調度策略發送給driver
  • 被driver提交給硬件,經過HBA、電纜(光纖、網線等)、交換機(SAN或網絡)、最後到達存儲設備,設備完成IO請求之後再把結果發回。

采樣了20s,看到底哪裏比較忙。取數據如下:

[[email protected] bak]# vi dm-63-caq

==================== All Devices ====================

ALL MIN AVG MAX N
--------------- ------------- ------------- ------------- -----------
Q2Qdm 0.000000025 0.001386351 0.204286857 3553
Q2Cdm 0.001132298 0.104383169 0.264029949 3554

Q2G 0.000000261 0.000003114 0.001671993 3425
G2I 0.000000437 0.000053202 0.003102351 3411
Q2M 0.000000726 0.000001618 0.000004214 129
I2D 0.000000443 0.000224963 0.014763260 3425
M2D 0.000000720 0.000284257 0.008655580 115
D2C 0.001126306 0.104102819 0.254061182 3554

可以看到D2C這一行,已經達到了平均104ms的單個io消耗,而這個是可以衡量硬件指標的。

由於dm-63是一塊sas的ssd設備,正常情況下的1143次/s的讀,還不應該達到瓶頸,考慮到空間占用也沒有達到60%以上,不應該性能這麽差。

待進一步排查。

io利用率100%問題