Рейтинг:1

Производительность ZFS: Чрезвычайно низкая скорость записи

флаг pk

У меня небольшой домашний сервер. Характеристики:

  • Процессор: AMD Райзен 5 2600
  • Оперативная память: 32 ГБ ECC
  • Системный диск: 128 ГБ NVMe SSD
  • Диски данных: 3 жестких диска Seagate Barracuda по 4 ТБ

На сервере работают некоторые приложения, такие как Nextcloud или Gitea, и я хочу запустить на нем 1-2 виртуальные машины. Итак, есть некоторые веб-приложения, базы данных и виртуальные машины.

Приложения и образы qcow2 хранятся в пуле raidz1:

$ статус sudo zpool
  бассейн: танк
 состояние: ОНЛАЙН
конфигурация:

        ИМЯ СОСТОЯНИЕ ЧТЕНИЕ ЗАПИСЬ CKSUM
        бак ОНЛАЙН 0 0 0
          raidz1-0 ОНЛАЙН 0 0 0
            sdb ОНЛАЙН 0 0 0
            sdc ОНЛАЙН 0 0 0
            sdd ОНЛАЙН 0 0 0

ошибки: Нет известных ошибок данных

Когда я использовал приложения в первые недели, у меня не было проблем. Но через несколько недель я понял крайне низкие скорости записи. Экземпляр nextcloud не очень быстрый, и когда я пытаюсь запустить новую виртуальную машину с Windows 10, ей требуется около 5 минут, чтобы перейти к экрану входа в систему.

Я провел некоторое тестирование производительности, используя фио и получил следующие результаты:

Тестовое задание IOPS Полоса пропускания (КиБ/с)
случайное чтение 37,800 148,000
случайная запись 31 127
последовательное чтение 72,100 282,000
последовательная запись 33 134

Прежде чем опубликовать здесь, я провел небольшое исследование и прочитал, что мне следует добавить SLOG в пул zfs для повышения производительности с базами данных и виртуальными машинами. Но это не вариант на данный момент. Мне нужно сначала получить рождественские подарки :D

Но даже без SLOG я не считаю эти цифры правильными :(

У кого-нибудь есть идея? :)

Philip Szalla avatar
флаг pk
Я уже отключил «atime» для всех наборов данных и установил «recordsize» на 64 КБ для набора данных, в котором хранятся изображения qcow2.
флаг us
Вы не должны использовать RAIDZ1 ни при каких обстоятельствах. Всякий раз, когда одно устройство выходит из строя, существует очень высокий риск того, что второй диск выйдет из строя во время резервного копирования, и вы потеряете все свои данные. RAIDZ1 также может проявляться такой медлительностью. Вместо этого используйте зеркало.
Рейтинг:2
флаг pk

Я сам нашел проблему.

Я видел статью, в которой упоминается CMR и SMR. Я проверил свои диски и понял, что случайно купил жесткие диски с SMR :(

Я буду поддерживать зеркальный пул, пока не заменю диски новыми дисками CMR. Когда у меня будет новый диск, я также буду использовать зеркальный пул.

Спасибо вам всем!

Рейтинг:1
флаг ca

As a first-order approximation raidz provides the random performances of a single disk, which for a 7.2K HDD are about 70 IOPS. Your test shows 50% less IOPS (ie: ~30 vs ~70) and this can be explained with the relatively large recordsize you selected.

Especially for random writes, any recordsize larger than 4KB is going to face considerable read/modify/write penalty. Please note that I am not advocating for using such a small recordsize on mechanical disks as it commands a very high metadata overhead, high fragmentation and (almost) no compression. As a reference, when using HDDs I leave the default (128KB) recordsize even for virtualization hosts.

You can do the following to improve performance:

  • use mirror vs raidz where applicable (but you only have 3 disks, preventing the use of mirroring+striping)
  • use RAW image files rather than QCOW2 (if QCOW2 files really are required, be sure to preallocate their metadata)
  • try setting sync=disabled (but be sure to understand that in case of sudden power loss your system will lose up to 5s of written data)
Philip Szalla avatar
флаг pk
Спасибо за ответ и извините за поздний ответ! Я удалил один диск из системы и создал зеркальный пул. Это улучшило скорость чтения примерно на 30%, как и ожидалось. Но скорость записи не изменилась :(

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.