LinuxはRAMキャッシュを無効にします。

LinuxはRAMキャッシュを無効にします。

私はARM M1 MacBook Airでカーネル6.5を使用してDebian stableを実行しています。最大の問題は、RAMとVRAMが統合されていることであり、使用されているRAMの量がVRAMであることを確認するための具体的な方法はありません(Asahi Linuxメイン開発者による確認)。

これにより、空きRAMが500MiBに近づくと、システムは継続的に停止します。理論的には、このプログラムを使用してメモリを割り当てることができ、カーネルはそれを終了しますstressが、実際にはあまりにも多くのメモリを使用する他のプログラムは、カーネルが使用されているメモリのVRAM部分を考慮しないため、最終的にコンピュータを停止します。カーネルは200MiBのRAMを使用するプログラムを終了しますが、3GiBのVRAMを使用するプログラムはそのまま残します。

カーネルがスワップを開始すると、ログを作成する時間がなくてもシステムがすぐに停止するため、SWAPを生成することは役に立ちません。

sysctlより多くのRAMを使用できるように、RAMのディスクキャッシュを無効にするようにカーネルパラメータまたはパラメータを設定できますか?システムを引き続き実行するには、スクリプトを継続的に実行する必要があり、スクリプトdrop-cachesをキーボードショートカットにバインドし、特定のプログラムが閉じられた後に自動的に実行されるようにしました。

最も基本的な使用(Firefoxで4つのYouTubeタブを開く、誰かがTelegramに電話する、Telegramが自動的にダウンロードする60秒のビデオを送信)の間にクラッシュすることがあります。

このような質問に対する私が見つけた答えは「あなたは愚かです。キャッシュを無効にする必要はありません。この質問をもう一度尋ねないでください」であり、実際の解決策はありません。

"while true; echo 3 > /proc/sys/vm/drop_caches ; sleep 60" &このようなものを入れるよりも良い方法が必要です/etc/rc.local

これは問題を解決する正しい方法ではないことを知っていますが、できるだけ多くの空きRAMを確保するためにカーネルキャッシュをブロックする必要があります。

答え1

私は起こったことの根拠は非常に懐疑的です。

AFAIK、最新のMacbookにはRAMとVRAM専用の別々のRAM領域がなく、RAMとVRAMの割り当てにアプリケーションで使用できる統合メモリブロックであり、LinuxカーネルはRAM割り当てがVRAMを占有しないようにする必要があります。

あなたが説明する内容は、Asahi開発者に報告する必要があるカーネルのバグのように聞こえます。

mem=MAX_RAMたとえば、mem=7G(7GB)カーネルブートオプションを試して、役に立つかどうかを確認できますが、それは疑問です。

答え2

Artyomのように、私は非常に懐疑的です。私はMAC M1アーキテクチャについて特に理解していませんが、ビデオがメインRAM(ユーザープロセスの開始前に静的に割り当てられたIME)を使用している不足しているシステムでLinuxを実行しました。

しかし、あなたの主張が妥当であると仮定すると、私は厳密に0%で問題を解決しようとします。メモリ過剰割り当て:

vm.overcommit_memory=2
vm.overcommit_ratio=0

(overcommit_ratioとovercommit_kbytesはどちらも負の数を受け入れないと思います。しかし、上記の値が解析されない場合は確かにテストする価値があります。)

修正する その後のコメントは、これが一般的な乱用/ OOMKillerの問題であることを示唆しています。もしそうなら、ここで私が提案するのは問題を解決する正しい方法です。たとえ過剰率がゼロであれば過度に熱心になることがありますが。ログを確認してください

関連情報