O_DIRECT究竟意味着什么?

时间:2016-12-21 07:49:37

标签: linux file

如果我打开一个带有O_DIRECT标志的文件,是否意味着每当对该文件的写入(阻塞模式)返回时,数据都在磁盘上?

1 个答案:

答案 0 :(得分:0)

(这个答案与Linux有关 - 其​​他操作系统可能有不同的警告)

让我们从子问题开始:

  

如果我打开一个带有O_DIRECT标志的文件,是否意味着每当对该文件的写入(阻塞模式)返回时,数据都在磁盘上?

(如@michael-foukarakis commented) - 如果您需要保证您的数据是非易失性存储,则必须使用/添加其他内容。正如您所提到的那样,“保证数据”(而非元数据)可能正在寻找ArrayList<Integer> arr / O_DSYNC?如果您想保证元数据也是如此,则必须查看fdatasync() / O_SYNC

  

O_DIRECT究竟意味着什么?

提示您希望I / O绕过 Linux内核的缓存。实际发生的事情取决于:

  • 磁盘配置
  • 使用的文件系统及其配置
  • 您是否正确对齐了I / O
  • 文件系统是否必须进行新的块分配以满足您的I / O
  • Linux内核版本
  • ...

上面的列表并非详尽无遗。

看起来你的建议可能会在某些情况下发生,但改变一些事情(例如使用Ext4文件系统而不是XFS)会削弱所做的事情。在调用返回后,使用裸fsync()脏写入数据仍然可以在缓存(例如磁盘的易失性缓存或甚至Linux内核页缓存)中滚动。

参考