Qual é a diferença entre IO direto (“losetup --direct-io”) e “mount -o sync” para dispositivos de loop?

0

Eu entendo que sem o uso de nenhum sinalizador, há dois caches envolvidos com dispositivos de loop. Uma vez um cache de páginas ao gravar no sistema de arquivos dentro do dispositivo de loop e, novamente, no cache de páginas ao gravar no sistema de arquivos do arquivo subjacente. Isso está correto?

A documentação da IO direta diz

--direct-io[=on|off] Enable or disable direct I/O for the backing file. The optional argument can be either on or off. If the argument is omitted, it defaults to on.

Isso significa que, com essa opção, há apenas um único cache, ou seja, o cache do sistema de arquivos do arquivo subjacente?

A documentação de -o sync diz

-o sync All I/O to the filesystem should be done synchronously. In the case of media with a limited number of write cycles (e.g. some flash drives), sync may cause life-cycle shortening.

Como no passado tive sérios problemas de desempenho com sync filesystems em montagens de loop e, com base no aviso sobre encurtamento do ciclo de vida, considero que não há mais cache, nem mesmo para o arquivo subjacente . Os dados são gravados diretamente no hardware.

Isso está correto, ou as coisas são mais complicadas?

    
por Johannes Schaub - litb 14.10.2018 / 00:08

1 resposta

0

Isenção de responsabilidade: isso pode não ser 100% exato. É o meu entendimento.

Em geral, ao abrir um arquivo, você pode ter O_SYNC ou O_DIRECT.

Sincronização significa que os dados são sincronizados no disco após cada gravação. Isso provavelmente significa: Copie do espaço de usuário para o espaço do kernel e, em seguida, execute a sincronização nos fs que, em última análise, executam algum tipo de sincronização nos discos após a sincronização até o fim.

Direct-io significa que os dados são gravados diretamente no disco, ignorando buffers internos quando possível.

Diferenças:

  • O cache ainda é usado com sincronização e pode acelerar as leituras. Também requer cópias de memória adicionais
  • A sincronização quase certamente resultará em algum tipo de sincronização de disco, o que significa que os dados de outras partições também serão sincronizados (porque você pode ter montado apenas uma partição com "sync" mas ter outras sem "sync")
  • Acredito que o direct-io não faz auto-sincronização, o que significa que (a) os dados de outras partições não são sincronizados e (b) que o cache interno da unidade não é liberado
  • Algumas outras coisas gostam de usar múltiplos de 512 bytes

Observação: em uma configuração mais complicada, em que você tem camadas sobre camadas (por exemplo, discos rígidos - > software raid - > criptografia - > lvm - > filesystem), as sincronizações percorrem todo o caminho até o hardware.

Montar um dispositivo de loopback com direct-io significaria que:

  • Caches não são usados para o dispositivo de loopback (mas são usados para o restante da pilha)
  • Os dados não são implicitamente sincronizados com o disco, então você terá um melhor desempenho
  • Você não desperdiça memória
por 14.10.2018 / 00:39