Как получить приличную производительность NFS для таких рабочих нагрузок, как git?
Я управляю 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 в этой среде?
3 ответа
Попробуйте использовать этот параметр Git, который сильно влияет на производительность в общих ресурсах NFS:
git config core.preloadindex true
Эта статья содержит несколько полезных советов по настройке производительности NFS.
В частности, использование nfsstat -rc
чтобы проверить, сколько "повторных попыток передачи" происходило. Если повторных попыток слишком много, это означает, что nfsd
у демона закончились потоки для обслуживания запросов клиентов, и вам нужно увеличить количество доступных потоков.
Кроме того, убедитесь, что ваш экземпляр VirtualBox не имеет тонкого обеспечения; Слабое выделенное хранилище в VirtualBox значительно снижает производительность при записи.
В другом ответе уже упоминается проверка статистики NFS.
Возможно, стоит попробовать разные (виртуальные) ник конфигурации для VirtualBox vm - разные виртуальные чипсеты и режимы (мостовой режим вместо nat).
Кроме того, если используется NFSv4, возможно, стоит попробовать NFSv3. Эти версии очень разные, и это может существенно повлиять на производительность.