
写入速度:
时间dd if = / dev / zero of = test.dbf bs = 8k count = 300000
其中,/ dev / zero是伪设备,它仅生成一个空字符流,并且不为其生成IO. 因此,IO将集中在文件的中,该文件仅用于写入,因此此命令等效于测试磁盘的写入容量.
输出结果相似(因为通常较长的测试时间更准确,因此您可以将计数设置为更大):
300000 + 0条记录
300000 + 0条记录
真实0m36.669s
用户0m0.185s
sys 0m9.340s
所以写入速度是: 8 * 300000/1024 / 36.669 = 63.916M / s
阅读速度:

时间dd if = / dev / sda1 of = / dev / null bs = 8k
因为/ dev / sdb1是物理分区,从中读取将生成IO,而/ dev / null是伪设备,等效于黑洞. of到设备将不会生成IO,因此此命令的IO仅出现在/ dev / sdb1上,这相当于测试磁盘的读取容量
输出类似:
448494 + 0条记录在
448494 + 0记录了
真实0m51.070s
用户0m0.054s
sys 0m10.028s
因此sda1上的读取速度为: 8 * 448494/1024 / 51.070 = 68.61M / s
补充: 您还可以使用time和dd命令在Windows下安装Cygwin,并且输出直接包含IO的时间和速度. 如果您有兴趣,可以尝试一下,但是我测试的速度仅超过40M. 不知道是不是平台. 也许Cygwin的机制与Linux不同.
================================================ ==========================================

dd
dd命令是一个非常强大的命令. 对于某些相对较低级别的问题,使用dd命令通常可以得到意外的结果. 我们可以使用它来测试磁盘的读写性能. 我一直以为他只能测试块设备,但是今天我看到一篇文章说他可以同时测试文件系统(IOzone也可以测试文件系统和块设备,但是IOmeter不能用于测试文件系统).
对于dd命令,两个常用的设备是/ dev / null / dev / zero. 为避免涉及本文的主题,请参阅此特殊设备的说明:
dd的某些参数很难理解. 今天花了两个小时才弄清设置conv = conv = fsync,oflag = sync / dsync. 后两个比较好区分,前两个不容易区分<
我们知道,使用dd来测试硬盘的读写速度只能提供大致的测试结果,它是连续IO而不是随机IO. 从理论上讲,文件大小越大,测试结果越准确. 理论上,bs越大,测量的性能越高
如何真正写入磁盘
dd if = / dev / zero of = test bs = 64k count = 16k这是不准确的,因为在命令结束时实际上并未将数据写入磁盘,因为通常在到达磁盘时先写入磁盘缓存,它将返回.
让我们看一下dd帮助页面中一些参数的说明
FLAG参数(有关完整信息,请参见手册,此处假设您知道iflag和oflag)
-dsync
对数据使用同步I / O. 对于输出文件,这会在每次写入时强制对输出数据进行物理写入. 对于输入文件,当从已由其他进程同步写入的远程文件中读取时,此标志可能很重要. 元数据

(例如,上次访问时间和上次修改时间)不一定要同步.
-sync同样,但也适用于元数据
CONV参数
-fsync
在完成之前同步输出数据和元数据. 这将强制物理写入输出数据和元数据
Dsync和sync可以更好地理解. 前者仅同步写入数据,而同步同时写入元数据
但是dsync和-fsync感觉如何?说法是dd if = / dev / zero of = test bs = 64k count = 4k oflag = dsync这可以看作是模拟的插入操作,因此它很慢,但仍不清楚.
稍后,我仔细地选择了这个英语术语conv = fsync在完成操作之前同步输出数据和元数据,这意味着在dd命令结束之前同步数据和元数据,因此每次编写时是否同步?也就是说,如果我们在dd命令中写了100次,他可能会等到最后一次将它们同步到磁盘上. 并且oflag = dsync表示使用同步
数据的I / O. 对于输出文件,这会在每次写入时强制对输出数据进行物理写入,请注意单词在每次写入时即对输出数据进行物理写入,即每次写入时都要等到下一次写入磁盘时,也就是说,如果我们使用dd写入100次,则每次他写入磁盘时,都会执行下一次写入. 因此,这当然比conv = fsync慢. 然后我觉得如果只写一次,那么两者之间应该没有什么区别. 后来,我做了一个小实验,确认确实如此.

在第一幅图中,我们只写了1个块,然后使用oflag = sync和conv = fsync来测量一个为32.1kb / s,另一个为37.8kb / s. 没有什么区别. 但是下一个我写的1000,conv = fsync显然比oflag = dsync / sync快得多,所以我认为对上述英语推论的理解应该是正确的.
因此,在使用dd进行读取或写入时,如果需要将数据写入磁盘,则应注意自己的使用情况
dd if = / dev / zero of = test bs = 64k count = 16k不准确
如果dd if = / dev / zero of = test bs = 64k count = 16k conv = fsync更准备,他将在dd结束前写入磁盘,
并且dd if = / dev / zero of = test bs = 64k count = 4k oflag = dsync或sync每次写入磁盘时都为true,因此您实际上可以听到磁盘弹出的声音.
dd如何绕过缓存
如果要避免文件系统缓存,不使用缓冲区缓存直接进行读写,则需要进行此设置
iflag = direct,nonblock
oflag = direct,nonblock
iflag = cio
oflag = cio
直接模式是将写请求直接封装到io命令中,然后将其发送到磁盘
在非直接模式下,将数据写入系统缓存,然后将io视为成功,然后操作系统确定何时将缓存中的数据写入磁盘
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/dianqi/article-305734-1.html
中国人在汉朝就已确立一夫一妻