Linux dd命令中dsync与fdatasync的区别


在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及到两个参数:dsync与fdatasync,本文介绍一下其区别。
 dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 oflag=dsync
dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 conv=fdatasync 
相信上述两个在Linux系统上使用dd测试磁盘INPUT性能的命令各位都看过,甚至使用过。
 两个都是往硬盘中写入1 Gbytes的数据,只是第一个的速度慢的要命。
 
使用dsync,dd会从/dev/zero中,每次读取4Kbytes数据,然后直接写入到硬盘当中,重复此步骤,直到共读取并且写入了1 Gbytes的数据。
 使用fdatasync,dd会从/dev/zero中一次性读取1 Gbytes的数据,写入到磁盘的缓存中,然后再从磁盘缓存中读取,一次性写入到硬盘当中。
 
/dev/在内存当中,和缓存一样,读取速度都非常快,因此两种方式最终的读取速度对最终的写入速度无任何影响。
 换种说法,就是此处不管有没有的硬盘缓存,对IO都不产生任何影响。
 
那也就是说,两种方式的主要差异就在于多步与一步。
 
为什么写入速度会有如此大的差异?
 看完这个比喻,你就会明白了:
 现在有两辆一模一样的车,最高行驶速度为20 M/s,加速度为5 M/s^2,分别为甲车,乙车,他们都要走直线的,1000 M的路程。
 甲车每次只能走四米,达到四米就得刹车,乙车可以一次性走完一千米。
 相信大家也清楚,甲车还没加速到最高速度,就得刹车,走完这一千米需要不少时间。
 而乙车,可以一直加速到其所能达到的最大速率,走完这一千米,花的时间明显比甲少。
 
因此可以推断,使用dsync,以1 Gbytes为blocksize,次数为一的方式往硬盘中写入1 Gbytes的数据,结果将不会与dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 conv=fdatasync有太大的差距。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值