Gestisco una vagrant
configurazione per i nostri sviluppatori che eseguono OSX per gestire i sistemi VirtualBox per lo sviluppo.
Per supportare inotify
all'interno della macchina Linux, evitiamo il solito metodo di condivisione delle directory con VirtualBox: invece, la macchina Virtualbox espone una condivisione NFS, che è montata in OSX.
Git (e strumenti correlati come sourcetree) vengono eseguiti in OSX, nella directory condivisa. Le prestazioni sono estremamente scarse: spesso sono necessari fino a 5 secondi per l'esecuzione git status
. La clonazione di un piccolo repository nell'unità NFS montata può richiedere un paio di minuti (5-10 secondi su un'unità locale).
Ovviamente le prestazioni di NFS saranno peggiori della scrittura diretta su un SSD locale, ma NFS è in esecuzione su un'interfaccia di rete privata virtuale con Virtualbox.
Ho eseguito un paio di benchmark. Il primo:
dd if=/dev/zero of=test bs=16 count=16384
Ogni risultato si basa su 100 campioni.
# 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
Il secondo benchmark:
ioping -c 500
local avg: 6 microseconds
local IOPS: 65.5 k
NFS Latency avg: 703 microseconds
NFS OPS: 1.4 k
Chiaramente una certa latenza è inevitabile, ma questo è abbastanza grave da rendere alcuni compiti semplici abbastanza dolorosi.
Il proprietario del volume esegue Ubuntu 12.10 (Quantal), con impostazioni predefinite. Il sistema che monta il volume esegue OSX Mavericks.
Al momento la connessione nfsd principale è in esecuzione su UDP, il che sembra ideale su una connessione virtuale. Non sono sicuro se statsd
e lockd
funzionino su TCP e UDP.
Ho provato a montare con la async
bandiera, e con rwsize
potenziato, e ha fatto poca differenza.
Quali opportunità ci sono per migliorare seriamente le prestazioni di NFS in questo ambiente?
git status
dal computer guest richiede circa 5 secondi. Sul computer host che è OSX, è veloce veloce. La mia configurazione è l'ultima directory condivisa NFS vagrant, vb. Come hai cambiato l'interfaccia, ho provato a farlo ma non l'ho capito. Inoltre, questo è diventato più evidente dopo alcuni aggiornamenti. Non avevo questo problema all'inizio
Am79C973
anzichévirtio
. La lezione qui è quella di aver esaminato più da vicino cosa stavano facendo i sistemi: ad un certo punto, il collo di bottiglia sembra essere la prestazione della rete virtuale.