/proc/sys/vm/lower_zone_protection に値を設定することにより、HIGHMEMゾーンから割り当てることが可能なページ割り当て要求に対しては、DMAゾーンやNORMALゾーンのページをその要求から保護し、空きページがキャッシュ等に占有されることを防ぐことができます。
lower_zone_protectionには、整数値の係数を設定します。(デフォルトは0)
NORMALゾーンの場合、HIGHMEMゾーンから割り当て可能なページ要求に対して、以下の計算式によって計算される空きメモリを維持しようとします。
"HIGHMEMゾーンのlow値" * "lower_zone_protectionに設定した値"
例えば、HIGHMEMゾーンのメモリ管理の閾値が "min: 512KB、low: 1024KB、high: 1536KB" となっている場合、lower_zone_protectionに100を設定すると、"100 * 1024KB = 100MB" となり、100MBの空きメモリをNORMALゾーンで維持しようとします。
OOM Killerは、システムの空きメモリが確保対象ゾーンの閾値(min)の合計よりも少ないときに実行されるため、特に枯渇しやすいNORMALゾーンのページの占有を防ぐことで、OOM Killerの実行条件が成立しにくくなります。
ただしシステムの状況によっては、lower_zone_protectionに値を設定しても空きメモリがそれを下回り、OOM Killerが発生する場合があります。