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


Я управляю vagrant для наших разработчиков, работающих под управлением OSX, для управления системами VirtualBox для разработки.

Для поддержки inotify внутри linux-машины мы избегаем обычного способа совместного использования каталогов с 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 в этой среде?


8
2018-03-10 02:42


Источник


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


Ответы:


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

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

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


5
2018-03-10 03:42



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


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

git config core.preloadindex true

5
2018-05-21 08:56



Зачем это делает разницу в производительности? - Wildcard
Вы можете узнать больше об этом свойстве здесь: git-scm.com/docs/git-config#git-config-corepreloadIndex - heyyo


Еще один ответ уже упоминает проверку статистики NFS.

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

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


0
2017-08-04 16:40