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