Как получить приличную производительность 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. Эти версии очень разные, и это может существенно повлиять на производительность.

Другие вопросы по тегам