write を使用すると、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を使用して書き込みシステム呼び出しを追跡できます。私は同じようにテストして記録することができましたここ私のブログに
答え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