o_syncはどのようにpdflushをトリガしますか?

o_syncはどのようにpdflushをトリガしますか?

write を使用すると、o_syncデータがディスクに書き込まれると書き込み呼び出しが返されます。しかし、o_syncLinuxにディスクにデータを書き込むようにするにはどうすればよいですか?

通常、最悪の場合、データがディスクに書き込まれるdirty_expire_centisecs +dirty_writeback_centisecs前に最大(30秒+ 5秒)待つ必要があります。pdflush

データo_syncセットがdirty_expire_centisecs低いですか?それとも別のことが起こりますか(更新は手動で呼び出されます)?

回答のソースを提供してください。このトピックについては何も見つかりません。

答え1

Sankalpが述べたように、pdflushスレッドはO_SYNCフラグが設定されたファイルの作成には関与しません。スレッドコンテキストで発生します。カーネルが使用する正確なコードパスを取得するには、ftraceを使用して書き込みシステム呼び出しを追跡できます。私は同じようにテストして記録することができましたここ私のブログに

答え2

pdflush スレッドのコンテキストではフラッシュする必要はありません。 O_SYNCおよびfsync呼び出しの場合、書き込み/同期システム呼び出しを呼び出したスレッドのコンテキストでフラッシュが発生します。 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

関連情報