この節では、fsflush とそれに関連するチューニング可能パラメータについて説明します。
システムデーモン fsflush は定期的に実行され、主に次の 3 つのことを行います。
fsflush は、呼び出されるたびに次のことを行います。
一定の時間を経過したダーティーなファイルシステムページをディスクにフラッシュします。
メモリーの一部を調べ、変更されているページをそれぞれのバッキングストアに書き込みます。ページは、変更されており、かつ次の条件のどれにも該当しない場合に書き込まれます。
カーネルページである
空いている
ロックされている
スワップデバイスに関連付けられている
現在入出力操作に使用されている
この結果、書き込み権に基づいて mmap され、かつ実際に変更されているファイルのページがフラッシュされます。
ページはバッキングストアにフラッシュされますが、それを使用しているプロセスとの接続は保たれます。フラッシュしておくと、システムのメモリーが不足したときのページの再利用が簡単になります。これは、フラッシュ後にそのページが変更されていなければ、ページを回収する前にそのページをバッキングストアに書き出す必要がなくなり、遅延を避けられるからです。
ファイルシステムのメタデータをディスクに書き込みます。この書き込みは n 回目の呼び出しごとに行われます。n はさまざまな構成変数から計算されます。詳細は、tune_t_fsflushrと autoupを参照してください。
呼び出しをどのような頻度で行うかや、メモリー走査を実行するかどうか、ファイルシステムデータのフラッシュを行うかどうか、そしてそのフラッシュをどのような頻度で行うかは、構成可能です。
ほとんどのシステムでは、fsflush によって、メモリーの走査と、ファイルシステムメタデータの同期化を行うのが一般的です。システムの使用状況によっては、メモリーの走査はほとんど意味がなかったり、CPU 時間を使用しすぎることがあります。
符号付き整数
5
1 から MAXINT
秒
いいえ
値がゼロ以下の場合は、値は 5 に再設定され、警告メッセージが出力されます。このチェックが行われるのはブート時だけです。
下記の autoup を参照してください。
変更の可能性あり
個々の呼び出しでダーティーページに関して検査するメモリー量と、ファイルシステム同期操作の頻度を、tune_t_flushr とともに制御します。
さらに、autoup の値は、空リストからバッファを書き出すかどうかの制御にも使用されます。B_DELWRI フラグが付いているバッファ (変更されているファイルコンテンツページ) は、空リストに置かれている時間が autoup 秒を超えると書き出されます。autoup の値を増やすと、バッファがメモリーに置かれている時間が長くなります。
符号付き整数
30
1 から MAXINT
秒
いいえ
autoup がゼロ以下の場合は、30 に再設定され、警告メッセージが出力されます。このチェックが行われるのはブート時だけです。
autoup は tune_t_fsflushr の整数倍でなければなりません。最小でも autoup は tune_t_fsflushr の 6 倍以上でなければなりません。そうでないと、fsflush が呼び出されるたびに余計なメモリーが走査されます。
dopageflush がゼロでない場合にメモリーをチェックするためには、(全体のシステムページ数 × tune_t_fsflushr) が autoup 以上でなければなりません。
autoup や tune_t_fsflushr の変更が必要になる状況はいくつかあります。
大きなメモリーをもつシステム — この場合には、autoup を増やすと、fsflush の個々の呼び出しで走査されるメモリー量が少なくなります。
メモリーの要求量が最小限のシステム — autoup と tune_t_fsflushr を両方とも増やすと、走査の回数が減ります。autoup 対 tune_t_fsflushr の現在の比率を維持するには autoup も増やす必要があります。
一時ファイルの数が多いシステム (メールサーバーやソフトウェアビルドマシンなど) — 多数のファイルが作成されて削除された時、fsflush によって、これらのファイルのデータページがディスクに不必要に書き込まれるおそれがあります。
変更の可能性あり
fsflush の呼び出しで、変更されたページをメモリーから探すかどうかを制御します。fsflush の個々の呼び出しでは、システムのメモリーページ数が調べられます (動的再構成の操作によりメモリーページの数が変わっていることがある)。個々の呼び出しでは、(全体のページ数 × tune_t_fsflushr) / autoup ページが走査されます。
符号付き整数
1 (有効)
0 (無効)、1 (有効)
切り替え (オン/オフ)
はい
なし
システムページスキャナの実行がまれな場合 (vmstat 出力の sr 欄に値 0 が示される)。
変更の可能性あり
fsflush 呼び出しでファイルシステムメタデータの同期化を行うかどうかを制御します。同期化は、fsflush の N 回目の呼び出しごとに行われます。ここで N は (autoup / tune_t_fsflushr) です。これは整数の割り算であるため、tune_t_fsflushr が autoup より大きいと、コードが反復カウンタが N 以上であるかどうかをチェックするので、同期化は fsflush が呼び出されるたびに行われます。N は fsflush を実行するときに 1 度だけ計算されることに注意してください。その後で tune_t_fsflushr や autoup を変更しても、同期化操作の頻度に影響はありません。
符号付き整数
1 (有効)
0 (無効)、1 (有効)
切り替え (オン/オフ)
はい
なし
一定期間にファイルが頻繁に変更されるため、フラッシュによる負荷がシステムの動作に悪影響を与える場合。システムがリブートされる際に消えたり状態の一貫性がどうなっても構わないファイルは、TMPFS ファイルシステム (/tmp など) に置いた方がいいでしょう。Solaris 7 や Solaris 8 リリースが動作しているシステムでは、mount の -noatime オプションを使用することによって、i ノードトラフィックを減らすことができます。このオプションを使うと、ファイルがアクセスされた時に i ノードの更新が行われません。
リアルタイム処理を行うシステムでは、このオプションを無効にし、アプリケーションによってファイルの同期化を明示的に行い、一貫性を保つことを望むこともあるでしょう。
変更の可能性あり