Руководство по настройке ZFS на FreeBSD

Опубликовано 01.12.2009

Перевод: Сгибнев Михаил
Оригинал: ZFS Tuning Guide

 Примечание! Оригинал статьи находится в процессе постоянного дополнения, перевод может отличаться от оригинала.

 При использовании ZFS рекомендуется использовать как минимум 1Гб оперативной памяти. Возможна работа с ZFS и на системах с меньшим объемом ОЗУ, но в этом случае потребуется настройка параметров ядра, в противном случае не избежать проблем.

 Предпочтительнее использовать 64-разрядную версию ОС, что связано с большим адресуемым пространством и лучшей производительностью на 64-разрядных переменных, которые интенсивно использует ZFS. 32-разрядные системы так же поддерживаются, хотя и требуют настройки.

 История релизов FreeBSD, включающих ZFS, выглядит следующим образом:

  • 7.0, 7.1 — импорт оригинальной версии ZFSv6. Требует значительной настройки для устойчивой работы
  • 7.2 — все еще ZFSv6, улучшенная обработка памяти, возможно, amd64 не нуждается ни в какой настройке
  • 7.3+ — обратное портирование кода ZFSv13, но могут отсутствовать некоторые новые возможности
  • 8.0+ — используется код ZFSv13, проведена большая работа над ошибками, рекомендуется к использованию

i386

 На i386 вам меобходимо будет перекомпилировать ядро, увеличив значение переменной KVA_PAGES для расширения адресного простанства, прежде чем вы сможете изменить vm.kmem_size для использования более, чем 512M. Добавьте следующую строку в файл конфигурации ядра, чтобы увеличить доступное пространство для vm.kmem_size по крайней мере до 1Гб:

options KVA_PAGES=512

 По умолчанию, ядро получает 1GB из 4GB, доступных на платформе i386 и это пространство используется под все нужды ядра, не только для kmem map. Изменив параметр KVA_PAGES, вы даете возможность использовать ядру большее адресное пространство (для примера, указанного выше — 2 GB), что позволит увеличить значение vm.kmem_size. В качестве негативного момента выступает то, что объем памяти, доступный пользователю, уменьшается и некоторые программы, которые используют фиксированную адресацию, могут не заработать.

 Так же рекомендуется убрать из ядра все неиспользуемые драйвера и опции, что позволит сэкономить несколько Мб памяти. Есть сведения о том, что была достигнута стабильная работа со значением параметра vm.kmem_size=»1536M» на немодифицированном ядре 7.0-RELEASE, что оказалось достаточным для работы драйверов и установки KVA_PAGES=512.


[ad name=»Google Adsense»]



 Работа под нагрузкой может потребовать значительного уменьшения размера ARC и кэша VDEV. ZFS управляет ARC через многонитевой процесс и в случае, если ARC потребует больше памяти, то ZFS выделит необходимое. В этом случае arc_max (vfs.zfs.arc_max) может превышаться, в то время как другой поток в пределах ZFS периодически освобождает память, выделенную ARC, в случае превышения arc_max. Таким образом, даже с небольшим значением arc_max возможно превышение ARC параметра kmem_size_max и паника ядра. В системах, где памяти недостаточно, рекомендуется использовать минимально возможный arc_max. Например, можно установить vm.kmem_size и vm.kmem_size_max в значение 512M, vfs.zfs.arc_max в значение 160M, сохраняя vfs.zfs.vdev.cache.size вполовину его заданного размера по умолчанию 10Мб (при этом, чудным образом, обеспечивается лучшая стабильность).

 Вот пример настройки ZFS для ноутбука, имеющего 768Мб оперативной памяти:

vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"

 Для определения необходимого свободного адресного пространства, необходимо мониторить память ядра. Нижеприведенный скрипт поможет в настройке arc_max и размер кэша VDEV.

#!/bin/sh -

TEXT=`kldstat | awk 'BEGIN {print "16i 0";} NR>1 {print toupper($4) "+"} END {print "p"}' | dc`
DATA=`vmstat -m | sed -Ee '1s/.*/0/;s/.* ([0-9]+)K.*/\1+/;$s/$/1024*p/' | dc`
TOTAL=$((DATA + TEXT))

echo TEXT=$TEXT, `echo $TEXT | awk '{print $1/1048576 " MB"}'`
echo DATA=$DATA, `echo $DATA | awk '{print $1/1048576 " MB"}'`
echo TOTAL=$TOTAL, `echo $TOTAL | awk '{print $1/1048576 " MB"}'`

 Внимание: возможно есть другой способ определения размера vm.kmem_size, но разработчикам о нем неизвестно. В настоящее время для этого требуются эксперименты. Однако, если вы установите в loader.conf значение vm.kmem_size слишком большое, то ядро запаникует на этапе начальной загрузки. Вы можете исправить это, выйдя в командную строку загрузчика и установив vm.kmem_size = «512M» (или меньше).

 Параметр vm.kmem_size_max напрямую не используется в системных операциях (не является пределом увеличения kmem), но используется для начальной автоматической конфигурации различных системных параметров настройки, самым важным из которых для этого обсуждения является размер ARC. Если kmem_size и arc_max будут настроены вручную, то kmem_size_max будет проигнорирован.

 Проблема истощения памяти ядра весьма сложна и зависит от скорости диска, прикладных программ и кэшированием, которое делает ZFS. Более быстрые диски запишут кэшируемые данные быстрее, но также быстрее заполнят кэши. Вообще, чем больше и быстрее диски, тем больше памяти необходимо ZFS.

amd64

 В операционных системах от FreeBSD 7.2 и выше, стратегия распределения памяти значительно улучшена, в результате, на системах с больше чем 2 Гбайтами оперативной памяти, нет необходимости в какой либо настройке.

 На системах, использующих FreeBSD 7.0 и 7.1, память ядра (vm.kmem_size) должна быть увеличена приблизительно до 1ГБ, а размер ARC уменьшен:

vm.kmem_size_max="1024M"
vm.kmem_size="1024M"
vfs.zfs.arc_max="100M"

 Это может помочь в случае, если машина загружена другими задачами, такими как сетевая активность (файловый сервер), и т.д. Настройка KVA_PAGES на amd64 не требуется.

 Для увеличения производительности, вы можете увеличить kern.maxvnodes (через /etc/sysctl.conf) в случае, если у вас есть оперативная память для этого (например, 400000 для системы с 2Гб). Следите за vfs.numvnodes во время работы, чтобы увидеть, где этот параметр стабилизируется. AMD64 использует прямое отображение для vnodes, таким образом вы не должны волноваться об адресном пространстве для vnodes на этой архитектуре (в отличие от i386).

 Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!


[ad name=»Google Adsense»]


2 комментария в Руководство по настройке ZFS на FreeBSD

  1. ИМХО… Нет ни одного слова о настройке ZFS на FreeBSD! Тут только ман, как подготовить систему…

  2. К сожалению, это все, что было на wiki. Действительно, весьма аскетично.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*