Como obter desempenho decente do NFS para cargas de trabalho como o git?

8

Eu gerencio uma configuração de vagrant para nossos desenvolvedores que executam o OSX para gerenciar sistemas VirtualBox para desenvolvimento.

Para suportar inotify dentro da máquina linux, evitamos o método usual de compartilhar diretórios com o VirtualBox: em vez disso, a máquina Virtualbox expõe um compartilhamento NFS, que é montado no OSX.

Git (e ferramentas relacionadas como sourcetree) são executados no OSX, no diretório compartilhado. O desempenho disso é extremamente ruim: geralmente leva até 5 segundos para executar git status . Clonar um pequeno repositório na unidade NFS montada pode levar alguns minutos (5-10 segundos em uma unidade local).

Obviamente, o desempenho do NFS será pior do que escrever diretamente para um SSD local, mas o NFS está apenas executando uma interface de rede virtual privada com o Virtualbox.

Eu corri alguns benchmarks. O primeiro:

dd if=/dev/zero of=test bs=16 count=16384

Cada resultado é baseado em 100 amostras.

# local drive
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
0.990   1.000   1.020   1.021   1.030   1.130

# on the shared NFS drive
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
6.000   6.278   6.390   6.482   6.570   7.630

# inside the VirtualBox instance
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
0.3600  0.4800  0.5150  0.5552  0.5400  1.4500

O segundo benchmark:

ioping -c 500

local avg: 6 microseconds
local IOPS: 65.5 k

NFS Latency avg: 703 microseconds
NFS OPS: 1.4 k

Claramente, alguma latência é inevitável, mas isso é ruim o bastante para dificultar bastante algumas tarefas simples.

O proprietário do volume está executando o Ubuntu 12.10 (Quantal), com configurações padrão. O sistema que monta o volume está executando o OSX Mavericks.

No momento, a conexão nfsd principal está sendo executada pelo UDP, o que parece ideal em uma conexão virtual. Não tenho certeza se statsd e lockd estão sendo executados sobre TCP e UDP.

Eu tentei montar com o sinal async e com rwsize aumentado, e isso fez pouca diferença.

Quais oportunidades existem para melhorar seriamente o desempenho do NFS neste ambiente?

    
por Cera 10.03.2014 / 03:42

3 respostas

5

Este artigo contém algumas dicas úteis para ajustar o desempenho do NFS.

Particularmente, o uso de nfsstat -rc para verificar quantas tentativas de retransmissão estavam ocorrendo. Se houver muitas tentativas, significa que o daemon nfsd ficou sem threads para atender aos pedidos dos clientes e você precisa aumentar o número de threads disponíveis.

Além disso, certifique-se de que sua instância do VirtualBox não seja thinly provisioned; O armazenamento thin provisioned no VirtualBox é um hit de desempenho significativo quando as gravações acontecem.

    
por 10.03.2014 / 04:42
5

Tente usar essa configuração do Git, que faz uma enorme diferença de desempenho em compartilhamentos NFS:

git config core.preloadindex true
    
por 21.05.2015 / 10:56
0

Outra resposta já menciona a verificação das estatísticas do NFS.

Pode valer a pena tentar diferentes configurações (virtual) nic para o VirtualBox vm - diferentes conjuntos de chips virtuais e modos (modo de ponte em vez de nat).

Além disso, se o NFSv4 foi usado, pode valer a pena tentar o NFSv3. Essas versões são muito diferentes e isso pode fazer uma diferença significativa no desempenho.

    
por 04.08.2015 / 18:40