Muitos arquivos temporários no sistema de arquivos registrados?

3

Escrevendo e excluindo muitos arquivos rapidamente

Vou escrever muitos arquivos temporários por segundo, durante um período prolongado. Cada um será deletado após alguns milissegundos.

Digamos que temos um software de processamento de imagens, que funciona em quadros parciais de uma câmera rápida, cerca de 2000 por segundo. Cada um deles é gravado em um arquivo, em seguida, o arquivo é alterado um pouco, lido novamente e excluído no mesmo par de milissegundos.

Atualmente, ele é executado em um sistema de arquivos tmpfs , mas vamos supor que não.
E não, eu não posso "apenas corrigir isso fazendo isso" , é necessário para alguma integração legada.

Como o sistema de arquivos está lidando?

Eu gostaria de entender como isso está interagindo com as opções do sistema de arquivos. Especificamente, eu não consigo entender como um diário de sistema de arquivos interage com isso.

Como uma idéia ingênua, pode-se esperar que os dados nunca toquem no disco, e até mesmo os metadados não tocam no disco; Depois de criar um arquivo e excluí-lo, os dados são os mesmos, certo? E depois de escrever e apagar o nome no diretório, o diretório também é o mesmo, certo?

Efeitos surpreendentes

Não, errado.

Um diretório pode representar os mesmos nomes de arquivos de várias maneiras, como reutilizar um local para armazenar um novo nome de arquivo ou outro local.
Isso significa que, quando houver operações de gravação em um bloco de disco, ele pode ter sido alterado sem alterações no nível do sistema de arquivos, portanto, ele precisa ser gravado no disco.

Mas posso ter certeza de que não está escrito uma vez para cada uma das quatro operações? E a revista? Meus dados temporários acabarão no diário? Posso evitar isso?

Como uma pergunta: o que devo cuidar ou ter em mente ao fazer isso?

    
por Volker Siegel 16.10.2014 / 12:48

1 resposta

1

Eu posso te dizer qual é a teoria, mas não a experiência pessoal. Eu li que os arquivos são empurrados da memória para o disco apenas a cada poucos segundos, e os arquivos que são removidos com rapidez suficiente nunca acabam no disco. Nem mesmo no diário.

Não tenho certeza se um arquivo precisa existir por 5 segundos completos para ser enviado ou existir no momento do checkpoint, o que acontece a cada 5 segundos. Provavelmente mais tarde. Se assim for, alguns arquivos serão sugados para o disco. Isso acontecerá regularmente por breves momentos.

Existem algumas opções de montagem que eu gostaria de sugerir investigar. Você poderia tornar esses momentos de verificação arbitrariamente raros aumentando o intervalo, mas eles ainda acontecerão. A alocação adiada também tem um efeito colateral de manter os dados enviados para o disco por motivos que não sou capaz de explicar. Não me lembro onde li sobre isso.

  • commit = nrsec (Sincronize todos os dados e metadados a cada nrsec segundos. O valor padrão é 5 segundos. Zero significa padrão.) em Ext3
  • delalloc (Adiando a alocação de blocos até o tempo de gravação) no Ext4

Solução sugerida: use um sistema de arquivos na memória. Desta forma, você tem certeza de que nada será finalizado no disco. Tmpfs ou ramfs, existem algumas diferenças, como se pode trocar, crescer além de uma capacidade especificada. Eu sei que isso é basicamente o que você está usando agora. Não precisa ser / tmp, você pode criar um novo sistema de arquivos desse tipo em qualquer diretório.

link

    
por 27.10.2015 / 06:48