Posso limitar o tamanho do cache do arquivo linux?

6

Estou executando o Xubuntu 14.04 de 64 bits, a versão 3.8.0-25 do Linux, com 8 GB de RAM.

Eu tenho um script (no MATLAB, pelo que vale a pena) que carrega um grande número de arquivos de dados (~ 23k) um de cada vez, para um total de cerca de 45G de dados. O problema que estou tendo é que depois que cada arquivo é carregado, ele permanece no cache de arquivos. O Linux parece preferir manter esses arquivos em cache na memória, em vez de qualquer outro conteúdo da memória, fazendo com que quase todo o resto seja forçado a fazer swap, fazendo com que o meu sistema fique lento para um rastreamento. Eu li vários arquivos por segundo, então isso acontece rapidamente. Eu só leio cada arquivo uma vez, então não preciso que os arquivos permaneçam armazenados em cache depois de terminar com eles.

Eu tentei desativar a troca, o que funciona até certo ponto, mas parece uma solução ruim (e ela já falhou uma vez quando outro programa começou a usar memória excessiva). Existe uma maneira que eu possa limitar a quantidade de RAM que o Linux usa para o cache de arquivos?

    
por MrAzzaman 10.03.2015 / 02:31

1 resposta

1

Não é realmente uma resposta, mas é muito longa para um comentário.

O gerenciamento de memória do Linux foi cuidadosamente ajustado ao longo de sua vida útil por algumas pessoas muito inteligentes e normalmente faz um bom trabalho ao tomar a decisão certa ao escolher o que manter na memória e o que deve ser descartado.

Infelizmente, parece que sua carga de trabalho não é muito compatível com suas decisões :-( Ainda assim, estou bastante surpreso com seu relatório de que na verdade ele está frequentemente preferindo forçar a troca de memória suja em vez de descartar algo do cache Uma decisão entre descartar a coisa A do cache versus soltar a coisa B do cache pode ser difícil, mas uma decisão entre descartar a coisa C do cache versus escrever a memória suja D para trocar deve ser strongmente ponderada para deixar cair a coisa C porque isso é muito menos caro!

Existe uma maneira de informar ao Linux que alguma parte da memória armazenada em cache não será necessária no futuro, e essa é a chamada do sistema madvise() com MADV_DONTNEED , mas acho que seria difícil para você invocar isso chamada de sistema de um script do MATLAB ...

De qualquer forma, não acho que reduzir o tamanho do cache de arquivos seja realmente o que você deseja fazer aqui. Lembre-se que os arquivos executáveis e bibliotecas e arquivos de tempo de execução e plugins etc ... para o próprio MATLAB, seu script, seu ambiente GUI e outros softwares de sistema, também todos vivem no cache de arquivos, e você estaria forçando essas coisas do cache de arquivos (em favor de qualquer outro conteúdo do cache de arquivos ou em favor da memória heap e outros mapeamentos não suportados por arquivo). Isso fará com que seu sistema fique lento com a mesma segurança que a troca.

    
por 10.03.2015 / 03:05