Com que frequência o fsync é chamado no uso diário?

2

Digamos que eu passe algum tempo como um usuário interagindo com um sistema de arquivos, usando comandos como cp , mv , mkdir e rm . Nenhum desses comandos chama fsync na operação normal.

Um sistema de arquivos pode ser executado indefinidamente sem o fsyncing? Isso coloca meus dados em risco? Devo estar tentando determinar quanto tempo passou desde o último fsync?

    
por jl6 07.08.2017 / 09:41

1 resposta

2

A resposta curta é: sim, sim, não.

Sim, um sistema de arquivos pode ser executado indefinidamente sem aplicativos chamando fsync : os sistemas de arquivos não contam com isso para garantir que os dados (eventualmente) sejam armazenados no disco; há outros mecanismos em vigor. Não ter fsync chamadas coloca seus dados em risco: por exemplo, se você copiar um arquivo e excluir o original, seu sistema perderá energia, há uma pequena chance de que a exclusão o faça no disco, mas a cópia estar incompleto.

Normalmente, há configurações que podem ser alteradas para controlar a velocidade com que o sistema operacional tenta armazenar dados no disco; Há também o Big Stick, sync , que faz com que todos os dados pendentes sejam gravados. (Observe que, em todos os casos, o sistema operacional só pode garantir que os dados cheguem ao controlador de disco e talvez solicitar que os discos esvaziem seus buffers - não há garantia absoluta de que os dados estejam realmente armazenados no disco.)

No Linux, as configurações que você pode ajustar estão em /proc/sys/vm ; a documentação correspondente é sysctl/vm.txt - procure por dirty_ . As várias configurações permitem que você especifique quantos dados podem estar aguardando para serem gravados ou por quanto tempo antes que o sistema operacional comece a gravá-los no disco. Existem dois mecanismos que podem entrar aqui: há um thread em segundo plano que grava dados pendentes no disco ( dirty_background_... ) e quando os processos começam a produzir muitos dados, o sistema operacional faz com que suas gravações sejam liberadas no disco (introduzindo efetivamente algo como fsync ). A razão pela qual existem dois mecanismos é que o sistema operacional tenta preservar um equilíbrio entre o desempenho de E / S e o desempenho de processamento: desde que os processos em execução não gravem dados muito rapidamente, o segmento em segundo plano cuida disso; mas uma vez que eles começam a escrever dados demais para os discos acompanharem, eles ficam lentos, o que ajuda o sistema a recuperar os dados pendentes de gravação e evita que muito mais dados sejam gravados.

Se você estiver preocupado com seus dados, não tente conferir se fsync foi chamado, basta executar sync .

(Ignore /proc/sys/vm/dirtytime_expire_seconds , isso é algo totalmente diferente.)

    
por 07.08.2017 / 11:09