Existe uma maneira de dizer ao kernel do Linux para usar apenas uma certa porcentagem de memória para o cache do buffer? Sei que /proc/sys/vm/drop_caches
pode ser usado para limpar o cache temporariamente, mas há alguma configuração permanente que impeça que ele cresça para mais de, por exemplo, 50% da memória principal?
A razão pela qual desejo fazer isso é que tenho um servidor executando um Ceph OSD que constantemente fornece dados do disco e consegue usar toda a memória física como cache de buffer dentro de algumas horas. Ao mesmo tempo, preciso executar aplicativos que aloquem uma grande quantidade (vários 10s de GB) de memória física. Ao contrário da crença popular (consulte os conselhos de quase todas as perguntas relacionadas ao cache do buffer), a liberação automática da memória descartando entradas limpas do cache não é instantânea: iniciar meu aplicativo pode levar até um minuto quando o cache do buffer estiver cheio ( *), depois de limpar o cache (usando echo 3 > /proc/sys/vm/drop_caches
) o mesmo aplicativo inicia quase instantaneamente.
(*) Durante esse minuto de tempo de inicialização, o aplicativo está com falha na nova memória, mas gasta 100% de seu tempo no kernel, de acordo com o Vtune em uma função chamada pageblock_pfn_to_page
. Essa função parece estar relacionada à compactação de memória necessária para encontrar páginas enormes, o que me leva a acreditar que realmente a fragmentação é o problema.