Linux磁盘I/O性能测试及工具dd(device to device)命令 fio hdparm IOMete

我在看别人博客的时候顺便再自己测试的时候整合了可以用的测试工具

感谢https://blog.csdn.net/Jerry_1126/article/details/52294407

测试工具

dd(device to device)命令

fio

hdparm

IOMeter

dd命令能粗略测试硬盘IO性能
不足:执行dd命令测试硬盘IO性能,对硬盘的损害很大,不建议多次或长时间尝试.
测试命令: 
1) 读测试 
root@localhost:/# time dd if=/dev/sdf of=/dev/null bs=8k count=100000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 26.524 s, 395 MB/s
real    0m26.526s
user    0m0.008s
sys     0m5.364s


2) 写测试
root@localhost:~$ time dd if=/dev/zero of=/mnt/ssd/w.bat bs=8k count=100000
100000+0 records in
100000+0 records out
819200000 bytes (819 MB) copied, 1.60734 s, 510 MB/s
real    0m1.610s
user    0m0.016s
sys     0m1.588s


3) 读写测试
root@localhost:~# time dd if=/dev/sdb of=/mnt/ssd/rw.bat bs=8k count=100000
100000+0 records in
100000+0 records out
819200000 bytes (819 MB) copied, 12.1117 s, 67.6 MB/s
real    0m12.118s
user    0m0.044s
sys     0m2.436s

其他说明: 后面有个参数比如:oflag=dsync
完整命令: time dd if=/dev/sdb of=/mnt/ssd/rw.bat bs=8k count=100000 oflag=dsync
加入这个参数后,dd在执行时每次都会进行同步写入操作。也就是说,这条命令每次读取8k后就要先把这8k写入磁盘,然后再读取下面这8k,一共重复10万次。这可能是最慢的一种方式了,因为基本上没有用到写缓存(write cache)。加此参数后,测试最严格的,可以模拟数据库的插入操作,所以很慢,可能更接近真实.

使用举例

hdparm(比较简单)

# hdparm -tT /dev/nvme0n1
/dev/nvme0n1:
 Timing cached reads:   15696 MB in  2.00 seconds = 7866.33 MB/sec
 Timing buffered disk reads: 7506 MB in  3.00 seconds = 2501.42 MB/sec

能够看到 2 秒内读取了 15696MB缓存,而在 3 秒内从磁盘上物理读 7506MB 数据

  • -a<快取分区> 设定读取文件时,预先存入块区的分区数,若不加上<快取分区>选项,则显示目前的设定。
  • -A<0或1> 启动或关闭读取文件时的快取功能。
  • -c<I/O模式> 设定IDE32位I/O模式。
  • -C 检测IDE硬盘的电源管理模式。
  • -d<0或1> 设定磁盘的DMA模式。
  • -f 将内存缓冲区的数据写入硬盘,并清楚缓冲区。
  • -g 显示硬盘的磁轨,磁头,磁区等参数。
  • -h 显示帮助。
  • -i 显示硬盘的硬件规格信息,这些信息是在开机时由硬盘本身所提供。
  • -I 直接读取硬盘所提供的硬件规格信息。
  • -k<0或1> 重设硬盘时,保留-dmu参数的设定。
  • -K<0或1> 重设硬盘时,保留-APSWXZ参数的设定。
  • -m<磁区数> 设定硬盘多重分区存取的分区数。
  • -n<0或1> 忽略硬盘写入时所发生的错误。
  • -p<PIO模式> 设定硬盘的PIO模式。
  • -P<磁区数> 设定硬盘内部快取的分区数。
  • -q 在执行后续的参数时,不在屏幕上显示任何信息。
  • -r<0或1> 设定硬盘的读写模式。
  • -S<时间> 设定硬盘进入省电模式前的等待时间。
  • -t 评估硬盘的读取效率。
  • -T 评估硬盘快取的读取效率。
  • -u<0或1> 在硬盘存取时,允许其他中断要求同时执行。
  • -v 显示硬盘的相关设定。
  • -W<0或1> 设定硬盘的写入快取。
  • -X<传输模式> 设定硬盘的传输模式。
  • -y 使IDE硬盘进入省电模式。
  • -Y 使IDE硬盘进入睡眠模式。
  • -Z 关闭某些Seagate硬盘的自动省电功能。

显示硬盘的相关设置:

# hdparm /dev/sda
 /dev/sda:
 IO_support = 0 (default 16-bit)
 readonly = 0 (off)
 readahead = 256 (on)
 geometry = 19929[柱面数]/255[磁头数]/63[扇区数], sectors = 320173056[总扇区数], start = 0[起始扇区数]

显示硬盘的柱面、磁头、扇区数

# hdparm -g /dev/sda
 /dev/sda:
 geometry = 19929[柱面数]/255[磁头数]/63[扇区数], sectors = 320173056[总扇区数], start = 0[起始扇区数]

评估硬盘的读取效率

 hdparm -t /dev/sda
 /dev/sda:
 Timing buffered disk reads: 166 MB in 3.03 seconds = 54.85 MB/sec
 [[email protected] ~]# hdparm -t /dev/sda
 /dev/sda:
 Timing buffered disk reads: 160 MB in 3.01 seconds = 53.11 MB/sec
 [[email protected] ~]# hdparm -t /dev/sda
 /dev/sda:
 Timing buffered disk reads: 166 MB in 3.00 seconds = 55.31 MB/sec

fio(比较全面)

工具说明: 以顺序读为例子,命令如下:fio -name iops -rw=read -bs=4k -runtime=60 -iodepth 32 -filename /dev/sdf -ioengine libaio -direct=1, 其中rw=read表示随机读,bs=4k表示每次读4k,filename指定对应的分区,这里我是/dev/sdf,direct=1表示不借助缓存 
测试命令:  
1) 顺序读
# fio -name iops -rw=read -bs=4k -runtime=60 -iodepth 32 -filename /dev/sdf -ioengine libaio -direct=1
2) 顺序写
# fio -name iops -rw=write -bs=4k -runtime=60 -iodepth 32 -filename /dev/sdf -ioengine libaio -direct=1
3) 随机读
# fio -name iops -rw=randread -bs=4k -runtime=60 -iodepth 32 -filename /dev/sdf -ioengine libaio -direct=1
4) 随机写
# fio -name iops -rw=randwrite -bs=4k -runtime=60 -iodepth 32 -filename /dev/sdf -ioengine libaio -direct=1
其他说明:
1) fio是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet, guasi, solarisaio
2) 其他非ubuntu操作系统安装说明
wget http://brick.kernel.dk/snaps/fio-2.2.5.tar.gz 
yum install libaio-devel
tar -zxvf fio-2.2.5.tar.gz
cd fio-2.2.5
make && make install

以IO size=4KB为例,fio安装和参数说明见:fio安装与使用和Linux 磁盘IO性能测试工具:FIO 
顺序读

sudo fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=read -filename=/dev/sda2 -name="BS 4KB read test" -iodepth=16 -runtime=60

顺序写(写filename设置为磁盘,不是分区)

sudo fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=write -filename=/dev/sdb -name="BS 4KB read test" -iodepth=16 -runtime=60

随机读

sudo fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randread -filename=/dev/sdb -name="BS 4KB read test" -iodepth=16 -runtime=60

随机写

sudo fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randwrite -filename=/dev/sdb -name="BS 4KB read test" -iodepth=16 -runtime=60

混合读写

sudo fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=randrw -rwmixread=70 -filename=/dev/sdb -name="BS 4KB randrw 70 test" -iodepth=16 -runtime=60
1
结果分析: 

【IOMeter工具】


工具说明: IOMeter是一款功能非常强大的IO测试软件,它除了可以在本机运行测试本机的IO(磁盘)性能之外,还提供了模拟网络应用的能力
测试步骤: 
1. 从Iometer官方网站 http://www.iometer.org/ 得到安装文件

2. Windowns机器上安装iometer-1.1.0-win32.i386-setup.exe,点下一步安装即可

3. Linux主机上下载并解压:tar -jxvf iometer-1.1.0-linux.x86_64-bin.tar.bz2

4. Linux主机上运行./dynamo -i 127.0.0.1 -m 127.0.0.2   (1:WINDOWS主机,2:LINUX主机)
5. iometer使用

1) 在Disk Targets目录下,设置测试的磁盘为(localhost --> /mnt/ssd),为所有工作机组都选择该磁盘

2) 在Access Specifications目录下为所有工作组选择测试项目(可选默认的,也可添加自定义条件)

3) 在results display目录下,选择update frequency频率为1点击开始测试

4) 点击开始测试 ,等待10分钟,OK

IOPS:(Input/Output Per Second)每秒的读写次数,随机读写关注指标,是随机读写频繁的应用,如OLTP(Online Transaction Processing),的关键衡量指标。 
吞吐量:(Throughput)单位时间内可以成功传输的数据数量,也称作传输带宽(bandwidth),顺序读写关注指标,对于大量顺序读写的应用,如VOD(Video On Demand),则更关注吞吐量指标。 
IOPS和吞吐量之间关系:Throughput MB/s = IOPS * KB per IO / 1024,即吞吐量等于IOPS乘以每次IO大小,理论上磁盘可以处理不同的IO大小(如512B、4KB、8KB、16KB),所能达到的Throughput吞吐量是有区别的。简单的来说,物理层面IOPS和Throughput哪个先达到了物理磁盘的极限,就决定了这个物理磁盘的性能阀值。

发布了62 篇原创文章 · 获赞 10 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/cojn52/article/details/91362045