读书笔记:time + dd测试硬盘读写速度

电脑杂谈  发布时间:2020-11-28 15:08:07  来源:网络整理

硬盘读取写入速度测试_硬盘读取写入速度测试

写入速度:

时间dd if = / dev / zero of = test.dbf bs = 8k count = 300000

/ dev / zero是伪设备,它仅生成一个空字符流,不生成IO,因此IO将集中在file的of中,该file的仅用于写入,因此此命令相当于测试磁盘的写容量。

输出结果相似(因为通常更长的测试时间更准确,因此您可以将计数设置为更大):

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是伪设备,等效于黑洞。当设备不生成IO时,此命令的IO仅出现在/ dev / sdb1上,这相当于测试磁盘的读取容量

输出类似:

448494 + 0条记录在

448494 + 0记录了

真实0m51.070s

用户0m0.054s

sys 0m10.028s

因此sda1上的读取速度为:8 * 448494/1024/51.070 = 68.61M / s

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可以更好地理解。前者仅同步写入数据,而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是每次写入磁盘一次,因此您实际上可以听到磁盘弹出的声音。

dd如何绕过缓存

如果要避免文件系统缓存,直接读写,不使用缓冲区缓存,则需要进行此设置

iflag = direct,nonblock

oflag = direct,nonblock

iflag = cio

oflag = cio

直接模式是将写请求直接封装到io命令中,然后将其发送到磁盘

在非直接模式下,将数据写入系统缓存,然后将io视为成功,然后操作系统确定何时将缓存中的数据写入磁盘


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/dianqi/article-336613-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...