Muitos arquivos transitórios no sistema de arquivos registrado em diário?

Muitos arquivos transitórios no sistema de arquivos registrado em diário?

Gravando e excluindo muitos arquivos rapidamente

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

Digamos que temos um software de processamento de imagem, que funciona em quadros parciais de uma câmera rápida, cerca de 2.000 por segundo. Cada um deles é gravado em um arquivo, então o arquivo é um pouco alterado, lido novamente e excluído, nos mesmos milissegundos.

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

Como está o sistema de arquivos?

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

Como uma ideia ingénua, poder-se-ia esperar que os dados nunca tocassem no disco, e mesmo os metadados não; Depois de criar um arquivo e excluí-lo, os dados são os mesmos, certo? E depois de escrever e deletar o nome no diretório, o diretório também fica o mesmo, certo?

Efeitos surpreendentes

Não, errado.

Um diretório pode representar os mesmos nomes de arquivo de várias maneiras, como reutilizando 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, precisa ser gravado no disco.

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

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

Responder1

Posso dizer qual é a teoria, mas não tenho experiência prática. Eu li que os arquivos são enviados 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 simplesmente existe no momento do checkpoint, o que acontece a cada 5 segundos. Provavelmente último. Nesse caso, alguns arquivos serão sugados para o disco. Isso acontecerá regularmente por breves momentos.

Há poucosopções de montagemque eu sugeriria investigar. Você poderia tornar esses momentos de checkpoint arbitrariamente raros aumentando o intervalo, mas eles ainda acontecerão. Além disso, a alocação diferida tem o efeito colateral de manter os dados enviados para o disco por motivos que não consigo explicar. Não me lembro onde li sobre isso.

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

Solução sugerida:use um sistema de arquivos na memória. Dessa forma, você tem certeza de que nada terminará no disco. Tanto tmpfs quanto ramfs, existem algumas diferenças, como se ele 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.

http://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/

informação relacionada