
测试方法: 使用dd命令连续写入磁盘,而不使用内存缓冲区,每次写入8k数据,总共写入20万次,并生成1.6G文件.
测试指令: dd if = / dev / zero of = / data01 / test.dbf bs = 8k count = 200000 conv = fdatasync
---------------------------------------------- <
正确使用dd进行磁盘读写速度测试
dd是在Linux / UNIX下非常有用的命令. 它的功能是复制具有指定大小的块的文件,并在复制时执行指定的转换,因此它可用于测试硬盘的顺序读取和写入功能. 可以写文件,可以写原始设备.
dd语法
--------------------------------------------------- ----------
功能描述: 读取,转换和输出数据.
语法: dd [bs =] [cbs =] [conv =] [count =] [ibs =] [if =] [obs =] [of =] [seek =] [skip =] [-帮助] [-version]
补充说明: dd可以从标准输入或文件读取数据,按照指定的格式转换数据,然后输出到文件,设备或标准输出.
参数:

bs =将ibs(输入)和obs(输出)设置为指定的字节数.
cbs =转换时,每次仅转换指定数目的字节.
conv =指定文件转换方法.
count =仅读取指定数量的块.
ibs =每次读取的字节数.
if =从文件读取.
obs =每次输出的字节数.
of =输出到文件.
seek =输出开始时,跳过指定数量的块.
skip =在阅读开始时,跳过指定数量的块.
-帮助帮助.

-version显示版本信息.
dd常用参数的详细说明
--------------------------------------------------- ----------
如果从xxx读取if = xxx,例如if = / dev / zero,则设备无休止地提供0(不生成读取磁盘IO)
of = xxx写入xxx,可以写入文件,可以写入原始设备. 如of = / dev / null,“黑洞”,它等效于只写文件. 写入其中的所有内容将永远丢失. (不生成写磁盘IO)
bs = 8k每次读取或写入的大小,即块的大小.
count = xxx读写块总数.
避免操作系统的“写缓存”干扰测试结果,请使用sync,fsync,fdatasync
--------------------------------------------------- ----------
有关同步,fsync,fdatasync,请参阅:
dd bs = 8k count = 4k if = / dev / zero of = test.log conv = fsync

dd bs = 8k count = 4k if = / dev / zero of = test.log conv = fdatasync
dd bs = 8k count = 4k if = / dev / zero of = test.log oflag = dsync
dd bs = 8k count = 4k如果= / dev / zero of = test.log默认启用“写缓存”
dd bs = 8k count = 4k如果= / dev / zero of = test.log conv = sync启用了“写入缓存”
dd bs = 8k count = 4k if = / dev / zero of = test.log;同步“写入缓存”启动功能
dd bs = 8k count = 4k if = / dev / zero of = test.log conv = fsync
添加此参数后,dd命令实际上将在最后执行“同步”操作,以使计算出的时间更符合实际使用结果. conv = fsync意味着将文件的“数据”和“元数据”都写入磁盘(元数据包括大小,访问时间st_atime和st_mtime等),因为文件数据和元数据通常存在于硬盘上的不同位置,因此fsync至少需要两个. 对于每个IO写入操作,fsync和fdatasync差别不大. (重要且最有价值的参考)
dd bs = 8k count = 4k if = / dev / zero of = test.log conv = fdatasync
添加此参数后,dd命令实际上将在最后执行“同步”操作,以使计算出的时间更符合实际使用结果. conv = fdatasync意味着仅将文件的“数据”写入磁盘,并且fsync与fdatasync没有太大区别. (重要且最有价值的参考)
dd bs = 8k count = 4k if = / dev / zero of = test.log oflag = dsync
添加此参数后,每读取8k,必须将8k写入磁盘,然后读取下一个8k,总共重复4K次. 这是最慢的方法.

dd bs = 8k count = 4k if = / dev / zero of = test
没有关于操作系统“写入缓存”的参数,并且默认的“写入缓存”已启用. dd首先写数据的操作系统“写缓存”完成写操作. 通常被定期称为update的系统守护程序(通常每30秒更新一次)调用sync函数,以将“写入缓存”中的数据刷新到磁盘. 由于“写缓存”有效,因此您将测试超快性能.
例如: 复制163840000字节(164 MB),0.742906秒,221 MB / s
dd bs = 8k count = 4k if = / dev / zero of = test conv = sync
conv = sync参数清楚表明已启用“写缓存”,默认值为conv = sync
dd bs = 8k count = 4k if = / dev / zero of = test;同步
与第一个完全相同,只有两个单独的命令用分号分隔. 当sync命令准备好实际将数据写入磁盘时,上一个dd命令已经在屏幕上显示了错误的“ write speed”值. 因此您仍然无法获得真正的写入速度.
裸设备测试
----------------------
1. 原始设备到文件系统
dd if = / dev / rsd1b of = / backup / df1.dbf bs = 8k skip = 8 count = 3841
2. 文件系统到原始设备
dd if = / backup / df1.dbf of = / dev / rsd2b bs = 8k seek = 8
有关原始设备的更多信息,请参阅:
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/dianqi/article-293865-1.html
只用一招