A operação NFS COMMIT não está sendo chamada apesar do fsync estar sendo usado

2

Eu tenho feito alguns testes elaborados para determinar se o nosso servidor NetApp NFS (protocolo v3) no modo async respeita adequadamente a solicitação fsync do cliente. Eu encontrei uma barreira quando descobri que o Linux (RHEL 6, kernel 2.6.32-431.5.1) nunca emite um COMMIT op !!! Esse fato foi descoberto pelo uso da ferramenta nfsstat e da ferramenta nfstrace . Não é um único COMMIT.

Isso parece violar a semântica do NFS :

Version 3 clients use COMMIT operations when flushing safe asynchronous writes to the server during a close(2) or fsync(2) system call, or when encountering memory pressure.

O que está acontecendo?

Notas:

O ponto de montagem é montado com a operação assíncrona (que é o padrão).

Para gerar solicitações fsync, usei a ferramenta test_fsync do Postgresql. Ele usa uma variedade de maneiras de emitir sincronizações e relatórios sobre os benchmarks para que você possa determinar qual é o melhor para você em seu sistema.

Diferenças de tempo com test_fsync indicam que a função fsync demora mais para executar em async montagens do que sync montagens, presumivelmente porque com sync montagens, os dados estão sendo liberados o tempo todo e é somente quando fsync é chamado de que os dados são liberados. No entanto, as diferenças de tempo são bastante erráticas e eu poderia estar encontrando transitoriedade de desempenho.

Montar o servidor com a opção sync não alterou nada.

UPDATE: O enredo engrossa.

No Ubuntu / Mint 17, kernel Linux 3.13.0, (nfs versão: 1.2.8), eu configurei um ponto de montagem de loopback, com opções de sincronização e assíncrono e executei novamente os testes. As diferenças de velocidade definitivamente mostram uma diferença entre sync e async. nfsstat mostra que, após cada execução de pg_fsync_test , exatamente 1 COMMIT ocorreu.

W.T.F.

    
por Otheus 23.02.2016 / 23:05

1 resposta

0

Um colega no trabalho descobriu uma possível resposta:

the Netapp technical report tr-3183 (Using Red Hat Client with NetApp Storage over NFS) says:

Data ONTAP's NFS server promotes all write requests to FILE_SYNC, whether the client requests UNSTABLE, DATA_SYNC or FILE_SYNC writes. Thus the client never has to send a COMMIT request when it is writing to NetApp storage because all the writes are logged in the NVRAM and the clients get an acknowledgement for the writes right away. Hence the writes with NetApp storage are asynchronous in nature and are much faster.

    
por 24.02.2016 / 15:13

Tags