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

8

Eu gerencio uma vagrantconfiguração para nossos desenvolvedores que executam o OSX para gerenciar os sistemas VirtualBox para desenvolvimento.

Para suportar inotifydentro 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, 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 ser executado git status. A clonagem de um pequeno repositório na unidade NFS montada pode levar alguns minutos (5 a 10 segundos em uma unidade local).

Obviamente, o desempenho do NFS será pior do que gravar diretamente em um SSD local, mas o NFS está rodando em 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

A segunda referência:

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 suficiente para tornar algumas tarefas simples bastante dolorosas.

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 principal conexão nfsd está sendo executada em UDP, o que parece ideal em uma conexão virtual. Não tenho certeza se statsde lockdestão executando sobre TCP e UDP.

Tentei montar com a asyncbandeira, e com rwsizereforço, e fez pouca diferença.

Que oportunidades existem para melhorar seriamente o desempenho do NFS nesse ambiente?

Cera
fonte
Tal como está, o problema não foi resolvido, mas o reduzimos substancialmente (melhorias de até 15x) usando uma interface de rede Virtualbox diferente: em Am79C973vez de virtio. A lição aqui é ter analisado mais de perto o que os sistemas estavam fazendo: até certo ponto, o gargalo parece ser o desempenho da rede virtual.
Cera3 /
Eu tenho um problema semelhante. A execução git statusda máquina convidada leva cerca de 5 segundos. Na máquina host que é OSX, é silencioso rapidamente. Minha configuração é o diretório NFS mais recente, vagabundo, compartilhado. Como você mudou a interface, tentei fazê-lo, mas ainda não percebi isso. Além disso, isso se tornou mais perceptível após alguma atualização. Eu não tive esse problema no começo
Ali

Respostas:

6

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

git config core.preloadindex true
heyyo
fonte
Por que isso faz diferença no desempenho?
Curinga
Você pode ler mais sobre essa propriedade aqui: git-scm.com/docs/git-config#git-config-corepreloadIndex
heyyo
5

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

Particularmente o uso de nfsstat -rcpara verificar quantas tentativas de retransmissão estavam acontecendo. Se houver muitas tentativas, isso significa que o nfsddaemon ficou sem threads para atender às solicitações dos clientes e você precisará aumentar o número de threads disponíveis.

Além disso, assegure-se de que sua instância do VirtualBox não seja provisionada com pouca espessura; O armazenamento thin provisioned no VirtualBox é um impacto significativo no desempenho quando ocorrem gravações.

pepoluan
fonte
Obrigado pela sua resposta. A coisa dinâmica versus volume fixo é interessante - fiz algumas leituras que indicavam que a diferença de desempenho era um mito, mas se sua experiência for de ajuda, pode ser uma tentativa.
Cera
Depende muito do armazenamento físico subjacente ... uma partição vazia com grande quantidade de espaço livre? O impacto no desempenho pode ser menos perceptível. Uma partição com muitos objetos já? O VBox terá que esperar enquanto o sistema operacional "procura" blocos de espaço vazio para atender à solicitação de crescimento.
pepoluan
@pepoluan - foi isso com uma unidade magnética, ou SSD?
Analytik
@analytik unidade magnética. Com o SSD, acho que a fragmentação nunca será um problema, e você pode ir com segurança com o armazenamento provisionado thin. Caramba, mesmo se houver um impacto no desempenho, considerando que os US $ / GB de SSD ainda são muito maiores do que os da unidade magnética, ficarei com pouca provisão.
pepoluan
0

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

Pode valer a pena tentar configurações diferentes (virtuais) de nic para o VirtualBox vm - diferentes chipsets e modos virtuais (modo 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.

basic6
fonte