我在 ARM M1 MacBook Air 上运行内核 6.5 的 Debian stable。最大的问题是 RAM 和 VRAM 是统一的,并且没有特定的方法来检查所使用的 RAM 有多少是 VRAM(正如 Asahi Linux 主要开发人员所证实的那样)。
这会导致系统在接近 500 MiB 可用 RAM 时不断挂起。理论上,我可以使用该程序分配内存stress
,内核会杀死它,但实际上,任何其他使用过多内存的程序最终都会挂起计算机,因为内核不考虑所使用内存的 VRAM 部分。内核将杀死使用 200 MiB RAM 的程序,但保留使用 3 GiB 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
(7 GB)内核引导选项,看看它是否有帮助,但我怀疑它会。
答案2
和阿尔乔姆一样,我对此非常怀疑。我不是特别熟悉 MAC M1 架构,但在视频使用主 RAM 的丢失系统上运行过 Linux - IME,它在任何用户进程启动之前很久就一直是静态分配的。
但假设你的断言是有效的,我会尝试以严格的 0% 来解决问题内存过度使用:
vm.overcommit_memory=2
vm.overcommit_ratio=0
(我怀疑 overcommit_ratio 和 overcommit_kbytes 都不会接受负数 - 但如果上面的值无法解析,这绝对值得测试)。
更新 随后的评论表明这只是常见的过度使用/OOMKiller 问题。如果是这种情况,那么我在这里提出的建议是解决问题的正确方法,尽管 0 的 overmmit 比率可能过于热心。检查你的日志。