пятница, 29 марта 2013 г.

ZFS. Глубина очереди команд при работе с внешними хранилищами

Для ограничения и спасения дискового массива (особенно используемых совместно с другими) нужно ограничить глубину очереди. Это рекомендуется и производителями массивов в том числе. EMC например для своих VMAX рекомендует начать настройку с цифры 20 и далее вести ее до 32. HDS сразу предлагает с 32 начать.
Параметры выставляются в /etc/system

set ssd:ssd_max_throttle=32
set sd:sd_max_throttle=32


# echo sd_max_throttle/D | mdb -k
# echo ssd_max_throttle/D | mdb -k


Это выставит ограничитель на 32 глобально для дисков sd и ssd (не путать с флешами, это solaris:)))

И вот что заметилось - эти параметры были актуальны при работе с UFS. У ZFS есть свой параметр, который делает то же самое и по умолчанию он выставлен в 10.
Проверим сначала:
#echo zfs_vdev_max_pending/D | mdb -k
Увидим 10. Теперь установим в 32:
 - через /etc/system
set zfs:zfs_vdev_max_pending=32
 - на ходу для попробовать:
#echo zfs_vdev_max_pending/W0t32 | mdb -kw

Кстати, что бы посмотреть влияние этого параметра , стоило запустить генератор нагрузки vdbench и iostat -zxne 5 посмотреть на колонку actv, это и есть показатель глубины очереди. Для ZFS дисков он был бы не более 10.

После установки в 32, сделать тот же тест и посмотреть влияние. Если массив достаточно мощен, мы получим не плохой процент роста производительности.

PS: mdb -k
::memstat

Смотрим ZFS File Data - это то что забирает ZFS под свои кэши. Если не ограничить параметрами, то памяти не останется и плевать, что написано в доках о том, что мол ZFS отдаст сразу память как только она потребуется другому приложению. Этого не происходит (по крайней мере так как ждет приложение).

Комментариев нет: