o_sync如何触发pdflush?

o_sync如何触发pdflush?

当我使用 写入时o_sync,一旦数据写入磁盘,写入调用就会返回。但是如何o_sync强制Linux将数据写入磁盘呢?

通常情况下,最坏情况下您最多需要等待dirty_expire_centisecs +dirty_writeback_centisecs(30 秒 + 5 秒)才能pdflush将数据写入磁盘。

是否将数据o_sync设置dirty_expire_centisecs得较低或发生其他情况(手动调用刷新)?

请提供您的答案的来源。我找不到关于这个主题的任何内容。

答案1

正如 Sankalp 提到的,pdflush 线程不涉及设置 O_SYNC 标志的文件的写入。它发生在线程上下文中。要获取内核所采用的确切代码路径,您可以使用 ftrace 来跟踪 write 系统调用。我能够测试相同的内容并记录下来这里在我的博客上

答案2

在 pdflush 线程的上下文中没有必要进行刷新。在 O_SYNC 和 fsync 调用的情况下,刷新发生在调用 write/sync 系统调用的线程上下文中。 o_sync 情况下的代码路径大致如下:

__vfs_write -> (f_op->write_iter)/generic_file_write_iter -> generic_write_sync -> (f_op->fsync) -> filemap_write_and_wait_range -> do_writepages -> write_cache_pages -> (f_op->writepage)

相关内容