OK, aqui está minha resposta.
Relacionado ao link com o kernel 2.6.18 e 2.6.32 como enviado com o RedHat Não é hora de revalidar isso com novos kernels), em um cliente NFS (opções de montagem v3 / tcp / default), quando um está gravando em um arquivo, o kernel também precisa atualizar os timestamps deste arquivo. Enquanto o arquivo está sendo gravado, se outro processo desejar os metadados desse arquivo (como quando faz um stat neste arquivo ou ls -l em seu diretório pai), esse processo de leitura é atrasado pelo kernel até que a gravação seja terminou.
No nível do NFS, vejo que o kernel emitirá a chamada GETATTR somente depois de tudo (não tenho certeza disso, mas nos meus testes até 5GiB, o tempo stat pareceu corresponder ao dd time) o WRITE . Quanto maior a gravação, maior é a espera.
Com um servidor NFS lento ou um servidor com muita RAM, esse atraso pode ser de minutos. Quando o stat(2) é colocado em suspensão, pode-se monitorar /proc/meminfo para NFS_Unstable ou Writeback , o que mostra a quantidade de dados em vôo.
Não sei por que o kernel faz isso, mas pelo menos agora eu entendo o comportamento. Portanto, não há bufferbloat, mas algumas operações são serializadas.