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

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

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

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

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

      $ sudo zpool status
  pool: tank
 state: ONLINE
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            sdb     ONLINE       0     0     0
            sdc     ONLINE       0     0     0
            sdd     ONLINE       0     0     0

errors: No known data errors

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

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

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

Но даже без СЛОГА я не думаю, что эти цифры верны :(

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

3 ответа

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

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

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

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

В качестве приближения первого порядка приведены случайные значения производительности одного диска, которые для жесткого диска емкостью 7,2 КБ составляют около 70 операций ввода-вывода в секунду. Ваш тест показывает на 50% меньше операций ввода-вывода в секунду (т. е. ~30 против ~70), и это можно объяснить выбранным вами относительно большим значением.

Особенно при случайной записи, если размер данных превышает 4 КБ, это приведет к значительным штрафам за чтение/изменение/запись. Обратите внимание: я не призываю использовать такой маленький размер.на механических дисках, поскольку он требует очень больших затрат на метаданные, высокой фрагментации и (почти) отсутствия сжатия. Для справки: при использовании жестких дисков я оставляю размер записи по умолчанию (128 КБ) даже для хостов виртуализации.

Чтобы улучшить производительность, вы можете сделать следующее:

  • использоватьпротивгде это применимо (но у вас только 3 диска, что предотвращает использование зеркалирования + чередования)
  • используйте файлы изображений RAW, а не QCOW2 (если файлы QCOW2 действительно необходимы, обязательно заранее выделите их метаданные)
  • попробуйте установить(но обязательно поймите, что в случае внезапного отключения питания ваша система потеряет до 5 секунд записанных данных)

С дисками SMR можно использовать файловую систему с журнальной структурой. Он объединяет несколько небольших операций записи в одну большую запись, поэтому доступ для записи в основном является последовательным. В ZFS помогает настройка огромного ARC.

Другие вопросы по тегам