全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworksBGVM服务器主机交流
IP归属甄别会员请立即修改密码Sharktech防护
查看: 4414|回复: 15

普及一下有关fdatasync与dsync的知识

[复制链接]
发表于 2014-10-10 00:43:48 | 显示全部楼层 |阅读模式
本帖最后由 ★Extreme★ 于 2014-10-10 00:48 编辑

某个人在我的帖子https://www.hostloc.com/thread-256441-1-1.html,说fdatasync无意义,还和我争论了dsync与fdatasync的区别,彻底恶心了我一次,为了减少此类事情的发生次数,因此特意来对这两个做个解释说明。

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

  2. 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有太大的差距。
发表于 2014-10-10 00:46:36 | 显示全部楼层
好帖

买个VPS都要跪着求

点评

买个VPS都要跪着求。。。  发表于 2014-10-10 02:44
发表于 2014-10-10 01:32:52 | 显示全部楼层
我用我VPS跑了一个测试
dd if=/dev/zero of=/tmp/1Gbytes bs=4k count=256000 oflag=dsync 反应高的多
dd if=/dev/zero of=test bs=64k count=4k oflag=dsync 很底,当然母机满载的
发表于 2014-10-10 02:36:38 | 显示全部楼层
往往文件,特别是小文件,或者随机文件的大量读写io场景比较适合你的前一种比喻,这就是为什么有些vps fdatasync测试出来的读写很好,但是一旦真正使用的时候表现并不好。另外fdatasync是最后一次性写入文件。要看磁盘有没有做raid或者是sas还是ssd等磁盘真正读写性能还是dsync这种同步io来测试比较合适。另外,我不是来抬杠的。

点评

你应该弄清楚现在测IO的目的是什么。  发表于 2014-10-10 12:52
发表于 2014-10-10 02:47:16 | 显示全部楼层
有没有人玩这个。。。?

  1. dd if=/dev/zero bs=1M count=1024 | md5sum
复制代码

点评

if=/dev/zero of=/dev/null  发表于 2014-10-10 09:19
蛋疼咩  发表于 2014-10-10 02:49
发表于 2014-10-10 03:54:09 | 显示全部楼层
其实两个参数都有意义,建议dsync 使用 bs=16k 或者 32k 来测试,
4k 太小了
发表于 2014-10-10 08:15:26 | 显示全部楼层
学习以下啦
发表于 2014-10-10 09:58:58 | 显示全部楼层
dd if=/dev/zero of=/tmp/1Gbytes bs=32k count=256000 oflag=dsync

我只有幾百K,好假,全SSD 的raid 0
发表于 2014-10-10 10:27:41 | 显示全部楼层
测试还是用dsync,  毕竟dsync符合一般实际情况,,。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|全球主机交流论坛

GMT+8, 2020-8-5 07:42 , Processed in 0.401562 second(s), 18 queries , MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表