本文主要介绍在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:代表速率