четверг, 17 ноября 2011 г.

Тюнинг zfs для использования на SATA дисках

Файловая система ZFS изначально разрабатывалась для серверного применения на мащинах с быстрыми SCSI(SAS) дисками на дорогих и высокопроизводительных RAID-контроллерах. Однако с минимальными усилиями ее можно приспособить и для десктопа c бюджетными SATA дисками.

Одна из ключевых особенностей SCSI дисков явдяется TCQ, именно TCQ дает существенный выйгрыш производительности при большом количестве конкурирующих запросов (типичный характер нагрузки для базы данных). Если очень упрощенно, то устройство, поддерживающее TCQ способно упорядочивать запросы на ввод-вывод с учетом физической геометрии устройства, тем самым сводя потери времени на позиционирование читающей головки к минимуму.
SATA диски также имеют подобную технологию, называется она NCQ, однако в отличии от своего старшего брата, может эффективно работать лишь при небольшом количестве конкурирующих запросов. Если же их становиться больше, то на постоянные перемещения головки уходит намного больше времени, чем собственно на чтение или запись. Кроме того, работа в таком режиме негативно сказывается на ресурсе накопителя. Именно поэтому при использовании SATA дисков необходимо измененить некоторые параметры в /boot/loader.conf:
vm.kmem_size="1G" # размер памяти ядра
vm.kmem_size_max="1G" # максимальный размер памяти ядра
vfs.zfs.arc_min="512M" # размер памяти, выделенной под ARC
vfs.zfs.arc_max="512M" # максимальный размер памяти, выделенной под ARC
vfs.zfs.write_limit_override="256M" # ограничение на запись примерно в 256 Мб за секунду
vfs.zfs.txg.timeout="10" # таймаут обработки группы транзакций. Большое значение приводит к резким скачкам активности диска и снижению отзывчивости системы, а маленькое - к повышению нагрузки на диски. По умолчанию 5 секунд. Я использую 10
vfs.zfs.vdev.min_pending="2" # минимальное количество конкурирующих транзакций
vfs.zfs.vdev.max_pending="4" # максимальное количество конкурирующих транзакций
Ключевыми параметрами являются vfs.zfs.vdev.min_pending и vfs.zfs.vdev.max_pending.
Должен заметить, что значения выше приведены в качестве примера, конкретные значения для каждой конфигурации должны определяться экспериментально.

4 комментария:

  1. Анонимный10 июня 2012 г., 11:39

    Спасибо, за внятное объяснение!!!

    ОтветитьУдалить
  2. Мой конфиг Loader.conf. В нем указанных вами параметров нет
    mfsroot_load="YES"
    mfsroot_type="mfs_root"
    mfsroot_name="/mfsroot"
    hw.est.msr_info="0"
    hw.hptrr.attach_generic="0"
    kern.maxfiles="65536"
    kern.maxfilesperproc="50000"
    kern.cam.boot_delay="8000"
    vfs.zfs.prefetch_disable="1"
    autoboot_delay="3"
    isboot_load="YES"
    zfs_load="YES"

    ОтветитьУдалить
  3. Анонимный9 июня 2015 г., 18:24

    http://unixzen.ru/%D1%82%D1%8E%D0%BD%D0%B8%D0%BD%D0%B3-zfs-%D0%BD%D0%B0-freebsd/

    ОтветитьУдалить