У меня есть сервер Solaris 10 с клиентами Mac OS X в гигабитной локальной сети. Сервер Solaris экспортирует общий ресурс NFS с поддержкой RAID-Z, и все клиенты подключаются к нему. Однако передача файлов происходит медленнее, чем я думаю. Я включил jumbo-кадры, что увеличило мою максимальную пропускную способность с 18 МБ / с до 30 МБ / с, но это все равно медленнее, чем я думаю. Я думаю, что текущее узкое место - это мой коммутатор, который, похоже, не может переключать столько пакетов в секунду, сколько могут отправить мои машины. Кроме того, обе машины используют около 30-40% ЦП для передачи.
Помимо замены переключателя, которую я планирую сделать, что я могу сделать, чтобы уменьшить использование ЦП и увеличить пропускную способность?
Часто Журнал намерений ZFS (ZIL) является узким местом NFS файлового сервера ZFS. ZFS очень строго подчиняется протоколу NFS и следит за тем, чтобы данные синхронной записи действительно попадали на диск, прежде чем сообщать об успешном завершении записи. ZFS использует ZIL для временного хранения этих данных, прежде чем записывать их в большем блоке в пул. Если запись в ваш ZIL идет медленно (высокая задержка), то производительность NFS, вероятно, тоже будет низкой. Хороший тестовый пример этой проблемы - извлечь большой архив (много файлов) для экспорта NFS.
Есть как минимум два решения для повышения производительности NFS:
Пара вещей:
Чтобы выяснить, является ли проблема переключателем, выньте переключатель из уравнения и проверьте. Подключите машины друг к другу и проверьте снова. Карты GigE автоматически перекрестно подключаются, специальный кабель не требуется.
После этого настройка NFS становится чем-то вроде черного искусства. Из того, что я видел, он имеет тенденцию быть очень специфичным для сервера NFS, а иногда и для клиента NFS. К счастью, у Google, кажется, есть много статей на эту тему. Прочитал кучу.
Пара подсказок:
По нашему опыту, OS X NFS не является фантастическим (клиенты OS X, серверы Linux). Мы получаем лучшую производительность, используя самбу. YMMV!