差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
linux:kernel:cgroup:memory.txt翻訳 [2013/08/21 08:48] – [メモリコントローラの利点と目的] tenforward | linux:kernel:cgroup:memory.txt翻訳 [2013/08/21 15:43] (現在) – [11. メモリプレッシャー] tenforward | ||
---|---|---|---|
行 1: | 行 1: | ||
<color red> | <color red> | ||
+ | |||
+ | 多分,3.10 ベース. | ||
====== メモリリソースコントローラ ====== | ====== メモリリソースコントローラ ====== | ||
行 502: | 行 504: | ||
* under_oom 0 or 1 (1 の時,メモリ cgroup は OOM 状態にあり,タスクは停止している可能性がある) | * under_oom 0 or 1 (1 の時,メモリ cgroup は OOM 状態にあり,タスクは停止している可能性がある) | ||
- | ===== 11. TODO ===== | + | ===== 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 ページのアカウンティングサポート (分離したコントローラとして) | - huge ページのアカウンティングサポート (分離したコントローラとして) |