Linux
o_sync 如何觸發 pdflush?
當我寫 using
o_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)