A maneira óbvia de manter um monte de arquivos no cache é acessá-los com frequência. O Linux é muito bom em arbitrar entre swapping e caching, então eu suspeito que a diferença de velocidade que você observa na verdade não é devido ao sistema operacional não manter coisas no cache, mas a alguma outra diferença entre o uso do tmpfs e suas outras tentativas. / p>
Tente observar o que está fazendo IO em cada caso. A ferramenta básica para isso é iotop
. Outras ferramentas podem ser úteis; consulte E / S do disco do Linux, por divisão do sistema de arquivos e / ou processo? , Qual programa no Linux pode medir I / O ao longo do tempo? , e outros threads no Server Fault.
Aqui estão algumas hipóteses sobre o que poderia estar acontecendo. Se você fizer medições, mostre-as para que possamos confirmar ou refutar essas hipóteses.
- Se você tiver os tempos de acesso do arquivo ativados, o sistema operacional poderá desperdiçar um pouco de tempo escrevendo esses tempos de acesso. Os tempos de acesso são inúteis para uma árvore de compilação, portanto, verifique se eles estão desativados com a opção
noatime
mount. Sua solução tmpfs + rsync nunca lê a partir do disco rígido, por isso nunca precisa gastar tempo extra escrevendo atimes. - Se as gravações forem sincronizando , porque o compilador chama
sync()
ou porque o kernel frequentemente libera seus buffers de saída, as gravações levarão mais tempo para um disco rígido do que para tmpfs.