磁盤的五個常見性能指標,使用率,飽和度,IOPS,吞吐量和響應時間
使用率:指磁盤處理I/O的時間百分比,過高的使用率,通常意味着磁盤I/O存在性能瓶頸,但是使用率只考慮有沒有I/O,而不考慮I/O大小,當使用率達到100%的時候,磁盤依舊會接受新的I/O請求
飽和度:指磁盤處理I/O的繁忙程度,過高的飽和度意味着磁盤存在嚴重的性能瓶頸,當飽和度打到100%時,則代表磁盤不會再接受新的I/O請求
IOPS:指每秒的I/O請求數
吞吐量:指每秒的I/O請求大小
響應時間:指I/O請求從發出到收到響應的間隔時間
例如,再數據庫,大量大小文件等這類隨機讀寫比較多的場景中,IOPS更能反應系統的整體性能,而在多媒體等順序讀寫較多的場景中,吞吐量才能更好的反應系統的整體性能
一般來說,再選擇應用程序的服務器時,要先對磁盤的I/O性能進行基准測試,一遍可以准確的評估,磁盤的性能是否可以滿足程序的要求,推薦使用fio
fio -name=mytest -direct=0 -thread -rw=randread -ioengine=psync -bs=4k -size=10M -numjobs=1 -runtime=5 -group_reporting
name:要測試的文件
direct:-direct=0
不使用O_DIECT
方式
thread:創建線程為POSIX線程
rw=randread:I/O類型為隨機讀
psync:則使用pread函數引擎
-bs=4k:塊大小為4k
size:總共讀10M
numjobs=1:總共開1個線程讀
runtime:總共運行時間為10s
group_reporting:結果把多線程匯總輸出
運行結果如下:
bw=平均IO帶寬
iops=IOPS
runt=線程運行時間
slat=提交延遲,提交該IO請求到kernel所花的時間(不包括kernel處理的時間)
clat=完成延遲, 提交該IO請求到kernel后,處理所花的時間
cpu=利用率
IO depths=io隊列
IO submit=單個IO要提交的IO數
io=總共執行了多少size的IO
aggrb=group總帶寬
minb=最小.平均帶寬.
maxb=最大平均帶寬.
mint=group中線程的最短運行時間.
maxt=group中線程的最長運行時間.
ios=所有group總共執行的IO數.
merge=總共發生的IO合並數.
ticks=Number of ticks we kept the disk busy.
io_queue=花費在隊列上的總共時間.
util=磁盤利用率
需要測出不同I/O大小分別再隨機讀,順序讀,隨機寫,順序寫等各種情況下的性能情況
觀測磁盤I/O
iostat是常見的磁盤I/O性能觀測工具
特別注意:
%util ,就是我們前面提到的磁盤 I/O 使用率;
r/s+ w/s ,就是 IOPS;
rkB/s+wkB/s ,就是吞吐量;
r_await+w_await ,就是響應時間。
但同時也要解合請求的大小(rareq-sz 和 wareq-sz)一起分析