原创-linux测试篇- linux如何使用dd命令对 硬盘 U盘进行测试读写速度(详细讲解图表)

时间:2024-04-04 18:30:48

最近在开发对linux测试的一个系统项目,研究了不少

我主要负责软件部分,其余他们负责网页部分,还有数据库部分

体会:测试其实很锻炼人的,一般让你熟悉了解了几十种命令,在此期间,也确实学习了很多,了解了三四百个命令,反正我也没怎么数,其实各种命令其实就是各个内部程序的集成,让你通过调用这些命令,再加以不同的参数来实现你所想要的功能。闲话不多说。

正文:dd命令大家应该有了解过吧,不过网上也确实没有很精细的讲解这块的,尤其是通过测试U盘 硬盘,大部分都是一种思想,就是生成测试文件,清除缓存,接着再进行测试,还有我发现你们测出来的真的和我测出来的实际读写速度大不相同,同样的参数,为什么会不一样呢,于是我开始研究

 

dd命令说明一下:

[[email protected] 桌面]# dd --help

用法:dd [操作数] ...

 或:dd 选项

Copy a file, converting and formatting according to the operands.

 

  bs=BYTES        read and write up to BYTES bytes at a time

  cbs=BYTES       convert BYTES bytes at a time

  conv=CONVS      convert the file as per the comma separated symbol list

  count=N         copy only N input blocks

  ibs=BYTES       read up to BYTES bytes at a time (default: 512)

  if=FILE         read from FILE instead of stdin

  iflag=FLAGS     read as per the comma separated symbol list

  obs=BYTES       write BYTES bytes at a time (default: 512)

  of=FILE         write to FILE instead of stdout

  oflag=FLAGS     write as per the comma separated symbol list

  seek=N          skip N obs-sized blocks at start of output

  skip=N          skip N ibs-sized blocks at start of input

  status=WHICH    WHICH info to suppress outputting to stderr;

                  'noxfer' suppresses transfer stats, 'none' suppresses all

 

N and BYTES may be followed by the following multiplicative suffixes:

c =1, w =2, b =512, kB =1000, K =1024, MB =1000*1000, M =1024*1024, xM =M

GB =1000*1000*1000, G =1024*1024*1024, and so on for T, P, E, Z, Y.

 

Each CONV symbol may be:

 

  ascii     from EBCDIC to ASCII

  ebcdic    from ASCII to EBCDIC

  ibm       from ASCII to alternate EBCDIC

  block     pad newline-terminated records with spaces to cbs-size

  unblock   replace trailing spaces in cbs-size records with newline

  lcase     change upper case to lower case

  ucase     change lower case to upper case

  sparse    try to seek rather than write the output for NUL input blocks

  swab      swap every pair of input bytes

  sync      pad every input block with NULs to ibs-size; when used

            with block or unblock, pad with spaces rather than NULs

  excl fail if the output file already exists

  nocreat do not create the output file

  notrunc 不截断输出文件

  noerror 读取数据发生错误后仍然继续

  fdatasync 结束前将输出文件数据写入磁盘

  fsync 类似上面,但是元数据也一同写入

 

FLAG 符号可以是:

 

  append 追加模式(仅对输出有意义;隐含了conv=notrunc)

  direct 使用直接I/O 存取模式

  directory 除非是目录,否则 directory 失败

  dsync 使用同步I/O 存取模式

  sync 与上者类似,但同时也对元数据生效

  fullblock 为输入积累完整块(仅iflag)

  nonblock 使用无阻塞I/O 存取模式

  noatime 不更新存取时间

  nocache 丢弃缓存数据

  noctty 不根据文件指派控制终端

  nofollow 不跟随链接文件

  count_bytes  treat 'count=N' as a byte count (iflag only)

  skip_bytes  treat 'skip=N' as a byte count (iflag only)

  seek_bytes  treat 'seek=N' as a byte count (oflag only)

 

先看看网上大部分人写的代码,这个是写操作

dd if=/dev/zero of=/opt/tmp/test  bs=4K count=2500

这行代码,生成大概是10M左右的文件,运行后会给出测试结果

在运行完这段后,大家会习惯性的写上清除缓存的代码

echo 3 > /proc/sys/vm/drop_caches

 

此外还有用

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

 

然后接着使用下面的代码,这个是读操作

 

dd if=/opt/tmp/test of=/dev/null  bs=4K count=2500

(也可以这样写)

dd if=/opt/tmp/test of=/dev/null (默认将这个文件的所有内容输出到黑洞文件中去)

 

这条命令就是将文件内容输出到黑洞文件里,/dev/null就是所谓的黑洞文件

当然测试结果也会打印出来

 

《测试结果》

当然在运行完这段后,还是会习惯性的写上清除缓存的代码

echo 3 > /proc/sys/vm/drop_caches

 

 

拓展:

在这里我让大家看下windows的相关测试软件

 

原创-linux测试篇- linux如何使用dd命令对 硬盘 U盘进行测试读写速度(详细讲解图表)

这个软件叫做AS SSD Benchmark

 

为什么我们要看这个软件呢,因为读写速度分为很多种,有顺序读写,有随机读写,有混合读写啥的,还有根据块大小和深度队列不同所进行读写,上图,有顺序读写,有随机读写块大小4K单线程,随机读写块大小4K 64多线程读写。当然我们今天用dd命令也只限于顺序读写,不过块大小要分割开来演示。

其实我们使用刚开始接触dd命令使用,总以为,你生成一个大小的文件,块大小多少都没有关系,只要最后生成大小相差无几就行,但是,注意,这里是但是,块大小的多少会严重影响读写的速度,我们可以通过数据结果来看。

 

这个是不清除缓存后

 

写速度

块大小为512字节,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=512 count=20000

读速度

块大小为512字节,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null bs=512 count=20000

 

块大小为1K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=1K count=10000

块大小为1K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=1K count=10000

 

块大小为4K,生成10M左右的文件

dd if=/dev/zero of=/opt/tmp/test  bs=4K count=2500

块大小为4K,读取10M左右的文件

dd if=/opt/tmp/test of=/dev/null  bs=4K count=2500

 

块大小为16K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=16K count=625

块大小为16K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=16K count=625

 

块大小为64K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=64K count=156

块大小为64K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=64K count=156

 

块大小为128K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=128K count=78

块大小为128K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=128K count=78

 

块大小为256K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=256K count=39

块大小为256K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=256K count=39

 

块大小为1M,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=1M count=10

块大小为1M,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=1M count=10

 

数据结果如图

 

《数据结果》

[[email protected] 桌面]# ./test.sh

写速度块大小为512字节,生成10M左右文件

记录了20000+0 的读入

记录了20000+0 的写出

10240000字节(10 MB)已复制,0.0540299 秒,190 MB/秒

读速度块大小1为512字节,读取10M左右文件

记录了20000+0 的读入

记录了20000+0 的写出

10240000字节(10 MB)已复制,0.00848125 秒,1.2 GB/秒

块大小为1K,生成10M左右文件

记录了10000+0 的读入

记录了10000+0 的写出

10240000字节(10 MB)已复制,0.0197583 秒,518 MB/秒

块大小为1K,读取10M左右文件

记录了10000+0 的读入

记录了10000+0 的写出

10240000字节(10 MB)已复制,0.00611488 秒,1.7 GB/秒

块大小为4K,生成10M左右的文件

记录了2500+0 的读入

记录了2500+0 的写出

10240000字节(10 MB)已复制,0.0118728 秒,862 MB/秒

块大小为4K,读取10M左右的文件

记录了2500+0 的读入

记录了2500+0 的写出

10240000字节(10 MB)已复制,0.00257829 秒,4.0 GB/秒

块大小为16K,生成10M左右文件

记录了625+0 的读入

记录了625+0 的写出

10240000字节(10 MB)已复制,0.0129901 秒,788 MB/秒

块大小为16K,读取10M左右文件

记录了625+0 的读入

记录了625+0 的写出

10240000字节(10 MB)已复制,0.00197821 秒,5.2 GB/秒

块大小为64K,生成10M左右文件

记录了156+0 的读入

记录了156+0 的写出

10223616字节(10 MB)已复制,0.0107955 秒,947 MB/秒

块大小为64K,读取10M左右文件

记录了156+0 的读入

记录了156+0 的写出

10223616字节(10 MB)已复制,0.00271327 秒,3.8 GB/秒

块大小为128K,生成10M左右文件

记录了78+0 的读入

记录了78+0 的写出

10223616字节(10 MB)已复制,0.0121596 秒,841 MB/秒

块大小为128K,读取10M左右文件

记录了78+0 的读入

记录了78+0 的写出

10223616字节(10 MB)已复制,0.00201939 秒,5.1 GB/秒

块大小为256K,生成10M左右文件

记录了39+0 的读入

记录了39+0 的写出

10223616字节(10 MB)已复制,0.0128671 秒,795 MB/秒

块大小为256K,读取10M左右文件

记录了39+0 的读入

记录了39+0 的写出

10223616字节(10 MB)已复制,0.00390159 秒,2.6 GB/秒

块大小为1M,生成10M左右文件

记录了10+0 的读入

记录了10+0 的写出

10485760字节(10 MB)已复制,0.0132603 秒,791 MB/秒

块大小为1M,读取10M左右文件

记录了10+0 的读入

记录了10+0 的写出

10485760字节(10 MB)已复制,0.00277903 秒,3.8 GB/秒

带缓存生成10M文件速度大小

块大小

速度大小

512字节写

190

512字节读

1200

1K写

518

1K读

1700

4K写

862

4K读

4000

16K写

788

16K读

5200

64K写

947

64K读

3800

128K写

841

128K读

5100

256K写

795

256K读

2600

1M写

791

1M读

3800

原创-linux测试篇- linux如何使用dd命令对 硬盘 U盘进行测试读写速度(详细讲解图表)

 

 

这个是清缓存,我们来看下

写速度

块大小为512字节,生成10M左右文件

echo 3 > /proc/sys/vm/drop_caches

dd if=/dev/zero of=/opt/tmp/test  bs=512 count=20000

echo 3 > /proc/sys/vm/drop_caches

读速度

块大小为512字节,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null bs=512 count=20000

echo 3 > /proc/sys/vm/drop_caches

 

 

块大小为1K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=1K count=10000

echo 3 > /proc/sys/vm/drop_caches

 

块大小为1K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=1K count=10000

echo 3 > /proc/sys/vm/drop_caches

 

 

块大小为4K,生成10M左右的文件

dd if=/dev/zero of=/opt/tmp/test  bs=4K count=2500

echo 3 > /proc/sys/vm/drop_caches

块大小为4K,读取10M左右的文件

dd if=/opt/tmp/test of=/dev/null  bs=4K count=2500

echo 3 > /proc/sys/vm/drop_caches

 

 

块大小为16K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=16K count=625

echo 3 > /proc/sys/vm/drop_caches

 

块大小为16K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=16K count=625

echo 3 > /proc/sys/vm/drop_caches

 

块大小为64K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=64K count=156

echo 3 > /proc/sys/vm/drop_caches

 

块大小为64K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=64K count=156

echo 3 > /proc/sys/vm/drop_caches

 

 

块大小为128K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=128K count=78

echo 3 > /proc/sys/vm/drop_caches

 

块大小为128K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=128K count=78

echo 3 > /proc/sys/vm/drop_caches

 

 

块大小为256K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=256K count=39

echo 3 > /proc/sys/vm/drop_caches

 

块大小为256K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=256K count=39

echo 3 > /proc/sys/vm/drop_caches

 

 

块大小为1M,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=1M count=10

echo 3 > /proc/sys/vm/drop_caches

 

块大小为1M,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=1M count=10

echo 3 > /proc/sys/vm/drop_caches

 

 

数据结果如图

 

《数据结果》

[[email protected] 桌面]# ./test5.sh

写速度块大小为512字节,生成10M左右文件

记录了20000+0 的读入

记录了20000+0 的写出

10240000字节(10 MB)已复制,0.207661 秒,49.3 MB/秒

读速度块大小为512字节,读取10M左右文件

记录了20000+0 的读入

记录了20000+0 的写出

10240000字节(10 MB)已复制,0.0868689 秒,118 MB/秒

块大小为1K,生成10M左右文件

记录了10000+0 的读入

记录了10000+0 的写出

10240000字节(10 MB)已复制,0.0405831 秒,252 MB/秒

块大小为1K,读取10M左右文件

记录了10000+0 的读入

记录了10000+0 的写出

10240000字节(10 MB)已复制,0.0763062 秒,134 MB/秒

块大小为4K,生成10M左右的文件

记录了2500+0 的读入

记录了2500+0 的写出

10240000字节(10 MB)已复制,0.0757079 秒,135 MB/秒

块大小为4K,读取10M左右的文件

记录了2500+0 的读入

记录了2500+0 的写出

10240000字节(10 MB)已复制,0.0317507 秒,323 MB/秒

块大小为16K,生成10M左右文件

记录了625+0 的读入

记录了625+0 的写出

10240000字节(10 MB)已复制,0.0411091 秒,249 MB/秒

块大小为16K,读取10M左右文件

记录了625+0 的读入

记录了625+0 的写出

10240000字节(10 MB)已复制,0.0242548 秒,422 MB/秒

块大小为64K,生成10M左右文件

记录了156+0 的读入

记录了156+0 的写出

10223616字节(10 MB)已复制,0.0404493 秒,253 MB/秒

块大小为64K,读取10M左右文件

记录了156+0 的读入

记录了156+0 的写出

10223616字节(10 MB)已复制,0.0237562 秒,430 MB/秒

块大小为128K,生成10M左右文件

记录了78+0 的读入

记录了78+0 的写出

10223616字节(10 MB)已复制,0.0160116 秒,639 MB/秒

块大小为128K,读取10M左右文件

记录了78+0 的读入

记录了78+0 的写出

10223616字节(10 MB)已复制,0.0574101 秒,178 MB/秒

块大小为256K,生成10M左右文件

记录了39+0 的读入

记录了39+0 的写出

10223616字节(10 MB)已复制,0.0358353 秒,285 MB/秒

块大小为256K,读取10M左右文件

记录了39+0 的读入

记录了39+0 的写出

10223616字节(10 MB)已复制,0.0191546 秒,534 MB/秒

块大小为1M,生成10M左右文件

记录了10+0 的读入

记录了10+0 的写出

10485760字节(10 MB)已复制,0.024598 秒,426 MB/秒

块大小为1M,读取10M左右文件

记录了10+0 的读入

记录了10+0 的写出

10485760字节(10 MB)已复制,0.0183537 秒,571 MB/秒

不带缓存生成10M文件速度大小

块大小

速度大小

512字节写

49.3

512字节读

118

1K写

252

1K读

134

4K写

135

4K读

323

16K写

249

16K读

422

64K写

253

64K读

430

128K写

639

128K读

178

256K写

285

256K读

534

1M写

426

1M读

571

 

原创-linux测试篇- linux如何使用dd命令对 硬盘 U盘进行测试读写速度(详细讲解图表)

我们发现就算清除缓存还是有些问题,于是我们接下来的方法不需要清除缓存,直接通过读写IO

 

写速度

块大小为512字节,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=512 count=20000 oflag=direct

读速度

块大小为512字节,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null bs=512 count=20000 iflag=direct

 

 

块大小为1K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=1K count=10000 oflag=direct

块大小为1K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=1K count=10000 iflag=direct

 

块大小为4K,生成10M左右的文件

dd if=/dev/zero of=/opt/tmp/test  bs=4K count=2500 oflag=direct

块大小为4K,读取10M左右的文件

dd if=/opt/tmp/test of=/dev/null  bs=4K count=2500 iflag=direct

 

块大小为16K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=16K count=625 oflag=direct

块大小为16K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=16K count=625 iflag=direct

 

块大小为64K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=64K count=156 oflag=direct

块大小为64K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=64K count=156 iflag=direct

 

块大小为128K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=128K count=78 oflag=direct

块大小为128K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=128K count=78 iflag=direct

 

块大小为256K,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=256K count=39 oflag=direct

块大小为256K,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=256K count=39 iflag=direct

 

块大小为1M,生成10M左右文件

dd if=/dev/zero of=/opt/tmp/test  bs=1M count=10 oflag=direct

块大小为1M,读取10M左右文件

dd if=/opt/tmp/test of=/dev/null  bs=1M count=10 iflag=direct

 

数据结果如图

 

《数据结果》

 

 

[[email protected] 桌面]# ./test3.sh

写速度块大小为512字节,生成10M左右文件

记录了20000+0 的读入

记录了20000+0 的写出

10240000字节(10 MB)已复制,1.78281 秒,5.7 MB/秒

读速度块大小为512字节,读取10M左右文件

记录了20000+0 的读入

记录了20000+0 的写出

10240000字节(10 MB)已复制,1.48103 秒,6.9 MB/秒

块大小为1K,生成10M左右文件

记录了10000+0 的读入

记录了10000+0 的写出

10240000字节(10 MB)已复制,0.886974 秒,11.5 MB/秒

块大小为1K,读取10M左右文件

记录了10000+0 的读入

记录了10000+0 的写出

10240000字节(10 MB)已复制,0.726957 秒,14.1 MB/秒

块大小为4K,生成10M左右的文件

记录了2500+0 的读入

记录了2500+0 的写出

10240000字节(10 MB)已复制,0.256473 秒,39.9 MB/秒

块大小为4K,读取10M左右的文件

记录了2500+0 的读入

记录了2500+0 的写出

10240000字节(10 MB)已复制,0.187089 秒,54.7 MB/秒

块大小为16K,生成10M左右文件

记录了625+0 的读入

记录了625+0 的写出

10240000字节(10 MB)已复制,0.0379356 秒,270 MB/秒

块大小为16K,读取10M左右文件

记录了625+0 的读入

记录了625+0 的写出

10240000字节(10 MB)已复制,0.0535901 秒,191 MB/秒

块大小为64K,生成10M左右文件

记录了156+0 的读入

记录了156+0 的写出

10223616字节(10 MB)已复制,0.0191549 秒,534 MB/秒

块大小为64K,读取10M左右文件

记录了156+0 的读入

记录了156+0 的写出

10223616字节(10 MB)已复制,0.0181916 秒,562 MB/秒

块大小为128K,生成10M左右文件

记录了78+0 的读入

记录了78+0 的写出

10223616字节(10 MB)已复制,0.00995058 秒,1.0 GB/秒

块大小为128K,读取10M左右文件

记录了78+0 的读入

记录了78+0 的写出

10223616字节(10 MB)已复制,0.00886927 秒,1.2 GB/秒

块大小为256K,生成10M左右文件

记录了39+0 的读入

记录了39+0 的写出

10223616字节(10 MB)已复制,0.00915478 秒,1.1 GB/秒

块大小为256K,读取10M左右文件

记录了39+0 的读入

记录了39+0 的写出

10223616字节(10 MB)已复制,0.00586497 秒,1.7 GB/秒

块大小为1M,生成10M左右文件

记录了10+0 的读入

记录了10+0 的写出

10485760字节(10 MB)已复制,0.00630764 秒,1.7 GB/秒

块大小为1M,读取10M左右文件

记录了10+0 的读入

记录了10+0 的写出

10485760字节(10 MB)已复制,0.00464743 秒,2.3 GB/秒

io读写生成10M速度大小

块大小

速度大小

512字节写

5.7

512字节读

6.9

1K写

11.5

1K读

14.1

4K写

39.9

4K读

54.7

16K写

270

16K读

191

64K写

534

64K读

562

128K写

1000

128K读

1200

256K写

1100

256K读

1700

1M写

1700

1M读

2300

 

  原创-linux测试篇- linux如何使用dd命令对 硬盘 U盘进行测试读写速度(详细讲解图表)