Diferença de desempenho entre os ramfs e os tmpfs

17

Eu preciso configurar um sistema de armazenamento de memória para cerca de 10 GB de dados, consistindo em muitos arquivos individuais de 100 kb (imagens). Haverá muitas leituras e gravações razoavelmente periódicas (adicionando novos arquivos, excluindo alguns antigos). Agora, eu sei que o tmpfs se comporta como um sistema de arquivos regular para o qual você pode, por exemplo, verificar o espaço livre / usado com df , é um bom recurso para ter. No entanto, estou interessado em ramfs oferecer algumas vantagens em relação à velocidade das operações de IO. Eu sei que não consigo controlar o tamanho da memória consumida ao usar ramfs e que meu sistema pode travar se consome completamente a RAM livre, mas isso não será um problema neste cenário.

Para resumir, estou interessado:
- Em termos de desempenho, o que é mais rápido: ramfs ou tmpfs (e possivelmente por quê)

- Quando o tmpfs usa o espaço de troca? Ele move dados já salvos para swap (para liberar RAM para outros programas atualmente em execução) ou apenas novos dados se, no momento, não houver memória RAM livre?

    
por Ivan Kovacevic 19.04.2014 / 19:44

4 respostas

18

Minha recomendação:

Medir e observar atividades da vida real sob condições normais.

É improvável que esses arquivos sejam TODOS necessários e servidos do cache em todos os momentos. Mas há uma boa ferramenta chamada vmtouch que pode informar o que está em cache em um determinado momento. Você também pode usá-lo para bloquear certos diretórios ou arquivos no cache. Então, veja o que as coisas parecem depois de algum uso regular. Usando tmpfs e ramfs não são necessários para esta situação.

Veja: link

Acho que você ficará surpreso ao ver que os arquivos mais ativos provavelmente já estarão armazenados no cache.

No que diz respeito a tmpfs versus ramfs, não há diferença significativa de desempenho. Existem diferenças operacionais. Um caso de uso real é o Oracle, no qual o ramfs era usado para permitir que o Oracle gerencie dados na RAM sem o risco de ser trocado. Os dados tmpfs podem ser trocados sob pressão de memória. Há também diferenças no redimensionamento e modificação de configurações na hora.

    
por 19.04.2014 / 20:56
13

Não pense demais nisso. Coloque bastante RAM em seu sistema e deixe o cache de disco do kernel cuidar de tudo para você. Dessa forma, você obtém o benefício das leituras vindas diretamente da memória, enquanto ainda consegue manter os dados no disco.

    
por 19.04.2014 / 19:46
5

1) Referência de desempenho.

Usando esta página como referência, eu fiz comparação I / O entre tmpfs e ramfs, e os resultados são que é praticamente idêntico 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.

    
por 21.04.2014 / 21:12
1

Se você tiver uma quantidade suficiente de RAM instalada para hospedar os vários buffers do kernel, pilha e heaps de aplicativos, o cache do sistema de arquivos regular e todos os arquivos que você deseja colocar, ramfs nunca deve ser mais lento que tmpfs , pois não haverá risco de E / S física por design. As E / Ss físicas são, sem dúvida, a principal causa de degradação do desempenho nessa área.

No entanto, se você não tiver essa quantidade de RAM instalada, usar ramfs e provavelmente será mais lento que tmpfs , pois o último está usando a heurística de memória virtual para decidir o que deve ser melhor no disco (ou seja, no área de troca) versus o que deveria estar na RAM enquanto com tmpfs , os dados do sistema de arquivos estão presos na RAM, o que pode ser um desperdício de recursos.

Para responder a sua segunda pergunta, sim, tmpfs moverá dados antigos primeiro para a área de troca, não para a última "quente".

    
por 24.04.2014 / 22:58