我pipe理运行OSX的开发vagrant设置来pipe理VirtualBox系统进行开发。
为了支持linux机器内部的inotify ,我们避开了使用VirtualBox共享目录的常用方法:相反,Virtualbox机器公开了一个安装在OSX中的NFS共享。
Git(和相关的工具,如sourcetree)在OSX中的共享目录中运行。 这种性能非常差:运行git status通常需要5秒钟的时间。 将小型资源库克隆到已安装的NFS驱动器中可能需要几分钟的时间(本地驱动器需要5-10秒)。
很明显,NFS的性能会比直接写入本地SSD的性能要差,但是NFS只是通过Virtualbox的虚拟专用networking接口运行。
我跑了几个基准。 首先:
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
第二个基准:
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的性能?
本文包含一些调整NFS性能的有用提示。
特别是使用nfsstat -rc来检查发生了多less次“重新传输重试”。 如果重试次数过多,则意味着nfsd守护程序为了服务客户端请求而耗尽线程,并且需要增加可用线程的数量。
另外,确保您的VirtualBox实例不是精简configuration; 在VirtualBox上精简configuration的存储在写入时会产生显着的性能影响。
尝试使用这个Git设置,这会在NFS共享上带来巨大的性能差异:
git config core.preloadindex true
另一个答案已经提到检查NFS统计信息。
可能值得尝试VirtualBox vm的不同(虚拟)nicconfiguration – 不同的虚拟芯片组和模式(桥接模式而不是nat)。
另外,如果使用NFSv4,则可能值得尝试使用NFSv3。 这些版本是非常不同的,这可能会在性能上有重大的不同。