Oracle Solaris カーネルのチューンアップ・リファレンスマニュアル

fsflush とそれに関連するパラメータ

この節では、fsflush とそれに関連するチューニング可能パラメータについて説明します。

fsflush

システムデーモン fsflush は定期的に実行され、主に次の 3 つの作業を行います。

  1. fsflush は呼び出されるたびに、一定期間が経過した汚れたファイルシステムページをディスクにフラッシュします。

  2. fsflush は呼び出されるたびに、メモリーの一部分を検証し、変更されたページをバッキングストアに書き出します。ページは、変更されており、かつ次の条件のどれにも該当しない場合に書き込まれます。

    • ページはカーネルページである

    • ページは使用されていない

    • ページがロックされている

    • ページにスワップデバイスが対応づけられている

    • ページが入出力操作に現在関与している

    この結果、書き込み権に基づいて mmap でマッピングされ、かつ実際に変更されているファイルのページがフラッシュされます。

    ページはバッキングストアにフラッシュされますが、それを使用しているプロセスとの接続は保たれます。フラッシュしておくと、システムのメモリーが不足したときのページの再利用が簡単になります。これは、フラッシュ後にそのページが変更されていなければ、ページを回収する前にそのページをバッキングストアに書き出す必要がなくなり、遅延を避けられるからです。

  3. fsflush はファイルシステムのメタデータをディスクに書き込みます。この書き込みは n 回目の呼び出しごとに行われます。n はさまざまな構成変数から計算されます。詳細は、tune_t_fsflushrautoup を参照してください。

次の機能を構成できます。

ほとんどのシステムでは、fsflush によって、メモリーの走査と、ファイルシステムメタデータの同期化を行うのが一般的です。システムの使用状況によっては、メモリーの走査はほとんど意味がなかったり、CPU 時間を使用しすぎることがあります。

tune_t_fsflushr

備考欄

fsflush の呼び出し間隔を秒数で指定します。

データ型

符号付き整数

デフォルト

1

範囲

1 から MAXINT

単位

動的か

いいえ

検査

値がゼロ以下の場合、値は 1 にリセットされ、警告メッセージが出力されます。この確認が行われるのはブート時だけです。

どのような場合に変更するか

autoup パラメータを参照してください。

コミットレベル

変更の可能性あり

autoup

備考欄

個々の呼び出しでダーティーページに関して検査するメモリー量と、ファイルシステム同期操作の頻度を、tune_t_flushr とともに制御します。

さらに、autoup の値は、空リストからバッファーを書き出すかどうかの制御にも使用されます。B_DELWRI フラグが付いているバッファー (変更されているファイルコンテンツページを示す) は、空リストに置かれている時間が autoup 秒を超えると書き出されます。autoup の値を増やすと、バッファーがメモリーに置かれている時間が長くなります。

データ型

符号付き整数

デフォルト

30

範囲

1 から MAXINT

単位

動的か

いいえ

検査

autoup がゼロ以下の場合は、30 に再設定され、警告メッセージが出力されます。この確認が行われるのはブート時だけです。

暗黙的制約

autouptune_t_fsflushr の整数倍でなければなりません。最小でも autouptune_t_fsflushr 値の 6 倍以上でなければなりません。そうでないと、fsflush が呼び出されるたびに余計なメモリーが走査されます。

dopageflush がゼロでない場合にメモリーを検査するには、全体のシステムページ数に tune_t_fsflushr を掛け合わせた値が autoup 以上でなければなりません。

どのような場合に変更するか

autoup または tune_t_fsflushr (あるいはその両方) の変更が必要になる状況はいくつかあります。

  • 大きなメモリーをもつシステム – この場合には、autoup を増やすと、fsflush の個々の呼び出しで走査されるメモリー量が少なくなります。

  • メモリーの要求量が最小限のシステム – autouptune_t_fsflushr を両方とも増やすと、走査の回数が減ります。autouptune_t_fsflushr の現在の比率を維持するには autoup も増やす必要があります。

  • 一時ファイルの数が多いシステム (メールサーバーやソフトウェアビルドマシンなど) – 多数のファイルが作成されて削除された時、fsflush によって、これらのファイルのデータページがディスクに不必要に書き込まれるおそれがあります。

コミットレベル

変更の可能性あり

dopageflush

備考欄

fsflush の呼び出し時に、変更されたページの有無についてメモリーを検証するかどうかを制御します。fsflush を呼び出すたびに、システムの物理メモリーページ数が判別されます。この値は動的再構成動作によって変更されている可能性があります。呼び出しのたびに、次のアルゴリズムを使用して走査が実行されます。 ページ総数 x tune_t_fsflushr / autoup ページ

データ型

符号付き整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

どのような場合に変更するか

システムページスキャナの実行がまれな場合 (vmstat 出力の sr 欄に値 0 が示される)。

コミットレベル

変更の可能性あり

変更履歴

詳細は、dopageflush (Solaris 10 リリース)」を参照してください。

doiflush

備考欄

fsflush 呼び出しでファイルシステムメタデータの同期化を行うかどうかを制御します。同期化は、fsflushN 回目の呼び出しごとに行われます。ここで N(autoup / tune_t_fsflushr) です。このアルゴリズムは整数の割り算であるため、tune_t_fsflushrautoup より大きいと、反復カウンタが N 以上であるかどうかをコードがチェックするので、同期化は fsflush が呼び出されるたびに行われます。Nfsflush を実行するときに 1 度だけ計算されることに注意してください。その後で tune_t_fsflushrautoup を変更しても、同期化操作の頻度に影響はありません。

データ型

符号付き整数

デフォルト

1 (有効)

範囲

0 (無効)、1 (有効)

単位

切り替え (オン/オフ)

動的か

はい

検査

なし

どのような場合に変更するか

一定期間にファイルが頻繁に変更されるため、フラッシュによる負荷がシステムの動作に悪影響を与える場合。

システムがリブートされる際に消えたり状態の一貫性がどうなっても構わないファイルは、 TMPFS ファイルシステム (/tmp など) に置いた方がいいでしょう。Solaris 7 以降、mount-noatime オプションを使用することによって、システム上のi ノードトラフィックを減らすことができます。このオプションを使うと、ファイルがアクセスされた時に i ノードの更新が行われません。

リアルタイム処理を行うシステムでは、このオプションを無効にし、アプリケーションによってファイルの同期化を明示的に行い、一貫性を保つことを望むこともあるでしょう。

コミットレベル

変更の可能性あり