在Linux系統(tǒng)中,測試硬盤的性能一般使用fio工具實現(xiàn),fio是Flexible I/O Tester的縮寫。是一個常受歡迎的、用于測試存儲性能的工具,而且還可以模擬多種不同的I/O模式和工作負載。
一般我們要測試一塊硬盤的性能,一般需要進行隨機寫入測試、隨機讀取測試、順序?qū)懭霚y試、順序讀取測試和混合讀寫測試這五步。
fio的使用
這個工具不是Linux發(fā)行版自帶的,需要自己手動安裝才行。
# ubuntu
sudo apt install fio
# centos
sudo yum install fio
使用fio測試硬盤的寫性能時,很容易就會造成系統(tǒng)上的數(shù)據(jù)丟失。主要就兩種情況:
-
未指定文件名:不指定文件名會直接對硬盤進行測試。這樣的操作將覆蓋設(shè)備上的數(shù)據(jù),包括文件系統(tǒng)、分區(qū)表等。這將導(dǎo)致整個設(shè)備上的數(shù)據(jù)丟失。
-
文件名重合:指定了文件名但與已存在的文件重合,寫操作將會覆蓋這個文件的內(nèi)容,導(dǎo)致原有數(shù)據(jù)丟失。
隨機寫入性能測試
不繞過緩存
此時會受到會受到操作系統(tǒng)的頁面緩存(page cache)的影響,即操作系統(tǒng)通常會緩存讀寫操作,這可能會導(dǎo)致不真實的高性能讀寫結(jié)果。使用直接I/O可以得到?jīng)]有緩存效應(yīng)的真實磁盤性能。
fio --name=testfile --directory=/home/ehigh/test_dir --size=1G --rw=randwrite --bs=4k --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1
表示在 /home/ehigh/test_dir 目錄中創(chuàng)建一個大小為1G的測試文件testfile,使用隨機寫入的模式進行測試,每次讀/寫的數(shù)據(jù)量是4KB。在30s的時間內(nèi),通過啟動一個工作進程或線程來進行測試。
說明:
-
--name=testfile指定生成的測試文件名稱,不指定就會會直接對硬盤進行測試,可能會造成數(shù)據(jù)丟失
-
--directory指定測試文件存放路徑,不指定就是在當(dāng)前路徑下
-
--numjobs指定測試線程的數(shù)量,模擬單線程或單任務(wù)工作負載,不測試并發(fā)造成的額外壓力,設(shè)置為1就可以了
-
--runtime指定測試時間,短時測試一般30s差不多了,可以快速評估和比較不同配置或硬件的性能
-
--size指定測試文件的大小,一般1G差不多就可以了
-
--rw指定測試的模式,andwrite是隨機寫入模式。randrw: 隨機讀寫。read: 順序讀取。write: 順序?qū)懭?。readwrite:順序混合讀寫(使用rwmixread來指定讀取的百分比。例如,rwmixread=70表示讀取占70%,寫入占30%。)。randrw:隨機混合讀寫(也是結(jié)合rwmixread來指定讀取的百分比)
-
--bs指定每個每個IO操作將使用4KB的大小
-
--end_fsync指定測試結(jié)束時,確保所有寫入都同步到磁,這樣更能確保測試數(shù)據(jù)的準(zhǔn)確

write: IOPS=11.3k, BW=43.0MiB/s
# 在測試期間,平均每秒鐘完成了11.3k次獨立的IO寫操作,這些寫操作的總帶寬是1825KiB每秒(即表示每秒鐘的數(shù)據(jù)寫入速度)
# slat:提交延遲 clat:完成延遲 lat:總延遲
# slat:指應(yīng)用程序提交I/O到操作系統(tǒng),到操作系統(tǒng)接收并開始處理這個I/O所需的時間。 平均的提交延遲為2.68微秒。
# clat:指操作系統(tǒng)開始處理I/O,到I/O操作真正完成所需的時間。完成延遲為1326.67微秒,即約1.326毫秒。
# lat:應(yīng)用程序提交I/O到I/O操作真正完成所需的時間。這里的總延遲的標(biāo)準(zhǔn)偏差為167,993.51微秒,即約168毫秒
# clat percentiles (usec):不同百分位數(shù)下的完成延遲,可以通過這個來確定遲的分布
# 99.99th=[ 545] 如果99th百分位數(shù)的延遲遠高于平均延遲(clat的avg值),這可能意味著存在一些異常高的延遲。
cpu:測試過程中用戶空間和內(nèi)核空間的CPU使用率,usr表示用戶空間。sys表示內(nèi)核空間
# 這個是寫操作的摘要信息
Run status group 0 (all jobs):
WRITE: bw=43.0MiB/s (46.1MB/s), 43.0MiB/s-43.0MiB/s (46.1MB/s-46.1MB/s), io=2048MiB (2147MB), run=46558-46558msec
# bw=43.0MiB/s :平均帶寬,每秒鐘數(shù)據(jù)寫入的速度
# io=2048MiB (2147MB): 在整個測試過程中寫入的總數(shù)據(jù)量。
Disk stats (read/write):
sda: ios=2/7271, merge=0/348, ticks=1637/389056, in_queue=409371, util=95.63%
# ios=2/7271: 讀/寫的I/O操作數(shù),進行了2次讀操作和7271次寫操作
# util=95.63%,測試過程中設(shè)備的利用率,接近100%的值通常意味著磁盤是瓶頸。
繞過緩存
通過 -direct=1 參數(shù) 在 fio 中用于啟用直接I/O模式,數(shù)據(jù)直接從用戶空間傳輸?shù)酱疟P,或從磁盤傳輸?shù)接脩艨臻g,而不經(jīng)過操作系統(tǒng)的緩存。
fio --name=testfile --directory=/home/ehigh/test_dir --size=1G --rw=randwrite --bs=4k --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1 -direct=1

可以明顯看到,繞過緩存后瞬間就降下來了。
多線程測試
--numjobs 參數(shù)在 fio 中用于指定測試中應(yīng)使用的任務(wù)(線程或進程)數(shù)量,可以用來測試并發(fā)度,吞吐量、延遲等內(nèi)容。文章來源:http://www.zghlxwxcb.cn/news/detail-710814.html
因為多個線程執(zhí)行時,可能導(dǎo)致更高的 I/O 壓力和更高的設(shè)備利用率、高延遲等。這樣更加能模擬涉及到多線程或多進程并發(fā)訪問存儲的情況。文章來源地址http://www.zghlxwxcb.cn/news/detail-710814.html
fio --name=testfile --directory=/home/ehigh/test_dir --size=1G --rw=randwrite --bs=4k --ioengine=libaio --iodepth=16 --numjobs=4 --runtime=30 --time_based --end_fsync=1 -direct=1

隨機讀取測試
fio --name=randread --directory=/home/ehigh/test_dir --size=1G --rw=randread --bs=4k --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1
順序?qū)懭霚y試
fio --name=seqwrite --directory=/home/ehigh/test_dir --size=1G --rw=write --bs=1M --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1
順序讀取測試:
fio --name=seqread --directory=/home/ehigh/test_dir --size=1G --rw=read --bs=1M --ioengine=libaio --iodepth=16 --numjobs=1 --runtime=30 --time_based --end_fsync=1
混合讀寫測試
fio --name=mixedrw --rw=rw --rwmixread=70 --bs=4k --numjobs=1 --ioengine=libaio --iodepth=16 --runtime=60 --size=1G --filename=testfile --directory=/home/ehigh/test_dir
到了這里,關(guān)于Linux fio測試硬盤性能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!