Diferença de desempenho entre ramfs e tmpfs

23

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?

Ivan Kovacevic
fonte
Hum, quanta RAM existe no servidor?
precisa saber é
1
O servidor possui um total de 16 GB de RAM. Também digno de nota é que eu não tenho um armazenamento SSD, mas um único HDD de 7200 rpm. É por isso que estou pensando em usar algum tipo de armazenamento em RAM.
Ivan Kovacevic

Respostas:

21

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.

ewwhite
fonte
1
Pequena utilidade impressionante! +1
Janne Pikkarainen
1
Excelente resposta. Em um dos nossos casos, alguns anos atrás, descobrimos que os arquivos mais usados ​​já estão no cache. Dica: hoje em dia, os sistemas de arquivos são muito mais inteligentes do que um.
giannisapi 01/09/16
13

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.

EEAA
fonte
1
Meu sistema atualmente possui 16 GB de RAM. É uma instalação simples do Debian executando o Nginx para servir essas imagens. Eu tenho uma conexão de rede de 1 Gbit que estará com carga 100% o tempo todo, servindo essas imagens em nenhuma ordem específica. Você acha que o kernel carregará todos esses 10 GB de imagens de qualquer maneira no cache neste cenário?
Ivan Kovacevic
3
Sim, se houver RAM suficiente no sistema e outros aplicativos no servidor não estiverem competindo por recursos de RAM, esses arquivos permanecerão no cache.
EEAA
2
Estou na administração do unix há aproximadamente 15 anos e nunca me deparei com uma situação em que o tmpfs / ramfs tivesse qualquer benefício sobre o cache fs do kernel nativo. Isso não quer dizer que as situações não existam por aí onde seriam justificadas, mas são bastante raras. Normalmente, se você precisar de cache de RAM, usará uma camada de armazenamento em cache para fins específicos (Redis / Memcache / etc.).
EEAA
4
O cache de disco certamente funcionará no caso em que as imagens precisem ser lidas, mas tmpfs ou ramfs ainda poderão ser úteis se você desejar acelerar muitas gravações aleatórias / pequenas, mas estiver vinculado a um disco lento com I / aleatório O. Lembre-se de que, se a máquina travar ou sofrer uma falha de energia, o conteúdo de tmpfs desaparecerá, pois está na memória (somente).
287 Martijn
1
@Martijn está certo. tmpfs e ramfs são realmente úteis. Por exemplo, estou fazendo uma reescrita intensiva (ramificação de filtro) de um repositório git. Fazê-lo na memória é mais rápido do que no meu SSD. O armazenamento em cache ajuda nas leituras e nas gravações, pois (normalmente) o Linux precisa atender a algumas garantias sobre a permanência das operações do disco.
Paul Draper
7

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:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) De acordo com esta página , o tmpfs usa swap e o ramfs não usa swap.

Michael Martinez
fonte
2
Sua resposta está no caminho certo. No entanto, eu não concordo com sua conclusão sobre desempenho, seus testes mostram que existem diferenças de 0,2 GB / se 0,1 GB / s a ​​favor de ramfs. Acredito que isso deva ser testado ainda mais para fornecer uma amostra estatística válida. Em relação a 2) Sim, isso é conhecido, no entanto, eu gostaria de ter uma ideia melhor de exatamente quando o swap é usado.
Ivan Kovacevic
se fizermos esse benchmark várias vezes com arquivos de tamanhos diferentes, acho que não veremos diferença. você notará que quando aumentei o tamanho quatro vezes, a diferença diminuiu em vez de aumentar.
22814 Michael Martinez
1
E o caso em que você tem um monte de arquivos pequenos. Por exemplo, escrevendo milhões de arquivos de 100-200 kb. Você também obtém 0,2 GB / s de diferença repetidamente para o mesmo tamanho de arquivo? O que definitivamente apontaria para a diferença de desempenho. Provavelmente eu mesmo testarei isso quando estiver na minha agenda. Mas foi por isso que perguntei aqui, para que talvez eu pudesse cruzá-lo da lista de tarefas se alguém já o fez.
Ivan Kovacevic
Sim, a única maneira de saber com certeza é fazer os testes.
Michael Martinez
1

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, ramfsnunca deve ser mais lento do tmpfsque 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 ramfspode e provavelmente será mais lento do tmpfsque 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 isso tmpfs, 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, tmpfsos dados antigos serão movidos primeiro para a área de troca, não para a última "quente".

jlliagre
fonte