Preciso configurar um sistema de armazenamento em memória para cerca de 10 GB de dados, consistindo em muitos arquivos únicos de 100 kb (imagens). Haverá muitas leituras e gravações bastante periódicas (adicionando novos arquivos, excluindo alguns antigos).
Agora, eu sei que o tmpfs se comporta como um sistema de arquivos comum para o qual você pode, por exemplo, verificar o espaço livre / usado com o df , que é um recurso interessante de se ter. No entanto, estou interessado se os ramfs ofereceriam algumas vantagens em relação à velocidade das operações de IO. Sei que não consigo controlar o tamanho da memória consumida ao usar ramfs e que meu sistema pode travar se consumir completamente a RAM livre, mas isso não será um problema nesse cenário.
Para resumir, estou interessado:
- Em termos de desempenho, mais rápido: ramfs ou tmpfs (e possivelmente por que)?
- Quando o tmpfs usa espaço de troca? Ele move os dados salvos para trocar (para liberar RAM para outros programas em execução no momento) ou apenas novos dados se nesse momento não houver mais RAM livre?
fonte
Respostas:
Minha recomendação:
Meça e observe a atividade da vida real em condições normais.
É improvável que esses arquivos sejam TODOS necessários e servidos a partir do cache o tempo todo. Mas há uma boa ferramenta chamada vmtouch que pode informar o que está no cache em um determinado momento. Você também pode usá-lo para bloquear certos diretórios ou arquivos no cache. Portanto, veja como são as coisas depois de algum uso regular. O uso de tmpfs e ramfs não é necessário para esta situação.
Consulte: http://hoytech.com/vmtouch/
Acho que você ficará surpreso ao ver que os arquivos mais ativos provavelmente já estarão residentes no cache.
Quanto a tmpfs versus ramfs, não há diferença significativa de desempenho. Existem diferenças operacionais. Um caso de uso da vida real é o Oracle, onde ramfs foi usado para permitir que o Oracle gerencie dados na RAM sem o risco de serem trocados. Os dados tmpfs podem ser trocados sob pressão de memória. Também existem diferenças no redimensionamento e modificação das configurações em tempo real.
fonte
Não pense demais nisso. Coloque RAM suficiente no seu sistema e deixe o cache do disco do kernel cuidar de tudo por você. Dessa forma, você obtém o benefício de leituras vindas diretamente da memória, enquanto continua sendo capaz de persistir os dados no disco.
fonte
1) Referência de desempenho.
Usando esta página como referência, fiz uma comparação de E / S entre tmpfs e ramfs, e os resultados são que ela é praticamente idêntica em termos de desempenho:
2) De acordo com esta página , o tmpfs usa swap e o ramfs não usa swap.
fonte
Se você tiver uma quantidade suficiente de RAM instalada para hospedar os vários buffers do kernel, os aplicativos empilham e empilham, o cache regular do sistema de arquivos e todos os arquivos que você pretende colocar nele,
ramfs
nunca deve ser mais lento dotmpfs
que não haverá risco de E / S física por design. As E / S físicas são, sem dúvida, a principal causa de degradação do desempenho nessa área.No entanto, se você não possui essa quantidade de RAM instalada, o uso
ramfs
pode e provavelmente será mais lento dotmpfs
que o último está usando a heurística da memória virtual para decidir o que deveria estar melhor no disco (ou seja, na área de troca) versus o que deveria estar na RAM Enquanto issotmpfs
, os dados do sistema de arquivos ficam presos na RAM, o que pode ser um desperdício de recursos.Para responder a sua segunda pergunta, sim,
tmpfs
os dados antigos serão movidos primeiro para a área de troca, não para a última "quente".fonte