У меня есть установка Solaris 11.3 с пулом ZFS, состоящим из полосы 5-vdev, каждая из которых состоит из трех дисков SAS по 10К. Я также настроил SLOG, содержащий зеркальные vdev. Я установил следующие параметры настройки ZFS:
zil_slog_limit: 1073741824
zfs_txg_timeout:256
zfs_vdev_max_pending: 256
zfs_immediate_write_sz: 67108864
При записи в файловую систему с помощью async=always
(Я пытаюсь определить наилучшую производительность, которую я могу ожидать, когда эта файловая система монтируется через NFS с включенной синхронизацией для образов дисков ВМ). Когда я бегу
time dd if=/dev/urandom of=testfile bs=512 count=10000
Я получаю около 100 IOPS на vdev (2-дисковые зеркальные диски SAS 10K) в SLOG (так что около 100 секунд для работы с одним vdev в SLOG и 50 секунд с двумя в SLOG). У меня нет дополнительных дисков в массиве, но такое поведение для одного или двух устройств предполагает, что vdev SLOG работают. Я также использовал zpool iostat -v 5
чтобы убедиться, что они единственные устройства, которые получают записи на них, пока я запускаю тест (кроме дисков данных, когда SLOG сбрасывается). Число записей в секунду от zpool iostat
примерно соответствует подсчитанному мной количеству операций ввода-вывода в секунду. dd
.
У меня сложилось впечатление, что SLOG должны быть написаны почти полностью последовательно; 100 IOPS - это то, что я ожидал от случайной записи.
Изменить: я пробовал аналогичную вещь с запасным компьютером, на котором запущен FreeNAS. У машины два диска в зеркале + беззеркальный SLOG. IOPS - это медленный произвольный ввод-вывод, а не последовательный медленный в пуле при использовании жесткого диска для SLOG и> 10k IOPS при использовании SSD.
Что-то не хватает в моем понимании и / или некоторые параметры, которые мне нужно изменить? Заранее спасибо!
Устройства SLOG предназначены для обеспечения безопасности в случае большого количества одновременных операций записи в случае сбоя питания. Таким образом, данные записываются в устройства LOG, чтобы они были там, если вы теряете питание, но затем они периодически сбрасываются на диск из памяти (несколько секунд), а не с устройства LOG. В обычном случае устройства LOG не читаются, они не являются устройствами кеширования. Если ваш ящик выходит из строя и теряет содержимое ОЗУ до того, как он сможет сбросить ваши данные на диск, ZFS прочитает это с устройства LOG и сбрасывает его оттуда. Вот почему мы используем SSD для устройств LOG.
Это хорошая статья в этой теме, проверьте это: https://www.ixsystems.com/blog/o-slog-not-slog-best-configure-zfs-intent-log/