組み込みシステム、スワップなし、カーネル v2.6.36、メモリ圧縮が有効。
使用率が高いと、すべての RAM がキャッシュに拘束されます。キャッシュは約 70M のメモリを使用していました。ユーザー空間プロセスがメモリを割り当てるとき、問題はありません。キャッシュはそれを放棄します。
しかし、物理的な 5 番目のページを割り当てようとしているように見えるサードパーティのデバイス ドライバーがあり、OOM で失敗します。buddyinfo をざっと見てみると、これが確認できます... 5 番目の注文ページはありません。しかし、キャッシュを削除するとすぐに、十分な量が利用可能になり、デバイス ドライバーは OOM ではなくなります。
したがって、仮想メモリの割り当てはキャッシュドロップをトリガーするように思えますが、物理メモリの割り当てはそうではありませんか? これは意味がありません。メモリがキャッシュに拘束されている場合、カーネル モジュールは OOM を起こす可能性が高く、この動作は、キャッシュがないことによるディスク アクセスの低速化よりも有害であるように思われるからです。
これに対処するためのチューニング パラメータはありますか?
ありがとう!