linux磁盘fio压力测试,fio进行磁盘压力测试
fio可以用來測試磁盤IO
常用的參數(shù)如下:
filename=/dev/emcpowerb 支持文件系統(tǒng)或者裸設(shè)備,-filename=/dev/sda2或-filename=/dev/sdb
direct=1? ? ? ? ? ? ? ? 測試過程繞過機(jī)器自帶的buffer,使測試結(jié)果更真實(shí)
rw=randwread? ? ? ? ? ? 測試隨機(jī)讀的I/O
rw=randwrite? ? ? ? ? ? 測試隨機(jī)寫的I/O
rw=randrw? ? ? ? ? ? ? ? 測試隨機(jī)混合寫和讀的I/O
rw=read? ? ? ? ? ? ? ? ? 測試順序讀的I/O
rw=write測試順序?qū)懙腎/O
rw=rw? ? ? ? ? ? ? ? ? ? 測試順序混合寫和讀的I/O
bs=4k? ? ? ? ? ? ? ? ? ? 單次io的塊文件大小為4k
bsrange=512-2048? ? ? ? 同上,提定數(shù)據(jù)塊的大小范圍
size=5g? ? ? ? ? ? ? ? ? 本次的測試文件大小為5g,以每次4k的io進(jìn)行測試
numjobs=30? ? ? ? ? ? ? 本次的測試線程為30
runtime=1000? ? ? ? ? ? 測試時間為1000秒,如果不寫則一直將5g文件分4k每次寫完為止
ioengine=psync? ? ? ? ? io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30在混合讀寫的模式下,寫占30%group_reporting? ? ? ? ? 關(guān)于顯示結(jié)果的,匯總每個進(jìn)程的信息
此外
lockmem=1g? ? ? ? ? ? ? 只使用1g內(nèi)存進(jìn)行測試
zero_buffers? ? ? ? ? ? 用0初始化系統(tǒng)buffer
nrfiles=8每個進(jìn)程生成文件的數(shù)量
測試:
測試隨即讀:
fio -filename=/home/intellif/pandaTest -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
輸出如下:
輸出結(jié)果
輸出結(jié)果的說明:
read列,io表明讀寫磁盤的數(shù)據(jù)量。bw代表磁盤的帶寬,隨即讀還是很慢的,大約5M/s(和此前自己認(rèn)為的相差甚遠(yuǎn)),iops是每秒的io數(shù)量,runt是總共花費(fèi)的時間。
lat(usec),代表io的延遲,單位是納秒,250=0.02%,表示有0.02%的io花費(fèi)了250ns
lat(msec0,代表延遲,單位是毫秒,2=0.24%表示有0.24的io花費(fèi)了3ms,
大部分磁盤隨機(jī)讀的io在10-100ms之間。
其他的輸出,現(xiàn)在還不知道什么意思,以后再研究。
測試隨即寫:
fio -filename=/home/intellif/pandaTest -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
輸出如下:
測試結(jié)果
隨即寫的話速率更低,4.4M/秒。
順序讀的測試如下:
fio -filename=/home/intellif/pandaTest -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
輸出如下:
測試結(jié)果
順序讀達(dá)到了848M/秒!!!!沒有那么夸張吧,大部分讀只需要2ns!!!!!!!!!!!!!!!!難道用到了預(yù)讀,緩存這些???
順序?qū)懙臏y試如下:
fio -filename=/home/intellif/pandaTest -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
輸出如下:
輸出結(jié)果
順序?qū)懙膸捲?5M/s左右,和順序讀的速率差別太大了吧。
100%隨機(jī),70%讀,30%寫
fio -filename=/home/intellif/pandaTest -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k
輸出結(jié)果如下:
測試結(jié)果
隨機(jī)的話讀寫速度都不咋地。
io=執(zhí)行了多少M(fèi)的IO
bw=平均IO帶寬
iops=IOPS
runt=線程運(yùn)行時間
slat=提交延遲
clat=完成延遲
lat=響應(yīng)時間
bw=帶寬
cpu=利用率
IO depths=io隊(duì)列
IO submit=單個IO提交要提交的IO數(shù)
IO complete=Like the above submit number, but for completions instead.
IO issued=The number of read/write requests issued, and how many of them were short.
IO latencies=IO完延遲的分布
io=總共執(zhí)行了多少size的IO
aggrb=group總帶寬
minb=最小.平均帶寬.
maxb=最大平均帶寬.
mint=group中線程的最短運(yùn)行時間.
maxt=group中線程的最長運(yùn)行時間.
ios=所有g(shù)roup總共執(zhí)行的IO數(shù).
merge=總共發(fā)生的IO合并數(shù).
ticks=Number of ticks we kept the disk busy.
io_queue=花費(fèi)在隊(duì)列上的總共時間.
util=磁盤利用率
4、擴(kuò)展之IO隊(duì)列深度
在某個時刻,有N個inflight的IO請求,包括在隊(duì)列中的IO請求、磁盤正在處理的IO請求。N就是隊(duì)列深度。
加大硬盤隊(duì)列深度就是讓硬盤不斷工作,減少硬盤的空閑時間。
加大隊(duì)列深度 -> 提高利用率 -> 獲得IOPS和MBPS峰值 ->注意響應(yīng)時間在可接受的范圍內(nèi),
增加隊(duì)列深度的辦法有很多,使用異步IO,同時發(fā)起多個IO請求,相當(dāng)于隊(duì)列中有多個IO請求,多線程發(fā)起同步IO請求,相當(dāng)于隊(duì)列中有多個IO請求。
增大應(yīng)用IO大小,到達(dá)底層之后,會變成多個IO請求,相當(dāng)于隊(duì)列中有多個IO請求 隊(duì)列深度增加了。
隊(duì)列深度增加了,IO在隊(duì)列的等待時間也會增加,導(dǎo)致IO響應(yīng)時間變大,這需要權(quán)衡。
為何要對磁盤I/O進(jìn)行并行處理呢?主要目的是提升應(yīng)用程序的性能。這一點(diǎn)對于多物理磁盤組成的虛擬磁盤(或LUN)顯得尤為重要。
如果一次提交一個I/O,雖然響應(yīng)時間較短,但系統(tǒng)的吞吐量很小。
相比較而言,一次提交多個I/O既縮短了磁頭移動距離(通過電梯算法),同時也能夠提升IOPS。
假如一部電梯一次只能搭乘一人,那么每個人一但乘上電梯,就能快速達(dá)到目的地(響應(yīng)時間),但需要耗費(fèi)較長的等待時間(隊(duì)列長度)。
因此一次向磁盤系統(tǒng)提交多個I/O能夠平衡吞吐量和整體響應(yīng)時間。
Linux系統(tǒng)查看默認(rèn)隊(duì)列深度:
lsscsi -l
總結(jié)
以上是生活随笔為你收集整理的linux磁盘fio压力测试,fio进行磁盘压力测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java http 下载文件_JAVA通
- 下一篇: linux服务器插上硬盘不能开机,Lin