При заполнении пула почти на 90% (вообще-то у всех по-разному: у кого-то и в 70%, а у кого-то только при 98%) Zfs начинает сильно притормаживать, точнее искать свободное место в пуле, куда-бы записать. Связано это с тем, что по умолчанию установлено слишком большое значение параметра metaslab_min_alloc_size.
FreeBSD
Текущее значение можно посмотреть так:
# kgdb -w
....
(kgdb) print metaslab_min_alloc_size
$1 = 10485760
Налету выставим нужное (через kernel debugger – kgdb)
# kgdb -w
....
(kgdb) set metaslab_min_alloc_size=4096
(kgdb) print metaslab_min_alloc_size
$1 = 4096
Для перманентного изменения видимо придётся пересобирать ядро. Нашёл коммит http://gitorious.org/~avg/freebsd/avgbsd/commit/026055dd0ee0e837470fc51c8f5f4dc1447d42ab который должен внести патч с поправкой на значение по дефолту 0x1000 (вместо ранее дефолтного 10485760) . Так что вручную меняем значение переменной metaslab_min_alloc_size в файле sys/cddl/contrib/opensolaris/uts/common/fs/zfs/metaslab.c с DMU_MAX_ACCESS на 0x1000
Solaris
Текущее значение можно посмотреть так:
#echo metaslab_min_alloc_size::print | mdb -k
0x1800000
Рекомендуют ставить 0x1000. Налету это делается так:
#echo "metaslab_min_alloc_size/Z 1000" | mdb -kw
metaslab_min_alloc_size: 0x1800000 = 0x1000
Здесь видим старое и новое значение. Для постоянного изменения, заносим такую строку в /etc/system
set zfs:metaslab_min_alloc_size=0x1000
Ещё рекомендуют изменить параметр (но его уже убрали в Solaris 10, Patch-ID# 147441-15, а значит нет и в Oracle Solaris 11, но есть в OpenSolaris )
set zfs:metaslab_smo_bonus_pct=0xc8
Вот краткое пояснение этого параметра из рассылки:
This is used to add more weight (i.e. preference) to specific
metaslabs. A metaslab receives this bonus if it has an offset which is
lower than a previously use metaslab. Sorry this is somewhat
complicated and hard to explain without a whiteboard. 🙂
Немаловажным фактором ещё является размер recordsize, который установлен на определённых ZFS. Поскольку, ZFS это COW, то чем больше размер блока, тем сложнее найти свободный блок большего размера. Как вариант, если у вас стоит 1М, попробуйте уменьшить до 128К, или, до 32К, если это возможно.
3 коментарі “zfs начинает тупить/притормаживать при заполнении почти всего пула”
Спасибо огромное! Помогло… Жуткие тормоза на пуле из mirror-ов (12 винтов) начались при заполнении 65% пула. Пока полет нормальный.
А в Linux как?)
К сожалению, не знаю.