Linux Kernel(2.6)の実装に関するメモ書き

pdflush


Rev.4を表示中。最新版はこちら

1. 概要

pdflushはページキャッシュ(ディスクキャッシュ)上のDirtyページをディスクへ書き戻す(WriteBack)のに使われるカーネルスレッド。

2. 構造

pdflushの構造は図1のようになっている。

図1 pdflushの構造

3. 解説

3.1 pdflush

pdflushの処理のメインは__pdflush()。__pdflush()では、pdflush_operation()によりジョブが投入されてWakeupされると、自分のジョブ管理用構造体struct pdflush_workから登録されているジョブの処理ルーチン(.fn)を呼び出して、WriteBack処理を行う。処理が終わるとまたSleepする。

pdflushカーネルスレッドはシステム内に複数個存在する。スレッド数はWriteBackの処理量に応じてMIN_PDFLUSH_THREADS(2)〜MAX_PDFLUSH_THREADS(8)の間で自動で調整される。このスレッド数の調整も__pdflush()で行われている。

各pdflushは自分のWriteBackジョブを管理するためにstruct pdflush_workを1つ持っている(my_workポインタの先)。Sleepしているpdflushのpdflush_workはpdflush_listにチェーンされている。

3.2 pdflushのWakeup

pdflushへのジョブの投入はpdflush_operation()で行う。pdflush_operation()はpdflushに処理させたいルーチンの関数ポインタ(fn)、ルーチンへの引数(arg0)を引数にとる。

pdflush_operation()はpdflush_listから空いている(Sleepしている)pdflushを取得して、そのpdflushカーネルスレッドをWakeupする。Wakeupの際、選んだpdflush_workをpdflush_listから取り外してfn,arg0に引数で指定されたものを登録しておく。

Wakeupされたpdflushは自分のmy_work(pdflush_work)から関数ポインタを取得して、指定されたWriteBack処理を実行する。


最終更新 2007/05/31 12:21:54 - kztomita
(2007/05/31 11:58:44 作成)
添付ファイル
pdflush.png - kztomita


リンク
最近更新したページ
検索