настройка производительности для scrubs и resilvers

Применимость: Solaris, OmniOS

Слова для поиска:


Задача:

При обнаружении ошибки на диске система начинает resilver (перенос актуальных данных) на резервный (spare) диск. Проблема в том, что, с настройками по умолчанию, иногда предлагается ждать два-три месяца для завершения. Аналогичная проблема с временем выполнения может быть при выполнении scrub.

Решение:

Есть два варианта - установить нужные параметры навсегда путем добавления нужных параметров в /etc/system

/etc/system

* Prioritize resilvering by setting the delay to zero
set zfs:zfs_resilver_delay = 0

* Prioritize scrubs by setting the delay to zero
set zfs:zfs_scrub_delay = 0

* set maximum number of inflight IOs to a reasonable value 
* this number will vary for your environment
set zfs:zfs_top_maxinflight = 128

* resilver for five seconds per TXG
set zfs:zfs_resilver_min_time_ms = 5000 
Чтобы эти настройки начали действоать систему надо переазгрузить.

Или можно применить эти параметры немедленно этими командами:

echo "zfs_scrub_delay/W0t1" | mdb -kw
echo "zfs_resilver_delay/W0t1" | mdb -kw
echo "zfs_scan_idle/W0t2" | mdb -kw

Восстановить значения по умолчанию:

echo "zfs_scrub_delay/W0t5" | mdb -kw
echo "zfs_resilver_delay/W0t2" | mdb -kw
echo "zfs_scan_idle/W0t50" | mdb -kw
Просмотреть текущие значения:
echo "zfs_scrub_delay/D" | mdb -k
echo "zfs_resilver_delay/D" | mdb -k
echo "zfs_scan_idle/D" | mdb -k

  • Полный список параметров можно найти здесь

Смотрите также: