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.