测试硬盘读写速度软件_Linux 测试 IO 性能(磁盘读写速度)
之前一直知道用dd(device to device)命令可以簡單測試磁盤的IO讀寫速度,但沒有深究。
但這次做性能測試的關(guān)系,需要得到一個(gè)相對精確的值(之前的測試吃過這方面的虧,插個(gè)題外話,性能測試一定要首先確認(rèn)好測試環(huán)境。)網(wǎng)上常見的方法是使用hdparm和dd命令來測試,但實(shí)際的使用起來都有問題,而且測試結(jié)果總感覺有偏差,心里沒底。
于是還是安心研究了下這兩個(gè)命令,也做了一些測試和分析,簡單做下總結(jié)。
用法:
1.測試IO讀
hdparm -t --direct /dev/sda3
IO讀用上面的命令測試即可,不過 hdparm
這個(gè)工具需要自己安裝,而且需要root用戶去執(zhí)行。
2.測試IO寫
sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd bs=1000K count=20000;sync)"
dd bs=1M count=20000 if=/dev/zero of=test.dd conv=fdatasync dd命令測試是IO的順序?qū)懞妥x方式。
3.查看文件系統(tǒng)塊大小
tune2fs -l /dev/sda1 | grep Block
上面的命令行有些復(fù)雜,做下詳細(xì)的解釋:
(1)sync
命令用來刷新文件系統(tǒng)的緩沖區(qū),執(zhí)行sync命令實(shí)際的作用是把內(nèi)存中的數(shù)據(jù)緩沖寫入到磁盤中。
先執(zhí)行下sync命令,是為了減少對后面測試的影響。也可以使用 echo 3 > /proc/sys/vm/drop_caches 來清除緩存。
(2)time
命令用來測試命令的執(zhí)行時(shí)間,shell內(nèi)建還有一個(gè)time命令,我們這里使用全路徑來指定使用的是非內(nèi)建命令。
-p 選項(xiàng)設(shè)置時(shí)間的輸出格式為POSIX缺省時(shí)間格式,單位是秒,在后面的測試小節(jié)可以看到time -p
的輸出形式。
(3)bash
命令 -c
選項(xiàng)的作用是將后面的字符串參數(shù)當(dāng)作bash腳本來執(zhí)行,看起來有些畫蛇添足,好像直接執(zhí)行也是可行的,
其實(shí)不然,因?yàn)楹竺孀址邪藘蓷l命令行,而time命令需要統(tǒng)計(jì)這兩條命令行的執(zhí)行時(shí)間。
(4)小括號的意思是另起一個(gè)子進(jìn)程來執(zhí)行括號中的腳本,dd
這條命令行這里就不講了,不知道的話Baidu吧。
重點(diǎn)是sync命令,因?yàn)楫?dāng)dd退出時(shí),這條命令行提交的大部分內(nèi)容都在內(nèi)存緩沖區(qū)(寫緩存),甚至如果機(jī)器的內(nèi)存相比于你提交的數(shù)據(jù)要大得多,
那可能數(shù)據(jù)都在內(nèi)存中,而再執(zhí)行sync才能將內(nèi)存中的數(shù)據(jù)寫入到磁盤中,否則就成了測試內(nèi)存的寫速度,那顯然不是你想要的結(jié)果。
測試實(shí)踐:
在一臺內(nèi)存64G,SAS硬盤上做了一些測試。
測試過程中,需要關(guān)注兩點(diǎn),磁盤的讀寫速度和IO使用率,我們分別使用iopp和iostat工具來觀察。
測試寫速度:
測試寫入20G數(shù)據(jù),數(shù)據(jù)量越大,測試值應(yīng)該更精確。
# sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd bs=1M count=20000)"
20000+0 records in
20000+0 records out
real 92.87
user 0.00
sys 18.08
寫入20000M的時(shí)間是92.87s,所以磁盤的寫速度為
215.35MB/sec (20000M/92.87)。
使用iostat觀測,%util
一直處于100%的狀態(tài),而iopp
顯示的dd命令寫入速度基本和上面計(jì)算出的值是一致的(取樣時(shí)間設(shè)置為5s)
# iostat -x 5
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.20 864.00 1.60 449004.80 519.56 143.61 163.46 1.16 100.00
# iopp -i -k 5
pid rchar wchar syscr syscw rkb wkb cwkb command
32566 1033216 1033216 0 0 0 1034868 0 dd
注:命令行的當(dāng)前工作目錄在分區(qū)/dev/sda3上,所以test.dd這個(gè)文件也創(chuàng)建在這個(gè)分區(qū)上,下面的讀測試會使用到這個(gè)文件。
測試讀速度:
將dd
和 hdparm的做一個(gè)對比:
# hdparm -t --direct /dev/sda3
/dev/sda3:
Timing O_DIRECT disk reads: 2108 MB in 3.00 seconds = 702.34 MB/sec
hdparm的測試結(jié)果為,3s讀取了2108MB,讀速度為702.34MB。
由于hdparm測試時(shí)間太短,iostat和iopp取樣時(shí)間調(diào)整為1s。
iostat -x 1
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 2752.00 1.00 1409024.00 8.00 511.82 4.64 1.69 0.35 96.10
iopp -i -k 1
pid rchar wchar syscr syscw rkb wkb cwkb command
32349 733184 0 0 0 733184 0 0 hdparm
使用dd做讀取測試
# echo 3 > /proc/sys/vm/drop_caches ; /usr/bin/time -p dd if=test.dd of=/dev/null bs=1M
20000+0 records in
20000+0 records out
real 35.69
user 0.00
sys 9.81
讀取了20G,讀速度為560.38MB/sec。
讀取會比寫入要快,iostat和iopp的取樣時(shí)間調(diào)整為每3s。
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 106.67 0.00 5851.00 0.33 1434256.00 2.67 245.12 1.62 0.28 0.16 93.60
pid rchar wchar syscr syscw rkb wkb cwkb command
17004 1449984 1449984 1 1 1450760 0 0 dd
結(jié)論:
dd測試出的讀速度和hdparm
是存在區(qū)別的,
通過 bs
選項(xiàng) 設(shè)置不通的讀寫塊大小測試(默認(rèn)512字節(jié),測試使用1M),
可以看出 dd
的測出的速度與讀寫塊的大小有關(guān)系,還可能受到系統(tǒng)中有IO讀寫的進(jìn)程的影響。
hdparm的測試原理沒做深入研究,可能是和dd的測試方法存在差別,需要知道這一點(diǎn)。
整體上看,IO的實(shí)際測試速度是受到很多因素影響的,包括讀寫的方式(隨機(jī)還是順序,hdparm和dd測試是都是采用順序讀寫)、緩存機(jī)制、測試的取樣等等。
所以不太可能得到一個(gè)確定的值(相同的命令行多次測試也不一樣,不過差別要小些),以上的方法中讀測試還是推薦使用hdparm。
以上的數(shù)據(jù)雖然存在偏差,但還是能大體分析出機(jī)器的IO性能。只是需要明確,這些測試值是在什么樣的環(huán)境下獲得的。
總結(jié)
以上是生活随笔為你收集整理的测试硬盘读写速度软件_Linux 测试 IO 性能(磁盘读写速度)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python编写函数求n阶调和数_Pyt
- 下一篇: python manager是进程安全的