Force o dispositivo de bloqueio (NBD) para ignorar o cache do buffer

2

Gostaria de saber se existe uma maneira de forçar um dispositivo de bloco a ignorar o cache de buffer do Linux (ou seja, IO direto) e passar as solicitações diretamente para a camada subjacente. Eu sei que se pode abrir um arquivo usando o sinalizador O_DIRECT para conseguir isso, mas o meu programa não é o usuário do dispositivo de bloco, um sistema de arquivos é. E até agora, não tive a menor chance de informar vários FSs para usar IO direto.

Em resumo, eu quero a funcionalidade do dispositivo bruto sem usar dispositivos brutos (já que eles são depreciado na minha distro, o Fedora).

Se isso for de alguma importância, meu dispositivo de bloco é um dispositivo de bloqueio de rede. Qualquer ajuda seria apreciada.

    
por Mansour 20.09.2011 / 14:15

2 respostas

1

Você pode conseguir isso montando com a opção sync.

Da página mount(8) -man:

   sync   All I/O to the filesystem should be done synchronously. In  case
          of  media  with  limited number of write cycles (e.g. some flash
          drives) "sync" may cause life-cycle shortening.
    
por 06.11.2011 / 15:20
1

Eu não acho que é possível ter E / S direta sem usar dispositivos O_DIRECT ou brutos. Usar a opção sync on mount não irá ignorar o cache de buffer.

Porque você não pode configurá-lo no sistema de arquivos, você teria que modificar seu programa para usar O_DIRECT ou mmap () e madvise () para obter um comportamento semelhante.

"Eu sei que um pode abrir um arquivo usando o sinalizador O_DIRECT para conseguir isso, mas o meu programa não é o usuário do dispositivo de bloco, um sistema de arquivos é."

Não se preocupe com o fato de o seu programa não ser o usuário, O_DIRECT funciona para o open () que é o arquivo baseado de qualquer maneira.

    
por 15.11.2011 / 04:30