LinuCレベル3 プラットフォームスペシャリスト プラットフォームの最適化 問15
プラットフォームの最適化/カーネルパラメータによるリソース最適化カーネルパラメータvm.min_free_kbytesの役割として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「プラットフォームの最適化」に対応。実際の試験問題ではありません)
- A仮想マシンに割り当て可能な物理メモリの最小値をキロバイト単位で設定し、この値を下回る割り当て要求をカーネルが拒否する
- Bプロセスが要求できる最小スタックサイズをキロバイト単位で設定し、OOMキラーがこの値を下回る消費量のプロセスを優先的に終了させる
- Cスワップへの書き出しを開始するページキャッシュのサイズをキロバイトで指定し、空きメモリがこの値を下回るとkswapd がスワップアウトを開始する
- Dカーネルが常に確保しようとする空きメモリの最低量をキロバイト単位で設定し、この値を下回るとカーネルが積極的にページ回収を行う
正解:D
解説
vm.min_free_kbytes は、カーネルがゾーンの空きメモリとして維持しようとする最低量(キロバイト単位)を設定します。この値からカーネルはゾーンごとの low/min ウォーターマークを計算し、空きメモリがこれらを下回ると kswapd がページの回収(ページキャッシュの解放やダーティページの書き出し)を開始します。割り込みハンドラや緊急のメモリ確保のために最低限の空きを保証するために使います。値を小さくしすぎると実メモリ確保に失敗するリスクが増し、大きくしすぎると使えるメモリが減ります。
選択肢ごとの解説
- A誤り。vm.min_free_kbytes は仮想マシンへの割り当て制限ではなく、ホストカーネル自身が維持しようとする最低空きメモリ量です。
- B誤り。プロセスのスタックサイズは ulimit で制御し、OOM キラーの対象優先度は /proc/<PID>/oom_score_adj で調整します。vm.min_free_kbytes とは無関係です。
- C誤り。スワップへの書き出し傾向は vm.swappiness で調整します。vm.min_free_kbytes はスワップ開始の直接的な閾値ではなく、ゾーンのウォーターマーク計算に使われるパラメータです。
- D正しい。vm.min_free_kbytes はカーネルが維持しようとする最低空きメモリ量で、この値から low/min ウォーターマークが計算され、下回ると積極的なページ回収が行われます。