一、隨機和順序

連續 / 隨機 I/O

連續 I/O :指的是本次 I/O 給出的初始扇區地址和上一次 I/O 的結束扇區地址是完全連續或者相隔不多的。反之,如果相差很大,則算作一次隨機 I/O。

而發生隨機I/O可能是因為磁碟碎片導致磁碟空間不連續,或者當前block空間小於文件大小導致的。

連續 I/O 比隨機 I/O 效率高的原因是:在做連續 I/O 的時候,磁頭幾乎不用換道,或者換道的時間很短;而對於隨機 I/O,如果這個 I/O 很多的話,會導致磁頭不停地換道,造成效率的極大降低。

二、隨機和順序速度比較

要用IOPS來衡量一個IO系統的系能的時候,要說明讀寫的方式以及單次IO的大小,因為讀寫方式會受到旋轉時間和尋道時間影響,而單次IO會受到數據傳輸時間影響

隨機讀與順序讀

隨機讀性能

fio -filename=/home/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randread -bs=4k -size=2G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-read

順序讀性能

fio --filename=/home/test -iodepth=64 -ioengine=libaio --direct=1 --rw=read --bs=1m --size=2g --numjobs=4 --runtime=10 --group_reporting --name=test-read

隨機寫和順序寫

隨機寫性能

fio -filename=/home/test -iodepth=64 -ioengine=libaio -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=20 -group_reporting -name=test-rand-write

順序寫性能

fio -filename=/home/test -iodepth=64 -ioengine=libaio -direct=1 -rw=write -bs=1m -size=2g -numjobs=4 -runtime=20 -group_reporting -name=test-write

參數解釋:

filename=/home/test 測試文件名稱,通常選擇需要測試的盤的data目錄。

direct=1 測試過程繞過機器自帶的buffer。使測試結果更真實。

rw=randwrite 測試隨機寫的I/O

rw=randrw 測試隨機寫和讀的I/O

bs=4k 單次io的塊文件大小為4k (單次IO越小的時候,單次IO所耗費的時間也越少,相應的IOPS也就越大)

size=2g 本次的測試文件大小為2g,以每次4k的io進行測試。

numjobs=64 本次的測試線程為64.

runtime=20 測試時間為20秒,如果不寫則一直將2g文件分4k每次寫完為止。

三、IOPS和吞吐量

為何隨機是關注IOPS,順序關注吞吐量?

因為隨機讀寫的話,每次IO操作的定址時間和旋轉延時都不能忽略不計,而這兩個時間的存在也就限制了IOPS的大小;而順序讀寫可以忽略不計定址時間和旋轉延時,主要花費在數據傳輸的時間上。

四、參考

Linux測試磁碟IO性能(隨機讀寫)

測試雲主機的磁碟IO性能


推薦閱讀:
相關文章