私は、OSXを実行している開発者がVirtualBoxシステムを開発用に管理するためのvagrant
セットアップを管理しています。
Linuxマシン内でinotify
をサポートするために、VirtualBoxでディレクトリを共有する通常の方法を避けます。代わりに、VirtualboxマシンはOSXにマウントされているNFS共有を公開します。
Git(およびsourcetreeなどの関連ツール)は、OSXの共有ディレクトリで実行されます。これのパフォーマンスは非常に低く、実行するだけで最大5秒かかることがよくありますgit status
。マウントされたNFSドライブに小さなリポジトリを複製するには、数分(ローカルドライブでは5〜10秒)かかります。
明らかに、NFSのパフォーマンスはローカルSSDに直接書き込むよりも劣りますが、NFSはVirtualboxの仮想プライベートネットワークインターフェイス上で実行されているだけです。
いくつかのベンチマークを実行しました。最初:
dd if=/dev/zero of=test bs=16 count=16384
各結果は100サンプルに基づいています。
# 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
2番目のベンチマーク:
ioping -c 500
local avg: 6 microseconds
local IOPS: 65.5 k
NFS Latency avg: 703 microseconds
NFS OPS: 1.4 k
明らかに、ある程度の待ち時間は避けられませんが、これは、いくつかの単純なタスクを非常に苦痛にするほど十分に悪いものです。
ボリュームの所有者は、Ubuntu 12.10(Quantal)をデフォルト設定で実行しています。ボリュームをマウントするシステムはOSX Mavericksを実行しています。
現時点では、メインのnfsd接続はUDPで実行されており、仮想接続よりも理想的と思われます。 statsd
とlockd
がTCPとUDPで実行されているかどうかはわかりません。
async
フラグを使用してマウントし、rwsize
をブーストしてみましたが、ほとんど違いがありませんでした。
この環境でNFSのパフォーマンスを大幅に向上させるには、どのような機会がありますか?
このGit設定を使用してみてください。これにより、NFS共有のパフォーマンスに大きな違いが生じます。
git config core.preloadindex true
この記事 には、NFSパフォーマンスを調整するためのいくつかの役立つヒントが含まれています。
特に、nfsstat -rc
を使用して、発生した「再送信の再試行」の回数を確認します。再試行回数が多すぎる場合は、nfsd
デーモンがスレッドを使い果たしてクライアントの要求にサービスを提供しているため、使用可能なスレッドの数を増やす必要があります。
また、VirtualBoxインスタンスがシンプロビジョニングされていないことを確認してください。 VirtualBoxのシンプロビジョニングストレージは、書き込みが発生したときに重要なパフォーマンスヒットです。
別の回答では、NFS統計のチェックについてすでに言及しています。
VirtualBox vmのさまざまな(仮想)nic構成-さまざまな仮想チップセットとモード(natではなくブリッジモード)を試す価値があるかもしれません。
また、NFSv4を使用した場合は、代わりにNFSv3を試す価値があるかもしれません。これらのバージョンは非常に異なり、これによりパフォーマンスに大きな違いが生じる可能性があります。