Googleを見て、スコアのproc/<pid>/oom_score
計算方法を説明するものが見つかりませんでした。使用される合計メモリを使用するのではなく、このスコアを使用するのはなぜですか?
Googleを見て、スコアのproc/<pid>/oom_score
計算方法を説明するものが見つかりませんでした。使用される合計メモリを使用するのではなく、このスコアを使用するのはなぜですか?
回答:
当時の実装についてはGoldwyn Rodriguesの2009年の記事、現在の振る舞いだと思うJonathan Corbetの2010年の記事、および将来の変更に関するアイデアについてはJonathan Corbetの2013年の記事を参照してください。
2010年の記事から:
Davidのパッチセットでは、古いbadness()ヒューリスティックはほぼ完全になくなりました。代わりに、計算は、使用可能なメモリの何パーセントがプロセスによって使用されているかという単純な質問に変わります。システム全体がメモリ不足の場合、「使用可能なメモリ」は、システムで使用可能なすべてのRAMとスワップスペースの合計です。代わりに、OOM状況が特定のcpuset /コントロールグループに許可されたメモリを使い果たすことによって引き起こされる場合、「使用可能なメモリ」はそのコントロールグループに割り当てられた合計量です。メモリポリシーによって課せられた制限を超えた場合、同様の計算が行われます。いずれの場合も、プロセスのメモリ使用量は、常駐セット(使用しているRAMページの数)とスワップ使用量の合計と見なされます。
この計算では、結果として10倍の数値が生成されます。使用可能なメモリのすべてのバイトを使用しているプロセスは1000のスコアを持ち、メモリをまったく使用していないプロセスは0のスコアを取得します。このスコアに対するヒューリスティックな調整はほとんどありませんが、コードはまだ、ユーザー所有プロセスよりもわずかに価値があるという概念で、ルート所有プロセスのスコアから少量(30)を差し引きます。
適用されるもう1つの調整は、各プロセスのoom_score_adj変数に格納されている値を追加することです。これは、/ procを介して調整できます。このノブを使用すると、ユーザー空間のOOMキラーに対する各プロセスの魅力を調整できます。-1000に設定すると、OOMキルが完全に無効になりますが、+ 1000に設定すると、関連するプロセスに大きなターゲットをペイントすることに相当します。