Last active
March 5, 2023 11:38
-
-
Save sennajox/6200773 to your computer and use it in GitHub Desktop.
Methods of disk io performance testing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
测试磁盘IO性能的几种方法 | |
在磁盘测试中最关心的几个指标分别为:iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)。 | |
当每次IO操作的block较小时,如512bytes/4k/8k等,测试的主要是iops。 | |
当每次IO操作的block较大时,如256k/512k/1M等,测试的主要是bw。 | |
1. 最简单的dd | |
dd是linux自带的磁盘读写工具,可用于测试顺序读写。 | |
一般而言,磁盘读写有两种方式:BufferIO、DirectIO,DirectIO可以更好的了解纯磁盘读写的性能。 | |
1.1 dd测试DirectIO | |
iops——写测试 | |
dd if=/dev/zero of=./a.dat bs=8k count=1M oflag=direct | |
iops——读测试 | |
dd if=./a.dat of=/dev/null bs=8k count=1M iflag=direct | |
bw——写测试 | |
dd if=/dev/zero of=./a.dat bs=1M count=8k oflag=direct | |
bw——读测试 | |
dd if=./a.dat of=/dev/null bs=1M count=8k iflag=direct | |
1.2 dd测试BufferIO | |
BufferIO主要出现在一些大文件读写的场景,由于使用内存做Cache所以读写性能上和DirectIO相比,通常会高很多,尤其是读,所以这个场景下我们仅关心bw即可。 | |
用dd测试BufferIO的写时,需要增加一个conv=fdatasync,使用该参数,在完成所有读写后会调用一个sync确保数据全部刷到磁盘上(期间操作系统也有可能会主动flush),否则就是主要在测内存读写了;另外还有一个参数是oflag=dsync,使用该参数也是走的BufferIO,但却是会在每次IO操作后都执行一个sync。 | |
通常conv=fdatasync更符合大文件读写的场景,所以这里以其作为参数进行测试。 | |
bw——写测试 | |
dd if=/dev/zero of=./a.dat bs=1M count=8k conv=fdatasync | |
bw——读测试 | |
dd if=./a.dat of=/dev/null bs=1M count=8k | |
2. 更专业的fio | |
fio是专门用于测试磁盘IO的工具,与dd相比那是要强大非常多,它可以用于测试顺序读写、随机读写、顺序混合读写、随机混合读写,并且可以调整IO并发量,在测试完成后还会生成一份测试报告,相当给力 | |
本人写了一个使用fio自动测试并整理报告的脚本,安装好fio后即可直接使用。 | |
测试脚本地址如下: | |
https://gist.github.com/sennajox/3667757 | |
3. iozone | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment