【发布时间】:2013-10-18 01:20:43
【问题描述】:
我正在编写一个在 Linux 和 FreeBSD 上运行的程序,并且我想确保当每个 write() 返回时,数据实际写入物理设备上的文件,这样我的数据就不会意外丢失(例如,断电、进程意外中断等)。
根据 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 单独?
【问题讨论】:
-
我认为你根本无法比较这些,因为它们是根本不同的东西(即使它们似乎做类似的事情)。