четверг, 5 июля 2012 г.

Оптимизация NFS в Linux

Столкнулся с небольшой производительностью nfs сервера, начал ковырять, и узнавать, что же можно улучшить?
Я уже рассматривал раньше работу NFS на FreeBSD, там же есть и базовая теория, как это работает.
Так что повторяться не буду.


Итак
Тюнинг сервера
Лучше использовать tcp, т.к. гарантирует доставку, даже при очень высокой нагрузке на сервер, правда несет за собой дополнительные накладные расходы в виде повышения нагрузки на CPU и уменьшения скорости передачи.


Количество процессов nfsd 
Для Red Hat


#cat /etc/sysconfig/nfs
...
RPCNFSDCOUNT=32
...
- число ставить приблизительно в расчёте 2 демона на одну ноду.

Для Gentoo

#cat /etc/conf.d/nfs
...
# Number of servers to be started up by default
OPTS_RPC_NFSD="32"
...

Тюнинг клиента
Здесь перечислены некоторые опции, которые вы должны рассмотреть сразу, добавляя их в файл настроек.
Они управляют способом, которым клиент NFS отрабатывает прекращение работы сервера или отключение сети.
Одно из свойств NFS в том, что он может изящно обрабатывать эти неполадки, если вы правильно установите клиента.
Существует два различающихся режима обработки ошибок:

soft
NFS клиент будет сообщать об ошибке программе, которая пытается получить доступ к файлу расположенному на файловой системе, смонтированной через NFS.
Некоторые программы довольно хорошо обрабатыают такого рода ошибки, но большинство программ не делают это.
Я не рекомендую использование этой опции, она может привести к появлению испорченных файлов и потерянных данных. Вы особенно не должны использовать эту опцию для дисков, используемых для почты, если ваша почта что-то значит для вас.

hard
Программа осуществляющая доступ к файлу на смонтированной по NFS файловой системе просто приостановит выполнение при разрыве связи с сервером. Процесс не может быть прерван или убит до тех пор, пока вы явно не укажите опцию intr. Когда сервер NFS будет запущен заново, то программа продолжит безмятежно продолжать работу с прерванного места. Это скорее всего то, что вам нужно. Я рекомендую использовать опции hard,intr на всех файловых системах смонтированных через NFS.
Продолжая предыдущий пример, теперь в нашем файле fstab запись будет выглядеть так:

# device      mountpoint     fs-type    options                  dump fsckorder
...
test:/mnt/test  /mnt    nfs        rsize=1024,wsize=1024,hard,intr 0 0
...
rsize и wsize
Обычно, если не заданы опции rsize и wsize, то NFS будет читать и писать блоками по 4096 или по 8192 байтов.
Некоторые комбинации ядер Linux и сетевых карт не могут обрабатывать такие большие блоки, и это может быть не оптимально.
Так что нам нужно поэкспериментировать и найти значения rsize и wsize, которые работают так быстр,о насколько это возможно.
На современных системах как правило оптимальными будут значения rsize=32768,wsize=32768. Т.е  увеличиваем буфера чтения и записи , что уменьшает сетевые издержки

noatime  - не обновлять обращения на чтение

defaults - равно rw, suid, dev, exec, auto, nouxer, async

В конечном итоге должно быть что-то типа этого

# device      mountpoint     fs-type    options                  dump fsckorder
...
test:/mnt/test  /mnt nfs defaults,nosuid,nolock,noatime,bg,vers=3,rsize=32768,wsize=32768,hard,intr 0 0
...
Ссылки 
NFS-HOWTO

Комментариев нет:

Отправить комментарий