Настройка стека клиент / сервер NFS

10

У меня есть сервер CentOS 5 VMWare, подключающийся к машине OpenSolaris 2009.06 через NFS, которая содержит образы дисков. Кажется, мои виртуальные машины связаны медленным вводом-выводом, поэтому я бы хотел сделать все возможное, чтобы оптимизировать соединение.

Я не уверен в лучшем способе измерения пропускной способности в производственной системе, но некоторые ненаучные тесты, использующие записи dd bs=1024k count=400show local (OpenSolaris) о ~ 1.6 ГБ / с и удаленные (CentOS) записи ~ 50 МБ / с. Я полагаю, что они ниже, чем то, что я на самом деле получаю, поскольку 7 виртуальных машин в настоящее время работают через соединение.

В настоящее время эти 2 компьютера являются gigE с прямым подключением, а на обеих сетевых картах включены Jumbo-кадры (MTU = 9000). Кроме этого, никаких оптимизаций не было сделано. NFS mount / export использует значения по умолчанию.

С чего мне начать поворачивать ручки для повышения производительности?

Sysadminicus
источник
Пропускная способность не должна иметь большого значения. Какова основная спецификация оборудования в системе, в которой работает OpenSolaris? Сколько у вас дисков / шпинделей? Сколько оперативки?
ewwhite
12 дисков распределены между 2 пулами raidz1 на одном контроллере с 4 ГБ оперативной памяти. Если пропускная способность не имеет значения, на какую метрику я должен смотреть?
Sysadminicus
Что делает cat / proc / mounts | grep solaris_server скажете на клиенте Linux? Разные версии Linux имеют разные параметры монтирования по умолчанию :(
James
10.10.1.1:/tank/vm / vm nfs rw, vers = 3, rsize = 1048576, wsize = 1048576, hard, proto = tcp, timeo = 600, retrans = 2, sec = sys, addr = 10.10.1.1 0 0
Sysadminicus
в некоторых выпусках Solaris 10 nfs3 работал нестабильно. Если вы можете перейти на nfs4, вы можете увидеть некоторые улучшения. Но, как говорили другие комментаторы, скорость 50 МБ / с по каналу GIGE близка к максимальному значению, которое вы можете видеть
Уоррн

Ответы:

2

Просто чтобы уточнить, вы получаете 50 МБ / с с NFS через одно соединение Gb Ethernet?

И на хост-сервере установлен CentOS с установленным VMware Server, который, в свою очередь, работает на 7 виртуальных машинах? Есть ли какая-то особая причина, по которой вы решили использовать CentOS и VMware Server вместе, а не VMware ESXi, который является решением с более высокой производительностью?

Скорость 50 МБ / с невелика, но она не намного ниже, чем можно было бы ожидать от одного сетевого кабеля Gb - после того, как вы добавили твики NFS, о которых упоминали выше, вы увидите 70- 80MB / сек. Варианты по линии:

"ро, жесткий, INTR, Retrans = 2, rsize = 32768, wsize = 32768, nfsvers = 3, TCP"

вероятно, разумны для вас на обоих концах системы.

Чтобы достичь этого, нужно объединить сетевые карты в пары, что должно увеличить пропускную способность примерно на 90%. Вам может потребоваться коммутатор, поддерживающий 802.3ad, чтобы получить лучшую производительность с агрегацией каналов .

Однако я хотел бы предложить одну вещь: ваша пропускная способность ввода-вывода на коробке OpenSolaris кажется подозрительно высокой, 12 дисков вряд ли будут поддерживать пропускную способность 1,6 ГБ / с, и это может быть сильно кэшировано Solaris + ZFS.

Эван Лейт
источник
Мы используем CentOS + VMWare Server, потому что он бесплатный. Последний раз, когда я проверял ESXi, был довольно дорогой. Согласно / proc / mounts, rsize / wsize в настоящее время 1048576. Просто для подтверждения, вы думаете, что уменьшение их до 32k поможет увеличить скорость? Я проверю агрегацию ссылок. Буду ли я делать это на обоих концах соединения или только на одном? Я думаю, что вы правы в отношении кэширования IO. Увеличение моего dd более 512 МБ значительно снижает скорость передачи (в пределах 50-120 МБ / с).
Sysadminicus
У меня больше нет возможности в пользовательском интерфейсе принять ответ на этот вопрос, но я проголосовал за это, так как кажется, что агрегация ссылок будет моим лучшим выбором.
Sysadminicus
Извините за задержку с ответом, ESXi теперь бесплатен в своей базовой форме и даст вам повышение производительности, но у него ограниченная функциональность, поэтому он может не подойти вам. Вам нужно будет выполнить агрегацию ссылок на обоих концах сетевой ссылки, чтобы увидеть большую часть улучшений. Надеюсь, что это работает для вас
Эван Лейт
1

Для наших машин RHEL / CentOS 5 мы используем следующие флаги монтирования

nfsvers = 3, TCP, Timeo = 600, Retrans = 2, rsize = 32768, wsize = 32768, жесткий, INTR, noatime

Более новая версия ядра Linux поддерживает еще более широкие параметры rsize / wsize, но 32k - максимум для ядра 2.6.18 в EL5.

На серверах NFS, по крайней мере, для Linux no_wdelay предположительно помогает, если у вас есть контроллер диска с BBWC. Кроме того, если вы используете флаг noatime на клиентах, возможно, имеет смысл также смонтировать файловые системы на серверах с noatime.

И, как уже упоминалось, не беспокойтесь о UDP. В высокоскоростных сетях (1GbE +) существует небольшая, но ненулевая вероятность того, что изменение порядкового номера приведет к повреждению данных. Также, если есть вероятность потери пакетов, TCP будет работать лучше, чем UDP.

Если вас не очень беспокоит целостность данных, опция экспорта «async» может значительно повысить производительность (проблема с асинхронностью заключается в том, что вы можете потерять данные в случае сбоя сервера).

Кроме того, по крайней мере для сервера Linux, вы должны убедиться, что у вас достаточно потоков сервера NFS. Значение по умолчанию 8 слишком низкое.

janneb
источник
1

Однажды я провел тест с Dell R710, 1 ЦП, 4 ГБ ОЗУ, 6 дисков SATA с RAID-10. Клиент был sun x2100, как с CentOS 5.3, так и с параметрами nfs, как упомянуто выше.

"ро, жесткий, INTR, Retrans = 2, rsize = 32768, wsize = 32768, nfsvers = 3, TCP"

крепится с обеих сторон с помощью noatime.

Я также увеличил nfsds до 256 и использовал планировщик noop для rac-контроллера perc6. Еще я хотел выровнять разделы по размеру полосы 64K контроллера рейда.

затем я измерил производительность nfs с помощью dd - для операций чтения я мог заполнить канал gigE, но для операций записи я мог получить лишь чуть лучшие результаты, чем вы. С включенной асинхронностью я мог получить от 70 до 80 МБ / с, но асинхронность не была для меня опцией

Может быть, вы не можете получить больше с NFS по ссылке GIGE?


источник
1

Попробуйте это: временно отключите журнал ZFS Intent Log (ZIL) на сервере NFS OpenSolaris, выполнив следующие два шага

  1. echo zil_disable/W0t1 | mdb -kw
  2. заново смонтировать тестовый раздел

Затем проверьте снова. Вы можете использовать zilstat, чтобы убедиться, что в ZIL больше нет ввода-вывода. Если тест выполняется быстрее, вы знаете, что проблема с производительностью связана с ZIL. Если он все еще работает медленно, вы знаете, что ZIL не является виновником, и что использование SSD для ZIL также не поможет. См. ZFS Evil Tuning Guide для получения дополнительной информации о ZIL.

Другой вариант - захватить сетевой трафик (например, с помощью Wireshark) и посмотреть, есть ли какие-либо проблемы, например, с кадрами Jumbo. Убедитесь, что пакеты в сети выглядят так, как вы ожидаете от своей конфигурации. Происходит ли плохая фрагментация? Есть ретрансляторы?

knweiss
источник
0

Может помочь увеличение размеров чтения и записи. Особенно в сочетании с гигантскими кадрами.

Я стремлюсь найти 32k, чтобы быть оптимальным.

rsize=32768,wsize=32768

Переключение на транспорт UDP, конечно, быстрее, чем TCP, потому что это экономит накладные расходы на управление передачей. Но это применимо только в надежных сетях, где NFSv4 не используется.

Дэн Карли
источник
Похоже, CentOS подключается с использованием NFSv3. Есть ли значение в NFSv4 для нашего варианта использования? Я бы сказал, что сеть достаточно надежна, поскольку между двумя сетевыми картами есть только перекрестный кабель.
Sysadminicus
2
UDP серьезно не стоит хлопот. Придерживайтесь ПТС. Я бы не советовал пробовать NFSv4, пока у вас не будет работать v3.
Джеймс
0

Производительность NFS в ZFS значительно улучшена благодаря использованию SSD для журнала намерений ZFS (ZIL), поскольку это уменьшает задержку операций. Эта ветка о VMWare NFS о производительности ZFS в списках рассылки OpenSolaris NFS и ZFS содержит дополнительную информацию, в том числе инструмент для оценки производительности узкого места.

TRS-80
источник
0

К вашему сведению, команда dd будет записывать в кеш, а не на диск, поэтому вы можете получить сумасшедшие цифры, такие как 1.6G / s, потому что вы пишете в ОЗУ, а не на диск в Solaris, вы можете использовать «-oflag = sync» для принудительной записи на диск

Кайл Хейли
источник