write-through RAM disk ou cache massivo do sistema de arquivos?

5

Eu tenho um programa que está atingindo muito o sistema de arquivos, lendo e escrevendo aleatoriamente em um conjunto de arquivos de trabalho. Os arquivos somam vários gigabytes de tamanho, mas posso poupar a memória RAM para mantê-los na maior parte na memória. As máquinas nas quais este programa é executado são normalmente caixas do Ubuntu Linux.

Existe uma maneira de configurar o sistema de arquivos para ter um cache muito grande, e até para gravar em cache para que eles acessem o disco posteriormente? Eu entendo os problemas com perda de energia ou algo assim, e estou preparado para aceitar isso. Deixando de funcionar, em operação normal, as gravações devem chegar ao disco!

Ou existe uma maneira de criar um disco RAM que grava em disco real?

    
por Will 17.02.2010 / 17:22

7 respostas

5

Você está vendo um grande número de esperas de E / S, indicando que as solicitações de leitura e gravação não estão sendo atendidas por meio de buffers existentes? Como outros notaram, o Linux é muito bom em dar memória RAM extra aos buffers, então você deve verificar isso primeiro.

Se você não está vendo o IO esperar, então é possível que seus problemas de desempenho (você ainda tem problemas? sua pergunta não diz) são devido a mudanças no contexto do kernel a partir de pequenas operações de IO iniciadas pelo programa. Nesse caso, você pode obter um aumento significativo no desempenho, reescrevendo seu aplicativo para usar arquivos mapeados na memória. Mas isso é mais uma pergunta para o StackOverflow.

    
por 20.05.2010 / 22:16
5

Considere o uso de um sistema de arquivos ext4 usando opções de montagem rápidas e soltas:

noatime,data=writeback,nobh,barrier=0,commit=300

para adiar a gravação de dados do cache de volta para o disco físico.

Além disso, você pode usar aufs para montar um sistema de arquivos tmpfs no topo de seu sistema de arquivos regular, fazer toda a escrita e então mesclar o tmpfs de volta ao sistema de arquivos real depois.

    
por 01.12.2010 / 23:48
1

O Linux, por padrão, usa qualquer RAM extra como cache de arquivos, portanto, nenhuma configuração é necessária para isso.

Você pode considerar o uso de ext4 como o sistema de arquivos. Ele usa um grande número de técnicas para acelerar o acesso ao disco, incluindo a alocação atrasada que:

This has the effect of batching together allocations into larger runs. Such delayed processing reduces CPU usage, and tends to reduce disk fragmentation, especially for files which grow slowly. It can also help in keeping allocations contiguous when there are several files growing at the same time.

A perda de dados é bastante rara devido ao uso do registro no diário .

O Ext4 agora é o sistema de arquivos padrão em versões recentes do Linux, embora você provavelmente queira ter certeza de que o kernel que você usa seja pelo menos 2.6.30

    
por 17.02.2010 / 18:50
1

Use o mmap nesses arquivos - ele usa o cache superior do kernel, tornando-o muito mais rápido.

    
por 19.03.2011 / 14:15
1

Você pode ver minha resposta aqui: Reserve RAM para cache e buffer . Se você quiser reservar memória para cache e buffer: echo 10 > / proc / sys / vm / vfs_cache_pressure quando 100 é o valor padrão. Então você pode limitar o máximo de memória RAM usado por cada aplicativo: echo 8192 > / proc / sys / vm / max_map_count.

    
por 23.01.2012 / 02:12
0

O Linux usa sua RAM de maneira muito eficiente .
Eu não acho que você realmente precisa trabalhar para fazer com que as coisas sejam armazenadas em cache com arquivos grandes.
Para verificar isso por si mesmo, tente estas coisas .

The Linux disk cache is very unobtrusive. It uses spare memory to greatly increase disk access speeds, and without taking any memory away from applications.

Verifique a quantidade de memória RAM do seu sistema e se você pode aumentá-lo.
Não há necessidade de um disco RAM para este fim,
o cache de disco funcionará bem com todo o espaço de RAM disponível.

    
por 17.02.2010 / 18:52
0

O RapidCache fornece um disco RAM com write-through, mas está atualmente "em beta".

    
por 05.07.2013 / 13:09