本文主要介紹在linux操作系統下,4種磁盤性能測試工具,如:dd、fio、iozone、filebench,並根據實際測試的結果進行簡要分析。
重點提示:
(1)先寫後讀這樣的操作,要在讀的時候先清空內存,否則測試出來的值不真實。
echo 3 > /proc/sys/vm/drop_caches
(2)單塊磁盤,開到的線程最好在2~3之間,否則進程太多測試的值也偏低。
一、dd(使用oflag/iflag標識儘量避免內存的影響)
1.1 dd單進程寫
- 第一種情況:用dd讀取一個2G大小的文件2G.zip,並寫入到/tmp/2G-copy.zip文件中。
time dd if=2G.zip of=/tmp/2G-copy.zip bs=1M count=2048 oflag=direct
- 第二種情況:直接用dd生成一個2G大小的文件
time dd if=/dev/zero of=/tmp/2G-copy.zip bs=1M count=2048 oflag=direct
1.2 dd單進程讀
直接用dd讀取1.1寫入生成的文件:
time dd if=/tmp/2G-copy.zip of=/dev/null bs=1M count=2048 iflag=direct
1.3 dd多進程寫
#!/bin/bash
nbthread=2
blocksize=1
size=1024
start=$(date +%s.%N)
for ((i=0;i<$nbthread;i++));do
echo dd if=/dev/zero of=f$i bs=${blocksize}M count=$size
#dd if=/dev/zero of=f$i bs=${blocksize}k count=1000 oflag=direct &
dd if=/dev/zero of=f$i bs=${blocksize}M count=$size &
done
wait
end=$(date +%s.%N)
echo $start $end
tt=$(echo $end-$start|bc)
rate=$(echo $nbthread*$blocksize*$size/$tt|bc)
printf "rate is %.2f MBytes/s\n" $rate
參數解釋:
nbthread:代表線程數,本案例爲2個線程
blocksize:代表讀寫一次的塊大小,本案例爲1M
size:代表塊個數,本案例爲1024個
rate:代表速率
1.4 dd多進程讀
#!/bin/bash
nbthread=2
blocksize=1
size=1024
start=$(date +%s.%N)
for ((i=0;i<$nbthread;i++));do
echo dd if=f$i of=/dev/null bs=${blocksize}M count=$size
#dd if=f$i of=/dev/null bs=${blocksize}M count=$size iflag=direct &
dd if=f$i of=/dev/null bs=${blocksize}M count=$size
done
wait
end=$(date +%s.%N)
echo $start $end
tt=$(echo $end-$start|bc)
rate=$(echo $nbthread*$blocksize*$size/$tt|bc)
printf "rate is %.2f MBytes/s\n" $rate
參數解釋:
nbthread:代表線程數,本案例爲2個線程
blocksize:代表讀寫一次的塊大小,本案例爲1M
size:代表塊個數,本案例爲1024個
rate:代表速率