Как получить приличную производительность NFS для таких рабочих нагрузок, как git?

8

Я управляю 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 в этой среде?

Cera
источник
В настоящее время проблема не была решена, но мы существенно уменьшили ее (улучшения до 15 раз), используя другой сетевой интерфейс Virtualbox: Am79C973вместо virtio. Урок здесь состоит в том, чтобы внимательнее присмотреться к тому, что делали системы: в определенный момент узким местом кажется производительность виртуальной сети.
Cera
У меня похожая проблема. Запуск git statusс гостевой машины занимает около 5 секунд. На хост-машине, которая является OSX, тихо быстро. Моя установка - последняя версия vagrant, vb, общий каталог NFS. Как вы меняли интерфейс, я пытался это сделать, но так и не понял. Кроме того, это стало более заметным после некоторого обновления. У меня не было этой проблемы в начале
Али

Ответы:

6

Попробуйте использовать этот параметр Git, который сильно влияет на производительность в общих ресурсах NFS:

git config core.preloadindex true
Эй, ты
источник
Почему это влияет на производительность?
Wildcard
Вы можете прочитать больше об этом свойстве здесь: git-scm.com/docs/git-config#git-config-corepreloadIndex
heyyo
5

Эта статья содержит несколько полезных советов по настройке производительности NFS.

В частности, использование nfsstat -rcдля проверки количества повторных попыток повторной передачи. Если повторных попыток слишком много, это означает, что у nfsdдемона закончились потоки для обслуживания запросов клиентов, и вам нужно увеличить количество доступных потоков.

Кроме того, убедитесь, что ваш экземпляр VirtualBox не имеет тонкого обеспечения; Слабое выделенное хранилище в VirtualBox значительно снижает производительность при записи.

pepoluan
источник
Спасибо за ваш ответ. Интересно, что динамическая и фиксированная громкость интересны - я немного читал, что указывало на то, что разница в производительности была мифом, хотя если вам кажется, что это помогло, то это может быть попыткой.
Cera
Это очень сильно зависит от основного физического хранилища ... пустой раздел с множеством свободного места? Хит производительности может быть менее заметным. Раздел с уже достаточно много объектов? VBox придется подождать, пока ОС "отыщет" блоки пустого пространства, чтобы выполнить запрос на увеличение.
pepoluan
@pepoluan - это было с магнитным приводом или SSD?
аналитик
@analytik магнитный привод. С SSD, я думаю, что фрагментация никогда не будет проблемой, и вы можете спокойно работать с тонким выделенным хранилищем. Черт возьми, даже если производительность снизится, учитывая, что $ / ГБ SSD по-прежнему выше, чем у магнитного накопителя, у меня будет тонкая подготовка.
pepoluan
0

В другом ответе уже упоминается проверка статистики NFS.

Возможно, стоит попробовать разные (виртуальные) ник конфигурации для VirtualBox vm - разные виртуальные чипсеты и режимы (мостовой режим вместо nat).

Кроме того, если используется NFSv4, возможно, стоит попробовать NFSv3. Эти версии очень разные, и это может существенно повлиять на производительность.

basic6
источник