Por que a opção de montagem NFS “nocto” no Linux não impede o flush-on-close?

4

Eu tenho aprendido sobre a política close-to-open do NFS, que faz com que cada arquivo a ser liberado para o servidor enquanto ele é fechado, para garantir a consistência clientes. (Veja link .) Isso leva a um grande impacto no desempenho ao tentar gravar muitos arquivos pequenos.

Eu sei sobre a opção de exportação "async", obviamente, mas há também um "nocto" opção de montagem do cliente, que supostamente desabilita o mecanismo close-to-open para esse cliente. Tanto quanto eu posso dizer, isso é suposto para parar o cliente de liberar o arquivo quando ele fecha (além de não se incomodar em verificar consistência do cache quando ele é aberto). No entanto, isso parece não ter efeito: o cliente ainda está liberando o arquivo para o servidor no final, causando enorme aguarde-io.

Alguém tem alguma idéia de porque "nocto" não tem o efeito que eu esperava seria? A opção "async" funciona como esperado, mas é mais importante para mim que o cache do cliente está correto neste caso, e isso só me incomoda.

Exemplo: um conjunto de nós sem disco compartilha uma raiz remota, que ocasionalmente é atualizada de um dos nós. Não é crítico que cada arquivo seja liberado imediatamente após ser fechado, como nenhum outro nó está tentando gravar no mesmo arquivo. No entanto, é mais crítico que, se o servidor travar durante a atualização de um conjunto de pacotes, o cliente esteja ciente de quais dados ainda não foram gravados no disco do servidor, para que ele possa tentar novamente assim que o servidor estiver ativo novamente. Usando a opção "async", esse cenário pode resultar em perda de dados (porque o servidor está no cliente sobre os dados serem descarregados para o disco), enquanto desabilitar o close-to-open (e usar "sync" em vez de "async") em teoria, fornecem o mesmo benefício de desempenho sem a possível perda de dados (porque várias gravações de arquivo seriam armazenadas em buffer e liberadas para o servidor juntas). O servidor e outros clientes teriam uma visão um pouco desatualizada do sistema de arquivos (por alguns segundos). Isso parece razoável para mim.

Para simplificar, o "async" faz o buffer do lado do servidor, o que acelera muito as coisas. O que eu estou esperando é que "nocto" deve fazer o buffer do lado do cliente, com aumentos de velocidade semelhantes, ao custo de algum atraso nos dados que aparecem em outros clientes.

    
por Paul Gideon Dann 10.12.2012 / 16:09

1 resposta

1

Na página do manual nfs (5) :

If the nocto option is specified, the client uses a non-standard heuristic to determine when files on the server have changed.

Using the nocto option may improve performance for read-only mounts, but should be used only if the data on the server changes only occasionally. The DATA AND METADATA COHERENCE section discusses the behavior of this option in more detail.

    
por 24.04.2013 / 21:23