oom_score_adjとoom_adj
1秒要約
新:oom_score_adj
古:oom_adj
Andorid内部のlowmemorykillerドライバは古いまま
かつてLinuxにはoom_score_adjというものは存在しておらず、同じような役割でoom_adjというものが使われていた
そして、Androidはこのoom_adjが導入された時に、Low Memory Killerをoom_adjを使った通常のカーネルの仕組みに
なるように変更しました。しかし、このoom_adjはいろいろと実装に依存した妙な制限があったりしてわかりにくかったため、Linux側ではもっとシンプルでわかりやすいoom_score_adjというものが導入され、今ではこれを使うことになっています。
oom_adjはoom_score_adjとは値の範囲が違い、また全部で6スロットのみしか違う値を設定できないなど数値の意味が多少違いますが、結局oom_scoreを計算されるために使われる補助的な数値であることには変わりありません。
Androidのlowmemorykillerドライバは外部から設定する値に関しては、いまだに古いoom_adjの値を使ったままになっていて更新ができていません。そこで、外部から設定されるoom_adj相当のスコアを内部でoom_score_adjに変換して使っています。
現在の挙動を説明しようとすると「oom_score_adjをoom_adjに換算した結果が...」などややこしい言い回しになっていまうのは、このような事情のため