Я управляю vagrant
настройка для наших разработчиков, работающих под OSX, для управления системами VirtualBox для разработки.
Чтобы поддержать inotify
внутри машины Linux мы избегаем обычного метода совместного использования каталогов с VirtualBox: вместо этого машина Virtualbox предоставляет общий ресурс NFS, который смонтирован в OSX.
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
Второй тест:
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
Цитата из документации, доступной по адресу: https://git-scm.com/docs/git-config#git-config-corepreloadIndex
Это может ускорить такие операции, как git diff и git status, особенно в файловых системах, таких как NFS, которые имеют слабую семантику кэширования и, следовательно, относительно высокие задержки ввода-вывода. Если этот параметр включен, Git будет выполнять сравнение индекса с данными файловой системы параллельно, что позволяет перекрывать операции ввода-вывода. По умолчанию true.
Эта статья содержит несколько полезных советов по настройке производительности NFS.
В частности, использование nfsstat -rc
чтобы проверить, сколько было повторных попыток передачи. Если повторных попыток слишком много, значит, nfsd
У демона закончились потоки для обслуживания запросов клиентов, и вам необходимо увеличить количество доступных потоков.
Также убедитесь, что ваш экземпляр VirtualBox не имеет тонкой подготовки; хранилище с тонким предоставлением на VirtualBox - это существенный снижение производительности при записи.
В другом ответе уже упоминается проверка статистики NFS.
Возможно, стоит попробовать разные (виртуальные) конфигурации nic для VirtualBox vm - разные виртуальные наборы микросхем и режимы (мостовой режим вместо nat).
Кроме того, если использовался NFSv4, возможно, стоит попробовать NFSv3. Эти версии очень разные, и это может существенно повлиять на производительность.