Производительность 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 КБ, это приведет к значительным штрафам за чтение/изменение/запись. Обратите внимание: я не призываю использовать такой маленький размер.
Чтобы улучшить производительность, вы можете сделать следующее:
- использовать
против где это применимо (но у вас только 3 диска, что предотвращает использование зеркалирования + чередования) - используйте файлы изображений RAW, а не QCOW2 (если файлы QCOW2 действительно необходимы, обязательно заранее выделите их метаданные)
- попробуйте установить
(но обязательно поймите, что в случае внезапного отключения питания ваша система потеряет до 5 секунд записанных данных)
С дисками SMR можно использовать файловую систему с журнальной структурой. Он объединяет несколько небольших операций записи в одну большую запись, поэтому доступ для записи в основном является последовательным. В ZFS помогает настройка огромного ARC.