Eu gerencio uma vagrant
configuração para nossos desenvolvedores que executam o OSX para gerenciar os 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, 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 statsd
e lockd
estão executando sobre TCP e UDP.
Tentei montar com a async
bandeira, e com rwsize
reforço, e fez pouca diferença.
Que oportunidades existem para melhorar seriamente o desempenho do NFS nesse ambiente?
git status
da 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
Am79C973
vez devirtio
. 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.