我们有一个嵌入式 Linux 系统 (yocto 1.8),运行在具有 1GB RAM 的 i.MX6 板上。内核配置为保留 320MB 的 CMA,无交换。内核 3.10.53
当我们运行一个小型测试应用程序只是为了消耗内存时,我们看到一个奇怪的行为,当空闲内存达到约 250MByte 时,缓冲区/缓存开始减少,空闲内存保持在 250MByte 左右。如果我们继续分配内存,系统会变得越来越迟缓,直到完全停止运行或 OOM 杀手启动。
我觉得我想知道的是 CMA 实际上是怎样工作的,因为我们禁用了 CMA,我们会看到与上述相同的行为,但它发生在我们有大约 40-50MBytes 可用空间时,我相信这是预料之中的。在阅读了有关 CMA 的内容后,我认为不应该完全将池从系统中移除,它仍然适用于缓存等,但在我们的例子中,系统似乎在内存充足时丢弃了缓存。
有人知道这是否是预期的行为,或者是否有更好的地方来提出这个问题?
编辑:看来我们已经将 vm.min_free_kbytes 的值更改为 32MBytes。改回默认值似乎允许我们使用所有内存。
我们仍然不确定 CMA 实际上是如何影响系统的,但这可能不再那么重要了。