バッファとディスクブロックの同期

遅延書き込み指定のDirtyなバッファは、デーモンまたは明示的にsyncを行われることにより、同期がとられる。

kflushデーモンはlinuxカーネル起動時にカーネルスレッドとして実行を開始し、必要に応じてbdflush関数を実行している。kflushデーモンは以下の場合に起動される。

  • 遅延書き込み(Dirtyな)バッファが一定水準を越えた時(デフォルト設定では 全バッファに占める割合が40%を越えた時)
  • 空きバッファの確保に失敗したとき
  • 空きメモリが不足した時一度kflushデーモンが起動されるとbdflush関数はある水準以下になるまで、次々と遅延書き込み(Dirtyな)バッファをディスクに書き込んで行く。bdflush関数はDirtyなバッファの一部のみのしか書き込まないことに注意しなければならない。

kupdateデーモンもlinuxカーネル起動時にカーネルスレッド*1として実行を開始し、必要に応じてkupdate関数を実行している。kupdateデーモンはデフォルト設定では5秒毎に動作する。kupdateデーモンはkflushデーモンと異なり、Dirtyな状態のまま一定時間以上過ぎてしまったバッファのみを書き込み対象としている)。またsync対象はバッファだけでなく後述するinode域やスーパブロック域も対象である。標準コンフィギュレーションでは30秒以上たったDirtyなバッファのみが対象となる。(メタデータの載ったバッファは5秒)

syncシステムコールはDirtyなバッファ全てをディスクに書き込む。後述するinode域やスーパブロック域も対象である。

kflushがみる水準値および bdflushシステムコールが参照するコンフィギュレーション値は、bdflushシステムコールにより変更可能である。マニュアルを参照のこと。


(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST
1


  1. *1v2.2の古い版までは、ユーザプロセスkflushデーモンは、 ユーザプロセスとbdflushシステムコールで実現されていた