linux跳过文件系统自检,linux-O_DIRECT是否绕过文件系统日志记录?

open(2)的手册页仅表明O_DIRECT绕过了页面缓存,但是网上的许多描述都将其描述为导致用户缓冲区直接DMA到驱动器.如果是这种情况,我想它也会绕过文件系统(例如xfs,ext4等)完成的日志记录.是这样吗

我找不到有人声称一种方法或另一种方法.在我看来,这与数据库使用的O_DIRECT是一致的-O_DIRECT的常见示例是当数据库之类的应用程序在用户空间中进行自己的缓存时,并且我可以想象数据库在做自己的事务日志.

解决方法:

Does O_DIRECT bypass filesystem journaling?

通常是这样.但是,文件数据通常通常不会进入文件系统的日志中.以下是更多详细信息(但请注意,此答案并未尝试说明CoW文件系统):

大多数Linux日记文件系统(当日记设置为回写或有序(默认)时为Ext4,XFS,JFS等)不记录文件内的数据-它们记录文件系统数据结构(元数据)的一致性.

文件系统仅记录元数据(典型情况):文件中的数据无论如何都不会进入日志,因此使用O_DIRECT不会更改此记录,并且数据也不会继续进入日志.但是,O_DIRECT操作仍然可以像正常情况一样触发元数据更新,但是启动操作可以在元数据更新之前返回.有关详细信息,请参见Ext4 wiki Clarifying Direct IO’s Semantics page.

在journal = data模式下的Ext4:这比较棘手-有一个警告,在journal = data模式下使用O_DIRECT的预期结果可能不是预期的结果.从“data=journal” section of ext4.txt:

Enabling this mode [journal=data] will disable delayed allocation and O_DIRECT support.

在这种情况下,O_DIRECT只是一个提示,而文件系统则默默地退回到将数据填充到页面缓存中(使其不再直接!).因此,在这种情况下,是的,数据最终将进入日志,并且不会绕过日志.请参阅“ Re: [PATCH 1/1 linux-next] ext4: add compatibility flag check”主题,以了解Ted Ts’o阐明的内容.周围有一些修补程序(“ ext4: refuse O_DIRECT opens for mode where DIO doesn’t work”)使文件系统在打开时返回错误,但是从我看来,这些修补程序被主线内核拒绝了.

标签:dma,file,io,linux

来源: https://codeday.me/bug/20191119/2036678.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值