LINUX.ORG.RU

«Низкая» скорость при записи по nfs

 , ,


0

1

Дано. Есть два ноды ESX 5.1 объединенных по гигабиту, на одной поднята виртуалка с client, на второй подняты две виртуалки nfsserver, smbserver, причем последние сидят на одном и том же физическом диске.

Везде используется CentOS 6.7

На nfsserver экспортирована директория

/opt/backups/vm001 cl.i.e.nt(rw,sync,no_wdelay,all_squash,anonuid=500,anongid=502)

На client директория монтируется с опциями по умолчанию

# cat /etc/fstab
nfs.ser.v.er:/opt/backups/vm001      /opt/backups    nfs4    defaults        0 0

# cat /proc/mounts
nfs.ser.v.er:/opt/backups/vm001 /opt/backups nfs4 rw,relatime,vers=4,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=cl.i.e.nt,minorversion=0,local_lock=none,addr=nfs.ser.v.er 0 0

Заходим на nfsserver запускаем тест локальной записи pv /dev/zero >zerofile.bin видим цифры порядка 2,42GB 0:00:23 [99,6MB/s], что так же подтверждается в показаниях atop

Заходим на client в смонтированную директорию запускаем тест nfs чтения pv some_file_from_nfs >/dev/null видим цифры порядка 1,9GB 0:00:06 [52,8MB/s], что так же подтверждается в показаниях atop на nfsserver

Теперь выполняем тест записи на nfs с client pv /dev/zero >zerofile.bin видим во первых стандартную «пилу» когда скорость заипись постоянно прыгает от нормальных цифр до килобайт 1,37GB 0:00:26 [2,19MB/s] , а во вторых atop на nfsserver показывает что запись идет в коридоре 13MB/s - 17MB/s, выше 18MB/s практически не поднимаясь.

Для доп. проверки цепляем на client директорию с smbserver и повторяем эксперимент. Получаем 1,45GB 0:00:18 [56,7MB/s] и анологичные показатели записи в atop.

Опцию no_wdelay, которую как правило применяю для сглаживания «пилы», отключал но результат не изменился.

Резонный вопрос где могла порытся собака и куда смотреть ?

★★★
Ответ на: комментарий от mky

В начале помогает, но в результате получаю еще более жесткую «пилу», и на 8-м Гб опять 16-17Мб/c

Плюс, мне малость неуютно от мысли что бэкап пишется с async.

TEX ★★★
() автор топика

Такое ощущение что протокол по какой то причине работает в режиме совместимости в режиме nfs 2 ,к сожелению как отлаживать nfs не догадываюсь .

maximnik0 ★★
()
Ответ на: комментарий от int13h

Уменьшил на клиенте вдвое, стало только хуже. Коридор теперь где то в райное 10Мб/с

TEX ★★★
() автор топика
Ответ на: комментарий от TEX

и на 8-м Гб опять 16-17Мб/c

А в среднем сколько?

что бэкап пишется с async

Он же не БД, зачем его sync писать.

mky ★★★★★
()
Ответ на: комментарий от mky

А в среднем сколько?

В среднем коридор 14-16, на бэкапе в 100Гб показывает среднее 12

Он же не БД, зачем его sync писать.

Кто он ? Бэкап ? Бэкап как раз бэкап БД. Хотя лично мне отказ от sync для любого бэкапа кажется какой то плохой шуткой.

Для меня бэкап - это долговременная и в первую очередь надежная копия.

TEX ★★★
() автор топика
Ответ на: комментарий от mky

Зацепил еще одну шару с вообще третьего узла, скорость по atop 50-60Мб, естественно с sync. Так что не думаю что сабака в нем.

TEX ★★★
() автор топика
Ответ на: комментарий от TEX

А по самбе вы 100 Гбайт пробовали копировать? Или хотя бы 10 Гбайт, если без sync по NFS получается скопировать быстро 8 Гбайт. Ведь samba и pv в ваших примерах пишут без sync и относительно мало, может запись в кеш в ОЗУ попадает.

Надёжность бэкапа это какая-нибудь md5-сумма, проверяемая по окончании копирования. И повторное копирование, или оповещение админа, или ещё что, если контрольная сумма не совпала.

mky ★★★★★
()
Ответ на: комментарий от mky

А по самбе вы 100 Гбайт пробовали копировать?

Вот сегодня с утра надоело, поставли samba прямо на nfsserver расшарил ту же директорию.

«Пила» крайне маленькая, коридор записи по atop практически не опускается ниже 50-ти

DSK |          sda  | busy    104% | read       1  | write    231 |  MBr/s   0.00 | MBw/s  57.38 |  avio 8.62 ms

На текущий момент уже 30ка залилась 31,8GB 0:10:41 [62,2MB/s]

Ведь samba и pv в ваших примерах пишут без sync и относительно мало, может запись в кеш в ОЗУ попадает.

Эм.. с чего бы это samba пишет без sync, всегда считал что с ним ? Опять же согласно man exports.

 sync   Reply to requests only after the changes have been  committed  to  stable  storage  (see
              async above).

              In  releases  of  nfs-utils up to and including 1.0.0, the async option was the default.
              In all releases after 1.0.0, sync is the default, and async must be explicitly requested
              if needed.  To help make system administrators aware of this change, exportfs will issue
              a warning if neither sync nor async is specified.
sync давным давно режим по умолчанию, плюс есть соседние nfs узлы на которых скорость записи себя так не ведет. Мне кажется sync здесь не причем.

TEX ★★★
() автор топика
Ответ на: комментарий от mky

Так ... протупил я с sync по умолчанию. Нужно ж явно указывать async. Пока переключил на него.

Скорость записи вроде выросла, но не нравится мне эта ситуация. Все равно нет понимания почему запись так тупит на этом серваке, ведь на соседних и с sync все нормально.

TEX ★★★
() автор топика
Ответ на: комментарий от TEX

Возможно, что async влияет ещё и потому, что кроме sync он ещё отключает no_wdelay, по умолчанию wdelay включен.

На скорость NFS может влиять что угодно, и тип файловой системы, который шарится по NFS, и настройки tcp-стека /sysctl net.core.(rmem_max|wmem_max|tcp_rmem|tcp_wmem)/ попробуйте их сравнить с тем NFS-сервером, куда закачка идёт нормально.

Можно попробовать включить no_subtree_check, иногда помогает.

Ещё можно посмотреть, что на сервере выдаёт ″nfsstat″, и что на клиенте даёт ″nfsstat -rc″. Если на клиенте после тестовой закачки растёт ″retrans″, возможно, что на сервере нужно больше потоков (демонов) nfsd.

mky ★★★★★
()
Ответ на: комментарий от mky

попробуйте их сравнить с тем NFS-сервером, куда закачка идёт нормально.

Сервера все максимально однотипные. Отличаются в основном объемом памяти, на проблемном 2Гб, что на мой взгляд дофига для nfs.

Сверху проблемный, снизу нормальный

net.core.wmem_max = 124928
net.core.rmem_max = 124928
net.core.wmem_default = 124928
net.core.rmem_default = 124928
net.ipv4.tcp_mem = 177216       236288  354432
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv4.tcp_rmem = 4096        87380   4194304

vs

net.core.wmem_max = 124928
net.core.rmem_max = 124928
net.core.wmem_default = 124928
net.core.rmem_default = 124928
net.ipv4.tcp_mem = 275136       366848  550272
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv4.tcp_rmem = 4096        87380   4194304

Ещё можно посмотреть, что на сервере выдаёт ″nfsstat″, и что на клиенте даёт ″nfsstat -rc″. Если на клиенте после тестовой закачки растёт ″retrans″, возможно, что на сервере нужно больше потоков (демонов) nfsd.

Еще б понять на что там смотреть. retrans не растет, в статистике растет только это

Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
455992     0          0          0          0

Server nfs v4: 
null: 9 0% 
compound: 455984   99%

Server nfs v4 operations: 
op2-future: write 425502   31%
access: getattr 428180   32%
close: putfh 454289   33%

TEX ★★★
() автор топика
Ответ на: комментарий от TEX

Внешне всё нормально. Разве что немного странно, что write 31%, getattr 32%, а putfh 33%. ИМХО, если идёт тестирование исключительно записью больших файлов, то один write() на клиенте превращается в составной NFS-запос getattr+putfh+write, поэтому у всех должно быть 33%.

Чтобы убрать возможное влияние сетевого адаптера, попробуйте смонтировать NFS-шару на сервер (localhost) и посмотреть скорость и попробовать nfs v3, проверив по nfsstat, что стали расти счётчики именно nfs v3 сервера.

Ну ещё из разряда попробовать — смонтировать на сервере /opt/backups/vm001 с опцией ″-o barrier=0″.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.