根据OPEN(2)手册页,在linux(高于2.6)上,O_DIRECT是同步的,但可能存在性能问题;在FreeBSD上,O_DIRECT不保证同步,也可能有问题.
因此,在linux上,O_DIRECT或O_SYNC保证同步写入,但哪一个具有更好的性能?
在FreeBSD上,为保证同步写入,哪个选项具有最佳性能:(1)O_DIRECT fsync()(2)O_DIRECT | O_SYNC或(3)O_SYNC单独?
解决方法 对于当前的硬盘,即使磁盘将写入报告为完整的 *** 作系统,也无法保证文件实际写入磁盘!这是由于驱动器中的内置缓存.在freeBSD上,你可以通过将kern.cam.ada.write_cache sysctl设置为0来禁用它.这将显着降低写入性能.上次我测量它(ICH-7芯片组上的WDC WD5001ABYS-01YNA0硬盘,FreeBSD 8.1 AMD64),连续写入性能(用dd if = / dev / zero = / tmp / foo bs = 10M count = 1000测量)下降从75,000,000字节/秒到12,900,000字节/秒.
如果你想绝对确定你的文件是写的;
>使用sysctl kern.cam.ada.write_cache = 0禁用写入缓存,然后执行camcontrol reset< bus>:< target>:< lun>.
>使用O_SYNC选项打开文件.
注意:
>你的写入性能(在硬盘上)现在绝对会很糟糕.>不要使用sync选项挂载分区;这将导致所有I / O(包括读取)同步完成.>不要使用O_DIRECT.它会尝试完全绕过缓存.这可能也会影响读取.
总结以上是内存溢出为你收集整理的Linux / FreeBSD上的O_DIRECT与O_SYNC全部内容,希望文章能够帮你解决Linux / FreeBSD上的O_DIRECT与O_SYNC所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)