1

我知道即使正在写入的文件已打开O_DIRECT并且文件的元数据已更改,XFS 也不会同步元数据。但是对于 ext4,我注意到 MySQL 支持O_DIRECT_NO_FSYNC,这意味着 MySQL 不会调用fsync()并让文件系统自行同步元数据。

所以问题来了:如果我在 ext4 中open有一个文件O_DIRECT(比如 linux 内核版本 5.8.0),然后调用fsync()after write(),会fsync()做什么?

要遵循的另一个问题:fsync()如果open()文件包含O_DIRECT | O_SYNC在 ext4 中会怎样?

谢谢!

4

1 回答 1

1

O_DIRECT并不暗示磁盘自身的易失性缓存。在 Linuxfsync()上,也可以请求将该缓存中的数据写回。

至于你fsync()什么时候文件已经在使用O_DIRECT|O_SYNC......会有开销,因为你做了一个系统调用,必须检查页面缓存并且将发送磁盘缓存刷新 - 他们只是没有任何工作要做这是一种浪费。我猜你最终可能会根据文件系统刷新日志和/或另一个文件的数据。

于 2021-02-08T20:31:24.737 回答