Nós temos um sistema linux embutido (yocto 1.8) rodando em uma placa i.MX6 com 1GByte de RAM. O kernel está configurado para ter 320MByte de CMA reservado e sem swap. Kernel 3.10.53
Quando executamos uma pequena aplicação de teste apenas para consumir memória, vemos um comportamento estranho quando chegamos a cerca de 250MBytes livres, os buffers / caches começam a diminuir e a memória livre fica em torno de 250MByte. Se continuarmos alocando memória, o sistema se torna cada vez mais lento até que ele pare completamente ou o assassino da OOM entra em ação.
Eu acho que o que eu estou querendo saber é como o CMA realmente funciona, porque nós desativamos o CMA, nós vemos o mesmo comportamento acima, mas acontece quando temos cerca de 40-50MBytes livres, e eu acredito que é esperado . Depois de ler sobre CMA eu acredito que o pool não deve ser retido completamente do sistema, ele ainda deve ser viável para caches etc, mas no nosso caso, parece que o sistema descarta os caches enquanto ainda resta muita memória.
Alguém sabe se esse é o comportamento esperado ou se existe um lugar melhor para colocar essa questão?
Editar: Parece que alteramos o valor de vm.min_free_kbytes para 32MBytes. Mudar de volta para o valor padrão parece nos permitir usar toda a memória.
Ainda não temos certeza de como o CMA está realmente afetando o sistema, mas isso pode não ser tão importante mais.
Tags memory linux virtual-memory