настройка производительности для 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
- Полный список параметров можно найти здесь