null

Не все йогурты одинаково полезны

В ZFS существует такая полезная возможность, как предварительное чтение данных, оно же prefetch. При этом в ZFS реализовано предварительное чтение как на файловом, так и на блочном уровне. На системах под управлением FreeBSD по умолчанию prefetch включается если не используется i386 архитектура и на системе не менее 4Gb памяти. Если система не удовлетворяет этим условиям, система отключает prefetch со следующим сообщением:

ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present;
            to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.

И вот у меня нашлась система, удовлетворяющая обоим требованиям и на ней оказался включенным prefetch, и хотелось бы радоваться исчезновению уведомления, но...

В связи с особенностями работающего на этой системе программного обеспечения, основной создаваемой нагрузкой на дисковую подсистему является случайное чтение. Поэтому закономерно возник вопрос, а так ли хороша реализация prefetch в ZFS для этого самого случайного чтения?

Не смотря на заверения, что ZFS при включенном prefetch замечательно справляется и со случайным доступом, после ввода команды:

sysctl vfs.zfs.prefetch_disable=1

я смог заметить разницу даже по изменившемуся характеру звуков от HDD. А вывод gstat показал падение средней занятости дисков с 22-24% до 11-14%.

Что наглядно показывает несовершенство работы prefetch в ZFS. Стоит отметить, что я далеко не первый, кто наступил на это несовершенство. Поэтому при использовании ZFS всё таки стоит задуматься о характере нагрузки и в некоторых случаях действительно может оказаться полезным отключение prefetch.

Отключения prefetch в FreeBSD рекомендуется делать через /boot/loader.conf:

vfs.zfs.prefetch_disable="1"

А для Solaris он отключается в /etc/system:

set zfs:zfs_prefetch_disable=1