Meu programa cria muitos pequenos arquivos de curta duração. Eles geralmente são excluídos dentro de um segundo após a criação. Os arquivos estão em um sistema de arquivos ext4 apoiado por um disco rígido real. Eu sei que o Linux libera periodicamente ( pdflush
) páginas sujas no disco. Como meus arquivos têm vida curta, provavelmente eles não são armazenados em cache pdflush
. Minha pergunta é: meu programa causa muitas gravações em disco? Minha preocupação é com a vida do meu disco rígido.
Como os arquivos são pequenos, vamos assumir que a soma do tamanho é menor que dirty_bytes
e dirty_background_bytes
.
O Ext4 tem o diário padrão ativado, ou seja, o diário de metadados. Também quero saber se os metadados ou dados estão gravados no disco.
sync
opção Você pode considerar um fedora, debian ou ubuntu padrão instalado. Você escolhe um. (2) Cada arquivo tem cerca de 60 KB. (3) Cerca de 1000 arquivos são criados e excluídos por segundo, mas não existem mais de 10 arquivos a qualquer momento. Em outras palavras, a taxa de transferência de E / S é grande, mas o espaço ocupado é pequeno.Respostas:
Um experimento simples usando ext4:
Crie uma imagem de 100 MB ...
Torná-lo um dispositivo de loop ...
Faça o sistema de arquivos e monte ...
Faça algum tipo de execução com arquivos de curta duração. (Altere para qualquer método que você preferir.)
Umount, sync, unloop.
Verifique o conteúdo da imagem.
No meu caso, listou todos os nomes de arquivos, mas nenhum conteúdo. Portanto, apenas o conteúdo não foi escrito.
fonte
nbd
e registre o tráfego (ou método semelhante para rastrear todas as gravações).A menos que você esteja falando de 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 deseja evitar gravações em disco, consulte tmpfs ,
fonte
Como regra geral, não, eles não serão escritos. Isso ocorre porque o cache limpa páginas sujas quando uma das duas condições é atendida:
Os dados expiram depois
/proc/sys/vm/dirty_writeback_centisecs
, o padrão é 5 segundos.Há pouca memória para o cache reter os dados, mais do que
dirty_ratio
páginas sujas no cache (o padrão é 20%).Portanto, em um sistema com muita memória livre e pouco tráfego de gravação, exceto pelos arquivos pequenos que são excluídos em menos de 5 segundos, os dados não serão liberados.
fonte
O fato de os arquivos de curta duração serem gravados no disco ou não 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 referido sistema de arquivos. É possível configurar o sistema de forma que tudo seja imediatamente imediatamente gravado no disco (essencialmente, comportamento semelhante ao DOS).
Um sistema de arquivos, destacando o comportamento de seu interesse (a chamada "alocação atrasada") é o XFS. Com ele, você pode ter mais ou menos certeza (caso não haja opções de configuração engraçadas em outros lugares) de que os blocos pertencentes a apenas arquivos excluídos serão reutilizados na memória, sem acesso intermediário ao disco. O XFS ainda pode querer atualizar seu diário de metadados (que será gravado no disco com bastante frequência; ainda, como o diário do XFS é apenas metadado, ele é pequeno o suficiente para ser definido em outro dispositivo rápido, como a RAM suportada por bateria encontrada em muitos controladores RAID).
Devido a esse comportamento, não é incomum encontrar arquivos completamente zerados, mas de outra forma legítimos (tamanho e outros metadados intactos) em um sistema de arquivos XFS após uma súbita interrupção de energia. Esse é um custo do suporte a operações rápidas de arquivos "semi-temporários".
Alguma teoria
Em geral, uma chamada do sistema que acessa 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 fica a critério exclusivo da implementação do sistema de arquivos. Normalmente, algo semelhante à seguinte abordagem é usada (este exemplo simples é do driver FAT do linux):
Se o sistema de arquivos estiver montado no modo "sincronização", todas as alterações serão colocadas no disco imediatamente (neste caso, por meio de fat_sync_inode ()). Caso contrário, o bloco será marcado como "sujo" e permanecerá no cache de memória até ser liberado em alguma oportunidade razoável.
Portanto, é impossível prever o comportamento do sistema em relação aos arquivos transitórios sem considerar as opções de montagem do sistema de arquivos e inspecionar o código fonte de sua implementação (isso, é claro, se aplica principalmente a todos os tipos de sistemas de arquivos exóticos encontrados principalmente no espaço incorporado) .
fonte
sync
opção Eu nunca faria isso.