O estado natural das coisas é que os dados do aplicativo estão na RAM e os arquivos estão no disco.
O estado ideal das coisas, em termos de desempenho, é que os dados em uso freqüente estão na RAM, e os dados que não são necessários no momento estão no disco.
Em um sistema normal, o kernel faz duas coisas para tentar alcançar esse ideal:
- Os dados de aplicativos que não foram usados por algum tempo podem ser movidos para o disco: isso é swap.
- Os dados dos arquivos que foram usados recentemente são mantidos na RAM: esse é o cache de disco (para dados lidos do disco) e os buffers de disco (para dados que estão prestes a ser gravados no disco).
Em um sistema típico, uma parte significativa da RAM é dedicada ao cache e aos buffers (50% é uma figura típica). Como a RAM é um recurso finito, isso pode exigir o deslocamento de alguns dados do aplicativo para swap (a troca é necessária apenas se houver uma maneira melhor de usar a RAM).
Em um sistema sem swap, há um ponto em que os dados do aplicativo estão usando quase toda a RAM e, portanto, quase não resta espaço para o cache. Então o sistema provavelmente será lento. O kernel não começará a matar aplicativos até que seja necessário. Desde que os aplicativos preencham apenas 99% da memória disponível, o sistema continua funcionando, mas muito lentamente, pois os dados dos arquivos precisam ser carregados e recarregados do disco o tempo todo. Com os mesmos aplicativos em execução, o sistema seria mais rápido com swap nesse ponto.
Para saber mais sobre esse problema, consulte esta discussão sobre o lkml e esta postagem no blog .
Eu não sei de uma maneira direta de dizer ao kernel para reservar uma quantidade mínima de RAM para o cache de disco. Você poderia configurar uma pequena parte de sua memória RAM como espaço de troca , talvez até compactado . Existem relatórios de sucesso nessa frente , embora eu não tenha garantias em seu caso particular.