Назад | Перейти на главную страницу

Бенчмаркинг FIO - непоследовательно и медленнее, чем ожидалось: мои RAID настроены неправильно?

TL; DR: У меня проблемы с производительностью гипервизора. вот несколько результатов тестов от fio. Перейти к Results раздел, чтобы прочитать о них и увидеть мои вопросы.


Резюме

Я недавно купил R730xd, поэтому перед тем, как перейти на него, я хотел убедиться, что хранилище работает оптимально. Я провел несколько тестов с фио и обнаружили некоторые тревожные результаты. Используя комбинацию этих результатов и фио-сюжет, Я собрал довольно большую коллекцию графиков и диаграмм, которые демонстрируют проблемы в моих различных серверных модулях хранения.

Однако мне сложно превратить его в пригодный для использования Информация потому что мне не с чем сравнивать. И я думаю, что у меня очень странные проблемы с производительностью.


Конфигурация диска

Вот четыре типа хранилищ, доступных моему гипервизору (Proxmox):

╔═══════════╦════════════════════════════════╦═════════════╦════════════════════════════╗
║  Storage  ║            Hardware            ║ Filesystem  ║        Description         ║
╠═══════════╬════════════════════════════════╬═════════════╬════════════════════════════╣
║ SATADOM   ║ 1x Dell K9R5M SATADOM          ║ LVM/XFS     ║ Hypervisor filesystem      ║
║ FlashPool ║ 2x Samsung 970 EVO M.2 SSD     ║ ZFS RAID 1  ║ Hypervisor Compute Storage ║
║ DataPool  ║ 6x HGST 7200RPM HDD            ║ ZFS RAID 10 ║ Redundant Data Storage     ║
║ RAIDPool  ║ 6x Seagate/Hitachi 7200RPM HDD ║ HW RAID 10  ║ General Purpose Storage    ║
╚═══════════╩════════════════════════════════╩═════════════╩════════════════════════════╝

Детали хранения

Вот более подробная разбивка по каждому бэкэнду хранилища:

  1. САТАДОМ: The SATADOM управляется Proxmox напрямую через LVM. Вот это результат lvdisplay pve. SATADOM подключается к серверу через внутренний порт SATA DVD-ROM, так как он не используется в R730xd модель.

  2. FlashPool: The FlashPool представляет собой простой ZFS RAID 1, состоящий из двух твердотельных накопителей NVMe. Цель состоит в том, чтобы использовать это в качестве резервного хранилища для моих виртуальных машин. Вот выходы для:

     zpool list  
     zpool status  
     zfs get all
    

    Каждый из SSD в FlashPool подключены к серверу через PCI-E -> адаптеры M.2 устанавливается в слоты x16 PCIe. Я понимаю, что это адаптеры x4 PCIe. Однако я почти уверен, что NVMe работает только на этой скорости, поэтому более быстрые адаптеры не производятся.

  3. DataPool: The DataPool - единственный ранее существовавший набор данных. Ему пару лет, и ранее он использовался как для хранения данных, так и для виртуальных машин в ущерб производительности. Он также управляется Proxmox как ZFS RAID 10.

    Первоначально он состоял из 6x 4TB HGST Ultrastar 7K4000 7200RPM диски. Однако, когда они начали выходить из строя, я решил заменить их дисками с большей плотностью. В результате теперь массив состоит из:

     2x 6TB HGST Ultrastar He6 7200RPM  
     4x 4TB HGST Ultrastar 7K4000 7200RPM 
    

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

    Эти 6 дисков подключены к серверу через первые 6 отсеков на объединительной плате. Эта объединительная плата подключена к RAID-контроллеру Dell H730 Mini PERC.

  4. RAIDPool: The RAIDPool это экспериментальный бэкэнд хранилища. Я никогда раньше не работал с аппаратным RAID, поэтому я был очень рад возможности теперь, когда у меня есть правильный RAID-контроллер. Подобно DataPoolэти диски устанавливаются в последние 6 отсеков объединительной платы. Однако вместо того, чтобы проходить через Proxmox, они управляются PERC. Они представляются Proxmox как один диск, который затем управляется LVM и представляется операционной системе через логические тома как файловые системы XFS. Вот это результат lvdisplay RAIDPool.


Конфигурация RAID-контроллера

Итак, вы, возможно, только что заметили, что оба DataPool и RAIDPool устанавливаются и управляются RAID-контроллером H730. Однако DataPool управляется Proxmox через ZFS и RAIDPool управляется фактическим контроллером.

Вот это скриншот топологии физических дисков. H730 может передавать диски напрямую в ОС и одновременно управлять другими дисками. Как видите, первые 6 дисков настроены в Non-RAID режим и последние 6 дисков настраиваются в Online Режим.

Кроме того, после повторного прохождения всех настроек я включил Write Cache для встроенного контроллера SATA. Таким образом, это может улучшить производительность на SATADOM из того, что видно в тестах ниже.


Бенчмаркинг:

Я протестировал все эти серверные модули хранения двумя способами. Для обоих тестов я провел серию fio-plot команды в небольшой сценарий оболочки это сбросило результаты в несколько папок.

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

Вкратце, они провели серию тестов для каждого бэкэнда хранилища, которые оценили его СЛУЧАЙНЫЙ пропускная способность, количество операций ввода-вывода в секунду и задержка. Затем он нанес эти результаты на графики. Некоторые графики сравнивают несколько бэкэндов. На других графиках просто показаны результаты отдельных серверных ВМ. Я не выполнял никаких ПОСЛЕДОВАТЕЛЬНЫЙ тесты. Во всех случаях для теста использовался размер блока по умолчанию.

Тест 1) Изнутри Proxmox я смонтировал все серверные модули хранения в /mnt каталог. Пул ZFS был просто импортирован в ОС, а пул RAIDPool и SATADOM были представлены в ОС через LVM. У каждого был логический том, отформатированный как раздел XFS, который использовался для тестирования. ПРИМЕЧАНИЕ. Я запускал эти тесты в реальной ОС, поэтому производительность SATADOM будут затронуты соответственно.

Файлы журнала были созданы с помощью следующих команд:

./bench_fio --target /mnt/SATADOM_Data/bm --type directory --size 450M --mode randread randwrite --output SATADOM
./bench_fio --target /mnt/RAIDPool_Data/bm --type directory --size 1G --mode randread randwrite --output RAIDPOOL
./bench_fio --target /mnt/DataPool/bm/ --type directory --size 1G --mode randread randwrite --output DATAPOOL
./bench_fio --target /mnt/FlashPool/bm/ --type directory --size 1G --mode randread randwrite --output FLASHPOOL

Тест 2) Я создал три виртуальные машины в Proxmox. Каждый из них использовал другое резервное хранилище из FlashPool, DataPool, и RAIDPool. В FlashPool и виртуальные машины DataPool работали в собственном наборе данных ZFS. В RAIDPool ВМ работала на собственном логическом томе с толстым выделением ресурсов. Всем трем виртуальным машинам было предоставлено 4 виртуальных ЦП и 40 ГБ памяти.

Файлы журнала были созданы с помощью следующих команд:

./bench_fio     --target /fio     --type file     --size 1G     --mode randread randwrite     --duration 600     --output DATAPOOL_VM
./bench_fio     --target /fio     --type file     --size 1G     --mode randread randwrite     --duration 600     --output RAIDPOOL_VM
./bench_fio     --target /fio     --type file     --size 1G     --mode randread randwrite     --duration 600     --output FLASHPOOL_VM

Полученные результаты:

Графики в приведенных выше ссылках на Imgur должны быть в одном порядке. Результаты двух тестов немного отличаются. Но этого следовало ожидать, если учесть накладные расходы от виртуализации. Я НЕ ожидаю, что все они будут вести себя примерно одинаково.


Вопросы:

  1. Эти результаты ненормальные ... не так ли? это эталон от этот веб-сайт показывает, что 970 EVO достигает скорости произвольной записи более 900 МБ / с. Почему мои приходят только в 150 МБ / с на гипервизоре и 10 МБ / с в виртуальной машине? Почему эти скорости так различаются при тестировании на гипервизоре и на виртуальной машине?

  2. Почему RAIDPool вдруг стал ненормально медленным при тестировании из гипервизора? Вот мы видим, что пропускная способность чтения в виртуальной машине составляет в среднем 20 МБ / с. Однако из гипервизор, вместо этого он сообщает 4 МБ / с. Как и в тестовых тестах, которые я показал в вопросе 1, разве эти скорости чтения не должны быть ближе к 900 МБ / с?

  3. Почему пулы ZFS внезапно работают значительно хуже при тестировании из виртуальной машины, а не из гипервизора? Например, Вот мы видим, что среднее количество операций ввода-вывода в секунду при чтении составляет около 200 000, а задержка - менее 650 мкс. Однако при сравнении с внутри ВМ, мы можем внезапно увидеть, что среднее значение IOPS при чтении составляет около 2500, а задержка увеличилась более чем в четыре раза? Разве производительность в обеих ситуациях не должна быть примерно одинаковой?

При тестировании пулов ZFS вам необходимо понимать, как кэширование и запись взаимодействуют с вашими рабочими нагрузками:

  • ваш fio команды не пропускают кэш страниц linux (нет --direct=1 вариант), ни ZFS ARC. Однако из-за разного режима работы между ними вы можете отказаться от предпочтения простой файловой системы (XFS) по сравнению с ZFS или наоборот. Чтобы смягчить эффект кэширования, я предлагаю вам выполнить сравнительный анализ с файлом, в 2 раза превышающим значение вашего ОЗУ (то есть: если у вас 24 ГБ ОЗУ, используйте файл 48 ГБ). Делать не эталонный тест ZFS с отключенным кешированием (т.е. primarycache=none), как файловая система CoW потребности высокая частота попаданий в кеш для обеспечения хорошей производительности (особенно при записи блоков размером меньше записей, как вы можете прочитать ниже);

  • ZFS серьезно повлияет на ваши случайные IOP чтения / записи и производительность мышления. recordsize свойство, поскольку ZFS обычно передает полные блоки с записью (за исключением небольших файлов, где "маленький" означает <размер записи). Другими словами, пока fio читает / записывает блоки размером 4 КБ, ZFS на самом деле читает / записывает блоки размером 32 КБ для каждого блока 4K запрошенный fio. Кэширование может (и будет) изменить это общее правило, но суть остается в силе: при большом размере записи может возникнуть насыщение пропускной способности. Обратите внимание, что я не заявить, что размер записи 32 КБ является необоснованным (хотя я бы, вероятно, использовал 16 КБ, чтобы ограничить износ SSD); однако вы должны учитывать это при оценке результатов теста;

  • Я бы снова включил кэш физического диска для дисков прямого доступа, поскольку ZFS знает, как очистить их изменчивый кеш. Однако вам необходимо убедиться, что ваш H730P поддерживает ATA FLUSHes / FUA для проходных дисков (это должен передать синхронизацию, но ее руководство по этому поводу неясно, и у меня нет реального оборудования, чтобы попробовать);

  • ваш RAIDPool массив состоит из механических жестких дисков, поэтому его производительность при случайном чтении будет низкой (кеш контроллера не поможет вам при случайном чтении).

При всем уважении, я не считаю ваши результаты ненормальными; скорее, они не представляют собой действительную рабочую нагрузку и частично неправильно интерпретируются. Если вы действительно хотите сравнить ZFS и HWRAID + XFS, я предлагаю вам протестировать фактическую ожидаемую рабочую нагрузку (то есть: виртуальные машины базы данных + приложения, выполняющие некоторые полезные действия), в то же время обязательно использовать ThinLVM (а не классический LVM), чтобы иметь, по крайней мере, возможность быстрого создания снимков, несколько сопоставимую с собственными функциями снимков / клонов ZFS.

Но в некотором смысле вы можете избежать этих тестов просто потому, что результат будет довольно предсказуемым:

  • простая установка HWRAID + LVM + XFS будет быстрее для произвольного чтения / записи наборов данных, которые вписываются в кэш страниц Linux: не подверженный влиянию CoW, он требует гораздо меньших накладных расходов, чем ZFS;

  • установка ZFS будет быстрее в реальных сценариях, где устойчивая к сканированию природа ARC гарантирует, что наиболее часто используемые данные всегда будут кэшироваться. Более того, сжатие и контрольная сумма - две смертоносные функции (чтобы иметь аналогичные функции из HWRAID, вам нужно использовать сложенный dm-integrity + vdo + thinlvm setup, что само по себе приводит к значительному снижению производительности).

В качестве ориентира я недавно заменил Dell R720xd с дисками H710P + 12 10K RPM SAS на гораздо более дешевый SuperMicro 5029WTR с 2x SSD (для загрузки и L2ARC) + 1x NVMe Optane (для SLOG) и 6x 7.2K RPM SATA-дисками. . Система SuperMicro, имея только 1/3 номинальной производительности произвольного чтения, чем система Dell, работает намного лучше благодаря ARC / L2ARC и сжатию.

В конце концов, хотя я полностью понимаю мотивы использования классической системы HWRAID + LVM + XFS, я бы не стал снова использовать ее вместо ZFS для голого компьютера в качестве гипервизора (если не нацелен на конкретные рабочие нагрузки, которые действительно плохо работают с слой CoW между ними или когда требуются экстремальная скорость и DirectIO - см. XFS dax вариант).