差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| linux:kernel:cgroup:memory.txt翻訳 [2013/04/03 08:10] – [8.3. TODO] tenforward | linux:kernel:cgroup:memory.txt翻訳 [2013/08/21 15:43] (現在) – [11. メモリプレッシャー] tenforward | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | <color red> | + | <color red> |
| + | |||
| + | 多分,3.10 ベース. | ||
| ====== メモリリソースコントローラ ====== | ====== メモリリソースコントローラ ====== | ||
| 行 36: | 行 38: | ||
| * タスクを移動することによりカウントの移動 (再カウント) が選択可能 | * タスクを移動することによりカウントの移動 (再カウント) が選択可能 | ||
| * 使用量のしきい値の通知 | * 使用量のしきい値の通知 | ||
| + | * メモリプレッシャーの通知 | ||
| * oom-killer が knob と oom-notifier を無効にすること | * oom-killer が knob と oom-notifier を無効にすること | ||
| * root cgroup には制限のコントロールがない | * root cgroup には制限のコントロールがない | ||
| 行 61: | 行 64: | ||
| | | ||
| | | ||
| + | | ||
| | | ||
| (See sysctl' | (See sysctl' | ||
| 行 499: | 行 503: | ||
| * oom_kill_disable 0 or 1 (1 の時,oom-killer は無効化されている) | * oom_kill_disable 0 or 1 (1 の時,oom-killer は無効化されている) | ||
| * under_oom 0 or 1 (1 の時,メモリ cgroup は OOM 状態にあり,タスクは停止している可能性がある) | * under_oom 0 or 1 (1 の時,メモリ cgroup は OOM 状態にあり,タスクは停止している可能性がある) | ||
| + | |||
| + | ===== 11. メモリプレッシャー ===== | ||
| + | |||
| + | プレッシャーレベルの通知はメモリアロケーションのコストをモニタリングするのに使う事ができる.これはプレッシャーをもとにしており,アプリケーションは自身のメモリリソースに様々な管理戦略を実装することが可能になる.プレッシャーレベルは以下のように定義される. | ||
| + | |||
| + | " | ||
| + | |||
| + | " | ||
| + | |||
| + | " | ||
| + | |||
| + | イベントは,処理されるまで上流に伝搬する.すなわちイベントは貫通はしないということである.これがどういうことかを以下にしめす.例えば,3 つの cgroup A-> | ||
| + | |||
| + | memory.pressure_level ファイルは eventfd を設定するためだけに使われる.通知を登録するために,アプリケーションは | ||
| + | |||
| + | - eventfd(2) を使って eventfd を作成する | ||
| + | - memory.pressure_level を open する | ||
| + | - "< | ||
| + | |||
| + | アプリケーションは,メモリプレッシャーが指定したレベル (か高いレベル) に達した時,eventfd を通して通知を受け取る.memory.pressure_level に対する read/write 操作は実装されていない. | ||
| + | |||
| + | テスト: | ||
| + | |||
| + | ここに小さなサンプルスクリプトがある.これは新しい cgroup を作成し,メモリリミットを設定し,cgroup に通知を設定し,それから子供の cgroup に対して深刻なプレッシャーを与えるスクリプトである. | ||
| + | |||
| + | < | ||
| + | # cd / | ||
| + | # mkdir foo | ||
| + | # cd foo | ||
| + | # cgroup_event_listener memory.pressure_level low & | ||
| + | # echo 8000000 > memory.limit_in_bytes | ||
| + | # echo 8000000 > memory.memsw.limit_in_bytes | ||
| + | # echo $$ > tasks | ||
| + | # dd if=/ | ||
| + | </ | ||
| + | |||
| + | (多数の通知が予測され,最終的には oom-killer が発動するだろう) | ||
| + | |||
| + | |||
| + | ===== 12. TODO ===== | ||
| + | |||
| + | - huge ページのアカウンティングサポート (分離したコントローラとして) | ||
| + | - cgroup ごとのスキャナーが最初に共有されていないページを回収するようにする | ||
| + | - コントローラに共有ページに対するアカウントを教える | ||
| + | - 制限には達していないが,使用量が制限に近づいている時に,バックグラウンドで回収を開始する | ||
| + | |||
| + | ===== Summary ===== | ||
| + | |||
| + | 全体的に,メモリコントローラは stable なコントローラであり,コミュニティ内で広く議論とコメントがなされてきた | ||
| + | |||
| + | ===== References ===== | ||
| + | |||
| + | - Singh, Balbir. RFC: Memory Controller, http:// | ||
| + | - Singh, Balbir. Memory Controller (RSS Control), \\ http:// | ||
| + | - Emelianov, Pavel. Resource controllers based on process cgroups http:// | ||
| + | - Emelianov, Pavel. RSS controller based on process cgroups (v2) http:// | ||
| + | - Emelianov, Pavel. RSS controller based on process cgroups (v3) http:// | ||
| + | - Menage, Paul. Control Groups v10, http:// | ||
| + | - Vaidyanathan, | ||
| + | - Singh, Balbir. RSS controller v2 test results (lmbench), http:// | ||
| + | - Singh, Balbir. RSS controller v2 AIM9 results http:// | ||
| + | - Singh, Balbir. Memory controller v6 test results, http:// | ||
| + | - Singh, Balbir. Memory controller introduction (v6), http:// | ||
| + | - Corbet, Jonathan, Controlling memory use in cgroups, http:// | ||