磁盘测试命令dd

在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及几个常用参数:sync、dsync、fsync与fdatasync

dd if=/dev/zero of=/tmp/1G bs=4k count=256000 oflag=dsync

dd if=/dev/zero of=/tmp/1G bs=4k count=256000 oflag=sync

dd if=/dev/zero of=/tmp/1G bs=4k count=256000 conv=fsync

dd if=/dev/zero of=/tmp/1G bs=4k count=256000 conv=fdatasync

上面4个命令都是往硬盘中写入1G的数据,只是oflag=dsync和oflag=sync这两个的速度慢的要命。

dd --help中对各参数作用描述如下:

Each FLAG symbol may be:
dsync use synchronized I/O for data // 对应oflag=dsync

   sync likewise, but also for metadata // 对应oflag=sync

Each CONV symbol may be:

   fdatasync physically write output file data before finishing // 对应conv=fdatasync

   fsync likewise, but also write metadata // 对应conv=fsync

区别:
使用dsync/sync,dd会从/dev/zero中,每次读取4Kbytes数据,然后直接写入到硬盘当中,重复此步骤,直到共读取并且写入了1G的数据。
使用fdatasync/fsync,dd会从/dev/zero中一次性读取1G的数据,写入到磁盘的缓存中,然后再从磁盘缓存中读取,一次性写入到硬盘当中。

/dev/在内存当中,和缓存一样,读取速度都非常快,因此两种方式最终的读取速度对最终的写入速度无任何影响。 换种说法,就是此处不管有没有的硬盘缓存,对IO都不产生任何影响。那也就是说,两种方式的主要差异就在于多步与一步。

dsync/sync是一次写一个bs大小的数据,同步写到磁盘后再继续写下一个IO;

fdatasync/fsync是每次写一个bs大小数据到磁盘缓存,dd命令结束前一次性将数据刷入磁盘中,因此IOPS比dsync/sync方式要高的多。

因此可以推断,使用dsync,以1G为blocksize,次数为一的方式往硬盘中写入1 Gbytes的数据,结果将不会与dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 conv=fdatasync有太大的差距。

CONV标识其他参数含义:

  1. conv=notrunc,do not truncate the output file

  2. conv=nocreat, do not create the output file

  3. conv=excl, fail if the output file already exists

FLAG标识其他参数含义:

  1. oflag=direct, use direct I/O for data

  2. oflag=nonblock, use non-blocking I/O

  3. oflag=noatime, do not update access time

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值