使用dd命令测试裸盘性能评测

测试裸盘写性能

直接写,不同步数据,不屏蔽写缓存,观察性能,我们可以看到,写的数据越多,磁盘写性能下降很明显,说明这种操作不能正确的反映磁盘写性能

其中/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。

[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 1.21162 s, 338 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 30.8322 s, 133 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=5000000
5000000+0 records in
5000000+0 records out
20480000000 bytes (20 GB) copied, 270.688 s, 75.7 MB/s
[root@orcadt6 opt]#

测试裸盘读性能

直接读,观察性能,

/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力

[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=5000000
5000000+0 records in
5000000+0 records out
20480000000 bytes (20 GB) copied, 219.49 s, 93.3 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 24.9427 s, 164 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 0.353777 s, 1.2 GB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k
^C6425487+0 records in
6425486+0 records out
26318790656 bytes (26 GB) copied, 688.21 s, 38.2 MB/s

看下帮助文档

用法:dd [OPERAND] ......
  或者:dd OPTION
根据操作数复制文件,转换和格式化。

  bs = BYTES一次读写BYTES字节
  cbs = BYTES一次转换BYTES字节
  conv = CONVS按照逗号分隔的符号列表转换文件
  count = N仅复制N个输入块
  ibs = BYTES一次读取BYTES字节(默认值:512)
  if = FILE从FILE而不是stdin读取
  iflag = FLAGS按逗号分隔的符号列表读取
  obs = BYTES一次写BYTES字节(默认值:512)
  of = FILE写入FILE而不是stdout
  oflag = FLAGS根据逗号分隔的符号列表写入
  seek = N在输出开始时跳过N个阻塞大小的块
  skip = N在输入开始时跳过N ibs大小的块
  status = LEVEL要打印到stderr的信息的级别;
                  'none'除了错误消息外都会抑制所有内容,
                  'noxfer'抑制最终转移统计,
                  'progress'显示定期传输统计信息

N和BYTES之后可以跟随以下乘法后缀:
c = 1,w = 2,b = 512,kB = 1000,K = 1024,MB = 1000 * 1000,M = 1024 * 1024,xM = M
对于T,P,E,Z,Y,GB = 1000 * 1000 * 1000,G = 1024 * 1024 * 1024等。

每个CONV符号可能是:

 ascii      从EBCDIC到ASCII
 ebcdic  从ASCII到EBCDIC的ebcdic
 ibm      从ASCII到交替EBCDIC的ibm
 block   阻止填充换行符终止的记录,其空格为cbs-size
 unblock 用换行符替换cbs-size记录中的尾随空格
 lcase  将大写更改为小写
 ucase  将小写更改为大写
 sparse  尝试寻找而不是写入NUL输入块的输出
 swab  交换每对输入字节
 sync 每个输入块同步填充NUL到ibs大小;使用时使用block或unblock,填充空格而不是NUL
 excl  如果输出文件已存在,则excl失败
 nocreat  不创建输出文件
 notrunc  不截断输出文件
 noerror  错误不终止操作
 fdatasync   在完成之前物理同步写入输出文件数据,不只在写缓存后返回
 fsync同样,但同时写入元数据

每个FLAG符号可能是:

 append 追加附加模式(仅对输出有意义;建议使用conv = notrunc)
 direct  直接使用直接I / O数据
 directory 写目录,非目录则失败
 dsync 使用同步I / O进行数据
 sync  同样地同步,但也用于元数据
 fullblock   累积整个输入块(仅限iflag)
 nonblock 使用非阻塞I / O.
 noatime  不更新访问时间
 nocache  丢弃缓存数据
 noctty 不从文件中分配控制终端
 nofollow  不遵循符号链接
 count_bytes   将'count = N'视为字节数(仅限iflag)
 skip_bytes   将'skip = N'视为字节数(仅限iflag)
 seek_bytes   将'seek = N'视为字节数(仅限oflag)

将USR1信号发送到正在运行的'dd'进程就可以了
将I / O统计信息打印到标准错误,然后重新开始复制​​。

  $ dd if = / dev / zero of = / dev / null&pid = $!
  $ kill -USR1 $ pid;sleep 1;kill $ pid
  18335302 + 0记录在
  18335302 + 0记录
   9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s

如何准确测试写磁盘

熟悉以上例子和文档后,查看如何真正写磁盘

分析参数,conv=fdatasync  同步数据io至磁盘,就是io直接下发磁盘成功后返回

oflag=direct,dsync  绕开写缓存直接写入磁盘,同步IO,以下结果相对比较真实,可以从我写的磁盘看出来我使用的是虚拟设备虚拟盘,相对写是比较慢的

[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=10 conv=fdatasync oflag=direct,dsync
10+0 records in
10+0 records out
40960 bytes (41 kB) copied, 0.0886036 s, 462 kB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=100 conv=fdatasync oflag=direct,dsync
100+0 records in
100+0 records out
409600 bytes (410 kB) copied, 0.36866 s, 1.1 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=1000 conv=fdatasync oflag=direct,dsync
1000+0 records in
1000+0 records out
4096000 bytes (4.1 MB) copied, 4.07199 s, 1.0 MB/s
[root@orcadt6 opt]# dd if=/dev/zero of=/dev/vda bs=4k count=10000 conv=fdatasync oflag=direct,dsync
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 42.1317 s, 972 kB/s

读性能评测

同理可得一下读性能,在dd命令中count越大越接近真实情况(持续IO)

[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=10000  iflag=direct,dsync
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 12.4751 s, 3.3 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=1000  iflag=direct,dsync
1000+0 records in
1000+0 records out
4096000 bytes (4.1 MB) copied, 1.10571 s, 3.7 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=10  iflag=direct,dsync
10+0 records in
10+0 records out
40960 bytes (41 kB) copied, 0.00106058 s, 38.6 MB/s
[root@orcadt6 opt]# dd if=/dev/vda of=/dev/null bs=4k count=20000  iflag=direct,dsync
20000+0 records in
20000+0 records out
81920000 bytes (82 MB) copied, 27.4144 s, 3.0 MB/s
发布了59 篇原创文章 · 获赞 69 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/pansaky/article/details/100915400