Linux

o_sync 如何觸發 pdflush?

  • November 11, 2015

當我寫 usingo_sync時,一旦數據寫入磁碟, write 呼叫就會返回。但是如何o_sync強制 Linux 將數據寫入磁碟呢?

通常,您最多需要等待dirty_expire_centisecs +dirty_writeback_centisecs(30 秒 + 5 秒)pdflush才能將數據寫入磁碟。

是否o_sync將數據設置得dirty_expire_centisecs較低或是否發生其他事情(手動呼叫刷新)?

請提供您的答案的來源。我找不到有關此主題的任何內容。

正如 Sankalp 提到的,pdflush 執行緒不涉及對設置了 O_SYNC 標誌的文件的寫入。它發生線上程上下文中。要獲取核心採用的確切程式碼路徑,您可以使用 ftrace 來跟踪 write syscall。我可以在我的部落格上測試並記錄在這裡

在 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)

引用自:https://unix.stackexchange.com/questions/242127