Come ottenere prestazioni NFS decenti per carichi di lavoro come git?


8

Gestisco una vagrantconfigurazione per i nostri sviluppatori che eseguono OSX per gestire i sistemi VirtualBox per lo sviluppo.

Per supportare inotifyall'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 statsde lockdfunzionino su TCP e UDP.

Ho provato a montare con la asyncbandiera, e con rwsizepotenziato, e ha fatto poca differenza.

Quali opportunità ci sono per migliorare seriamente le prestazioni di NFS in questo ambiente?


Allo stato attuale, il problema non è stato risolto, ma lo abbiamo mitigato sostanzialmente (miglioramenti fino a 15x) utilizzando una diversa interfaccia di rete Virtualbox: Am79C973anziché 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.
Cera,

Ho un problema simile. L'esecuzione git statusdal 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
Ali,

Risposte:



5

Questo articolo contiene alcuni suggerimenti utili per ottimizzare le prestazioni NFS.

In particolare l'uso di nfsstat -rcper verificare quanti "tentativi di ritrasmissione" si stavano verificando. Se ci sono troppi tentativi, ciò significa che il nfsddaemon ha esaurito i thread per soddisfare le richieste dei clienti e che è necessario aumentare il numero di thread disponibili.

Inoltre, assicurarsi che l'istanza di VirtualBox non abbia un thin provisioning; l'archiviazione thin provisioning su VirtualBox ha un impatto significativo sulle prestazioni in caso di scrittura.


Grazie per la risposta. La cosa dinamica rispetto al volume fisso è interessante: ho fatto alcune letture che indicavano che la differenza di prestazioni era un mito, anche se la tua esperienza è che ha aiutato, potrebbe essere una prova.
Cera,

Dipende molto dalla memoria fisica sottostante ... una partizione vuota con una gran quantità di spazio libero? Il colpo di performance potrebbe essere meno evidente. Una partizione con molti oggetti già? VBox dovrà attendere che il sistema operativo "cerchi" i blocchi di spazio vuoto per soddisfare la richiesta di crescita.
pepoluan,

@pepoluan: era con un drive magnetico o SSD?
analytik

@analytik drive magnetico. Con SSD, penso che la frammentazione non sarà mai un problema e puoi tranquillamente utilizzare lo storage thin provisioning. Cavolo, anche se c'è un calo delle prestazioni, considerando che il $ / GB di SSD è ancora molto più alto di quello del drive magnetico, andrò a thin provisioning.
pepoluan,

0

Un'altra risposta menziona già il controllo delle statistiche NFS.

Potrebbe valere la pena provare diverse configurazioni nic (virtuali) per VirtualBox VM - diversi chipset e modalità virtuali (modalità con bridge anziché nat).

Inoltre, se si utilizzava NFSv4, potrebbe valere la pena provare NFSv3. Queste versioni sono molto diverse e questo può fare una differenza significativa nelle prestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.