Os arquivos de curta duração são descarregados no disco?

9

Meu programa cria muitos pequenos arquivos de curta duração. Eles normalmente são excluídos dentro de um segundo após a criação. Os arquivos estão em um sistema de arquivos ext4 respaldado por um disco rígido real. Eu sei que o Linux libera periodicamente ( pdflush ) páginas sujas para o disco. Como meus arquivos são de curta duração, provavelmente eles não são armazenados em cache por pdflush . A minha pergunta é: o meu programa causa muitas gravações em disco? Minha preocupação é a vida do meu disco rígido.

Como os arquivos são pequenos, suponhamos que a soma do tamanho deles seja menor que dirty_bytes e dirty_background_bytes .

O Ext4 tem um diário padrão ativado, por exemplo, um diário de metadados. Também quero saber se os metadados ou os dados estão gravados no disco.

    
por Wu Yongzheng 21.08.2013 / 05:11

4 respostas

3

Um experimento simples usando o ext4:

Crie uma imagem de 100 MB ...

# dd if=/dev/zero of=image bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0533049 s, 2.0 GB/s

Faça um dispositivo de loop ...

# losetup -f --show image
/dev/loop0

Faça o sistema de arquivos e monte ...

# mkfs.ext4 /dev/loop0
# mount /dev/loop0 /mnt/tmp

Faça algum tipo de execução com arquivos de curta duração. (Altere isso para qualquer método que você preferir.)

for ((x=0; x<1000; x++))
do
    (echo short-lived-content-$x > /mnt/tmp/short-lived-file-$x
     sleep 1
     rm /mnt/tmp/short-lived-file-$x ) &
done

Umount, sync, unloop.

# umount /mnt/tmp
# sync
# losetup -d /dev/loop0

Verifique o conteúdo da imagem.

# strings image | grep short-lived-file | tail -n 3
short-lived-file-266
short-lived-file-895
short-lived-file-909
# strings image | grep short-lived-content | tail -n 3

No meu caso, ele listou todos os nomes de arquivos, mas nenhum conteúdo do arquivo. Então, apenas o conteúdo não foi escrito.

    
por 22.08.2013 / 10:40
7

A menos que você esteja falando sobre uma unidade de estado sólido, um alto número de gravações em disco não será o fator dominante na longevidade da unidade.

Se você realmente quer evitar gravações em disco, procure em tmpfs ,

    
por 21.08.2013 / 05:33
1

Como regra geral, não, eles não serão escritos. Isso ocorre porque o cache libera páginas sujas quando uma das duas condições é atendida:

  1. Os dados são expirados após /proc/sys/vm/dirty_writeback_centisecs , cujo padrão é 5 segundos.

  2. Há pouca memória para o cache armazenar os dados, mais de dirty_ratio páginas sujas no cache (o padrão é 20%).

Assim, em um sistema com muita memória livre e pouco tráfego de gravação, além de seus arquivos pequenos que são excluídos em menos de 5 segundos, os dados não serão liberados.

    
por 23.08.2013 / 17:07
0

Se os arquivos de curta duração são gravados no disco ou não, isso depende não apenas do comportamento padrão do cache de arquivos do kernel, mas também dos detalhes da implementação do driver do sistema de arquivos e das opções de montagem do sistema de arquivos. É possível configurar o sistema de forma que tudo seja imediatamente gravado no disco (essencialmente, comportamento do tipo DOS).

Um sistema de arquivos, com destaque para o comportamento em que você está interessado (chamado de "alocação atrasada") é o XFS. Com ele você pode ter mais ou menos certeza (sem opções de configuração engraçadas em outros lugares) que os blocos pertencentes a apenas arquivos excluídos serão reutilizados na memória, sem acesso a disco intermediário. O XFS ainda pode querer atualizar seu diário de metadados (que será gravado no disco com bastante frequência; no entanto, como o diário do XFS é apenas de metadados, ele é pequeno o suficiente para ser configurado em outro dispositivo rápido, como RAM em muitos controladores RAID).

Devido a esse comportamento, não é incomum encontrar completamente zerado, mas, ao contrário, legitima a aparência de arquivos (tamanho e outros metadados intactos) em um sistema de arquivos XFS após uma interrupção repentina de energia. Tal é um custo de suportar operações rápidas de arquivos "semi-temporários".

Alguma teoria

Em geral, uma chamada de sistema acessando um sistema de arquivos termina, rapidamente, no método definido pelo driver do sistema de arquivos (anexado a "struct inode_operations" e "struct file_operations" quando o driver VFS é registrado). O que acontece depois disso é deixado apenas para a discrição da implementação do sistema de arquivos. Normalmente, algo semelhante à seguinte abordagem é usado (este exemplo simples é do driver FAT do Linux):

if (IS_DIRSYNC(dir))
    (void)fat_sync_inode(dir);
else
    mark_inode_dirty(dir);

Se o sistema de arquivos estiver montado no modo "sync", todas as alterações irão para o disco imediatamente (por meio de fat_sync_inode () neste caso). Caso contrário, o bloco é marcado como "sujo" e permanece no cache de memória até ser liberado em alguma oportunidade razoável.

Portanto, é impossível prever o comportamento do sistema em relação a arquivos temporários sem considerar opções de montagem do sistema de arquivos e inspecionar o código-fonte de sua implementação (isso, é claro, se aplica a todos os tipos de sistemas de arquivos exóticos espaço incorporado).

    
por 21.08.2013 / 10:27

Tags