O que o sinalizador de montagem 'barreira' significa no Linux?

20

O manual para a opção de montagem 'barreira' é:

barreira = 0 / barreira = 1

Isso desativa / ativa o uso de barreiras de gravação no código jbd.barrier = 0 desativa, barreira = 1 habilita (padrão). Isso também requer uma pilha de E / S que possa suportar barreiras e, se o jbd receber um erro em uma gravação de barreira, desabilitará as barreiras novamente com um aviso. As barreiras de gravação reforçam a ordenação adequada de confirmações de diário no disco, tornando os caches voláteis de gravação em disco seguros para uso, com alguma penalidade de desempenho. Se seus discos tiverem bateria de uma maneira ou de outra, desabilitar as barreiras poderá melhorar o desempenho com segurança.

Mas não sei o que significa a frase " ordenação adequada de diário de disco ".

Suponha ordem normal - diário 1, dados 1; diário 2, dados 2.
Quais dos seguintes resultados de pedidos ocorrerão se eu definir barrier=0?

  1. diário 2, dados 2; diário 1, dados 1;
  2. dados 1, diário 1; dados 2, diário 2.
leafonsword
fonte
git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/… é provavelmente uma leitura que vale a pena.
Håkan Lindqvist
1
Se você ler sobre o registro no diário dos sistemas de arquivos, perceberá que é importante escrever o diário primeiro e depois executá-lo, gravando os dados reais no disco. A barreira garante que o diário seja escrito antes de ser executado. Caso contrário, o diário será inútil.
ctrl-alt-Delor
@richard Ao usar o sinalizador "nobarrier" no BBWC, o disco não pode garantir que o diário seja gravado antes da execução dos dados, essa condição não importa?
leafonsword
Não sei o suficiente para saber se isso importa. Eu pensaria que, na pior das hipóteses, é tão ruim quanto nenhum diário, mas o que eu li não parece tão ruim, mas não consigo discernir as sutilezas. Eu tenho barrier=1, e corre rápido o suficiente para mim. A menos que você esteja fazendo coisas realmente pesadas, eu deixaria. Você tem buffers ram, para que as coisas sejam gravadas quando possível, sem abrandar os aplicativos. E muito pouco atraso na gravação em disco. Se você quiser ver quanto os buffers ram aceleram, adicione sync = 1 ao seu diretório pessoal e tente usar o sistema por um dia ou dois.
ctrl-alt-Delor

Respostas:

15

A maioria dos sistemas de arquivos modernos são sistemas de arquivos com registro em diário, o que significa que eles acompanham as alterações que ainda não foram gravadas no disco em uma estrutura de dados interna chamada de diário. No caso de uma falha, este diário será repetido, para garantir que todas as gravações tenham sido executadas com êxito, evitando a corrupção de arquivos.

Ao gravar os dados no disco, o cache de gravação reordena as gravações para tentar maximizar a taxa de transferência, mas deve garantir que os dados reais do arquivo sejam gravados no disco antes dos metadados, para garantir que, se houver uma falha ocorre que os metadados não estarão desatualizados com os dados.

O problema é que muitos discos têm caches próprios que também podem solicitar novamente as gravações. Alguns sistemas de arquivos assumem que isso acontecerá e forçará o disco a liberar o cache em determinados pontos para evitar isso, e é chamado, write barrierspor exemplo, ext4 e Linux em geral.

Para discos modernos, o sacrifício de desempenho para isso é insignificante, e você não deve desativar as barreiras de gravação, a menos que seja absolutamente necessário.

kyrias
fonte
1

Deste artigo do LWN :

O código do sistema de arquivos deve, antes de gravar o registro de confirmação [journaling], ter certeza absoluta de que todas as informações da transação chegaram ao diário. Apenas fazer as gravações na ordem correta é insuficiente; as unidades contemporâneas mantêm grandes caches internos e reorganizam as operações para obter melhor desempenho. Portanto, o sistema de arquivos deve instruir explicitamente o disco para colocar todos os dados do diário na mídia antes de gravar o registro de confirmação; se o registro de confirmação for gravado primeiro, o diário poderá estar corrompido. O subsistema de E / S de bloco do kernel disponibiliza esse recurso através do uso de barreiras; em essência, uma barreira proíbe a gravação de qualquer bloco após a barreira até que todos os blocos escritos antes da barreira sejam comprometidos com a mídia. Ao usar barreiras,

qinganfan
fonte