Производительность софт NVMe рейдов на основе mdadm, LVM и ZFS при использовании iSER и NVMe-oF (100G version) — Part 1

Страницы:  1

Ответить
 

Professor Seleznov


С момента прошлой статьипрошло 2 года (и за время написания статьи ещё полгода), за это время:
  • количество дисков в системе увеличилось до 8 PM9A3 1.92TB;
  • вышло несколько новых прошивок на PM9A3;
  • сеть обновилась с ConnectX-3 Pro 40G до ConnectX-4 100G;
В связи с этим - было решено заново провести тесты.
У данной статьи такие же две цели, как и у прошлой:
  • Протестировать производительность трёх систем объединения физических устройств в одно логическое, как для локального доступа к нему, так и для использования в качестве блочного массива для виртуализации.
  • Создание бэкэнда для кластера в виде одноконтроллерного хранилища.
Иными словами выводы данной статьи не применимы, когда Вам нужно:
  • Синхронное отказоустойчивое решение
  • Надежность >>> скорость
  • Долговременное решение, которое можно поставить и забыть
Краткое описание механики проведения тестов:
Тесты для дисков проводились 8 раз каждый. Каждый тест - 10 минут в длительности.
В таблицах ниже взяты средние значения.
Для локальных тестов софт рейдов - каждый тест проходил 2 раза по 10 минут.
Для конечной виртуализации использовался HCIbench - каждая группа тестов проходила 7 раз в рамках тех же ВМ, в итог шли только среднее значение за последние 4 теста. Подробнее в Part 2. "Тесты SAN".
TL;DR

Графики по каждому из тестов для локальных тестов:

Итоговые графики:
pic
Последовательная запись 4M qd=32
pic
Последовательное чтение 4M qd=32
pic
Случайная запись 4k qd=128 jobs=4
pic
Случайное чтение 4k qd=128 jobs=4
pic
Случайная запись 4k qd=1 fsync=1
pic
Случайное чтение 4k qd=1 fsync=1
pic
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write:
pic
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read:
pic
Случайное 100% чтение 4k (vsan easyrun)
pic
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write
pic
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read
pic
Последовательная запись 256к (vsan easyrun)
Графики с визуализаций IO по времени (опорные точки каждые 20 секунд)
pic
Последовательная запись 4M qd=32
pic
Последовательное чтение 4M qd=32
pic
Случайная запись 4k qd=128 jobs=4
pic
Случайное чтение 4k qd=128 jobs=4
pic
Случайная запись 4k qd=1 fsync=1
pic
Случайное чтение 4k qd=1 fsync=1
pic
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write:
pic
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read:
pic
Случайное 100% чтение 4k (vsan easyrun)
pic
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write:
pic
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read:
pic
Последовательная запись 256к (vsan easyrun)
0. Оглавление
0) Оглавление
1) Описание тестового стенда
2) Тесты блочных устройств
2.1) Тесты дисков
2.2) Тесты mdadm
2.2.1) Raid0
2.2.2) Raid5
2.2.3) Raid5 Bitmap
2.3) Тесты LVM
2.3.1) Raid0
2.3.2) Raid5
2.4) Тесты ZFS
2.4.1) Stripe (Raid0)
2.4.2) RaidZ (Raid5)
3) Итог первой части статьи
Часть тестов имеют смешанное чтение\запись, для них данные операции в таблице разделены на строчку с чтением и строчку с записью.
1. Описание тестового стенда
(назад к оглавлению)
Сервер хранения (в дальнейшем гибридный сервер с PCIe Passthrough для тестов блочного хранилища):
  • Motherboard: Tyan S8030 (ver 1GbE)
  • CPU: EPYC 7302
  • RAM: 4x64GB Micron 2933MHz
  • Сеть SAN: 100GbE ConnectX-4 MT27700 x2
  • Диски: 8 x PM9A3 1.92TB, форматированы в 512n
Для тестов на физике используется:
  • ОС Debian 12 с подключённым SID репозиторием (Ядро 6.12.17 mitigations=off)
  • fio 3.38
Рассматриваться будет 2 сценария:
  • Raid 0 - (все же делают бэкапы) как крайний сценарий производительного решения, когда за сохранность данных (не доступность) отвечает или репликация или бэкапы.
  • Raid 5 - противники использования Raid 5 в таком сценарии уверен найдутся, учитывая последнии \*математические выкладки* по которым Raid 5 разваливается в 80% при ребилде, но как показывает статистика и практика на объёмах меньше 8ТБ\диск - это не так.
Все диски прежде чем начались тесты каждой группы были перепизаписаны 2 раза (пока namespace не был заполнен на 100%). Это сделано, дабы исключить запись поверх нулей, которая приводит к завышенным значениям скорости, которые не всегда возможны в реальном сценарии (Да, в реальном сценарии и не рекомендуется заполнять SSD на 100%, как раз по этой причине).
Стоит отметить, что если создать namespace не на 100% объёма, а на ~70%, то производительность становится ближе к заявленной производителем.

Список тестов FIO приведён ниже:

Первые 6 тестов взяты отсюда, +4 теста взяты у vsan easyrun, пр крайней мере, максимально приближены к ним.
  • Последовательная запись крупным блоком (4МБ)
  • Последовательное чтение крупным блоком (4МБ)
  • Случайная запись мелким блоком (4КБ) с высокой глубиной очереди (128) в 4 потока
  • Случайное чтение мелким блоком (4КБ) с высокой глубиной очереди (128) в 4 потока
  • Случайное чтение мелким блоком (4КБ) в 1 поток с глубиной 1
  • Случайная запись мелким блоком (4КБ) в 1 поток с глубиной 1
  • 70% случайного чтения чтение, 30% случайной записи мелким блоком (4k) с глубиной очереди 4 в 8 потоков с повторением 50% блоков и легко сжимаемых данных тоже 50%
  • 100% случайного чтения чтение мелким блоком (4k) с глубиной очереди 4 в 8 потоков с повторением 50% блоков и легко сжимаемых данных тоже 50%
  • 50% случайного чтения чтение, 50% случайной записи мелким блоком (8k) с глубиной очереди 4 в 8 потоков с повторением 50% блоков и легко сжимаемых данных тоже 50%
  • 100% случайной записи большим блоком (256k) с глубиной очереди 4 в 8 потоков с повторением 50% блоков и легко сжимаемых данных тоже 50%

Команда:

fio -name=seq_mbs_write_T1Q1N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=write -runtime=600 -filename=/dev/nvme1n1
fio -name=seq_mbs_read_T1Q1N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4M -iodepth=32 -rw=read -runtime=600 -filename=/dev/nvme1n1
fio -name=rand_iops_write_T1Q128N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=128 -numjobs=4 -group_reporting -rw=randwrite -runtime=600 -randrepeat=0 -filename=/dev/nvme1n1
fio -name=rand_iops_read_T1Q128N1 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=128 -numjobs=4 -group_reporting -rw=randread -runtime=600 -randrepeat=0 -filename=/dev/nvme1n1
fio -name=rand_iops_write_T1Q1N1 -randrepeat=0 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=1 -fsync=1 -rw=randwrite -runtime=600 -filename=/dev/nvme1n1
fio -name=rand_iops_read_T1Q1N1 -randrepeat=0 -ioengine=libaio -direct=1 -invalidate=1 -bs=4k -iodepth=1 -rw=randread -runtime=600 -filename=/dev/nvme1n1
fio -name vsan_4k_100rng_70read -runtime=600 -time_based=1 -ramp_time=360 -direct=1 -buffered=0 -fsync=0 -readwrite=randrw -rwmixread=70 -percentage_random=100 -random_generator=tausworthe64 -blocksize=4K -buffer_compress_percentage=50 -dedupe_percentage=50 -ioengine=libaio -group_reporting -lat_percentiles=1 -iodepth=4 -numjobs=8 -filename=/dev/mapper/nvme-nvme_stripe -status-interval=20
fio -name vsan_4k_100rng_100read -runtime=600 -time_based=1 -ramp_time=360 -direct=1 -buffered=0 -fsync=0 -readwrite=randread -rwmixread=100 -percentage_random=100 -random_generator=tausworthe64 -blocksize=4K -buffer_compress_percentage=50 -dedupe_percentage=50 -ioengine=libaio -group_reporting -lat_percentiles=1 -iodepth=4 -numjobs=8 -filename=/dev/mapper/nvme-nvme_stripe -status-interval=20
fio -name vsan_8k_100rng_50read -runtime=600 -time_based=1 -ramp_time=360 -direct=1 -buffered=0 -fsync=0 -readwrite=randrw -rwmixread=50 -percentage_random=100 -random_generator=tausworthe64 -blocksize=8K -buffer_compress_percentage=50 -dedupe_percentage=50 -ioengine=libaio -group_reporting -lat_percentiles=1 -iodepth=4 -numjobs=8 -filename=/dev/mapper/nvme-nvme_stripe -status-interval=20
fio -name vsan_256k_0rng_0read -runtime=600 -time_based=1 -ramp_time=360 -direct=1 -buffered=0 -fsync=0 -readwrite=write -random_generator=tausworthe64 -blocksize=256K -buffer_compress_percentage=50 -dedupe_percentage=50 -ioengine=libaio -group_reporting -lat_percentiles=1 -iodepth=4 -numjobs=8 -filename=/dev/mapper/nvme-nvme_stripe -status-interval=20
2 Тесты блочных устройств
(назад к оглавлению)
2.1 Тесты дисков
(назад к оглавлению)
Если отобразить получившиеся значения в формате графика, взяв среднее в каждом тесте получится следующая картина:
pic
График МБ/с для каждого из теста блочного устройства
Наименование теста Среднее Минимальное Максимальное
Последовательная запись 4M qd=32 980.22 МБ/с
233.71 IOPS
975.38 МБ/с
233 IOPS
986.75 МБ/с
235 IOPS
Последовательное чтение 4M qd=32 3 676.55 МБ/с
876.76 IOPS
3 656.5 МБ/с
872 IOPS
3 692 МБ/с
881 IOPS
Случайная запись 4k qd=128 jobs=4 765.45 МБ/с
186 942.72 IOPS
752.5 МБ/с
183 744 IOPS
769.63 МБ/с
187 952 IOPS
Случайное чтение 4k qd=128 jobs=4 3815.69 МБ/с
931 799.51 IOPS
3809.75 МБ/с
930 351 IOPS
3819 МБ/с
932 579 IOPS
Случайная запись 4k qd=1 fsync=1 234.13 МБ/с
57 178.48 IOPS
215.13 МБ/с
52 585 IOPS
239.38 МБ/с
58 438 IOPS
Случайное чтение 4k qd=1 fsync=1 61.22 МБ/с
14 948.9 IOPS
59.9 МБ/с
14 632 IOPS
61.56 МБ/с
15 033 IOPS

И таблицы по каждому диску:

Тест\NVMe# NVMe0 NVMe1 NVMe2 NVMe3
Последовательная запись 4M qd=32 974.63 МБ/с
232 IOPS
979.5 МБ/с
234 IOPS
975.38 МБ/с
233 IOPS
986.75 МБ/с
235 IOPS
Последовательное чтение 4M qd=32 3 675.63 МБ/с
877 IOPS
3 656.5 МБ/с
872 IOPS
3 676.5 МБ/с
877 IOPS
3 692 МБ/с
881 IOPS
Случайная запись 4k qd=128 jobs=4 768.25 МБ/с
187 595 IOPS
752.5 МБ/с
183 744 IOPS
765 МБ/с
186 831 IOPS
767.38 МБ/с
187 388 IOPS
Случайное чтение 4k qd=128 jobs=4 3 815.63 МБ/с
931 774 IOPS
3 809.75 МБ/с
930 351 IOPS
3 815.13 МБ/с
931 705 IOPS
3 817.88 МБ/с
932 322 IOPS
Случайная запись 4k qd=1 fsync=1 239.13 МБ/с
58 369 IOPS
239.25 МБ/с
58 384 IOPS
239.38 МБ/с
58 438 IOPS
239.25 МБ/с
58 428 IOPS
Случайное чтение 4k qd=1 fsync=1 61.56 МБ/с
15 029 IOPS
61.36 МБ/с
14 983 IOPS
61.53 МБ/с
15 025 IOPS
61.56 МБ/с
15 033 IOPS

Тест\NVMe# NVMe4 NVMe5 NVMe6 NVMe7
Последовательная запись 4M qd=32 980.5 МБ/с
234 IOPS
981.38 МБ/с
234 IOPS
983.63 МБ/с
235 IOPS
980 МБ/с
234 IOPS
Последовательное чтение 4M qd=32 3 685.75 МБ/с
879 IOPS
3 658.63 МБ/с
873 IOPS
3 687.63 МБ/с
879 IOPS
3 679.75 МБ/с
878 IOPS
Случайная запись 4k qd=128 jobs=4 768.25 МБ/с
187 659 IOPS
765.13 МБ/с
186 894 IOPS
767.5 МБ/с
187 480 IOPS
769.63 МБ/с
187 952 IOPS
Случайное чтение 4k qd=128 jobs=4 3818 МБ/с
932 354 IOPS
3812.88 МБ/с
931 177 IOPS
3819 МБ/с
932 579 IOPS
3817.25 МБ/с
932 134 IOPS
Случайная запись 4k qd=1 fsync=1 233.38 МБ/с
57 018 IOPS
215.13 МБ/с
52 585 IOPS
234 МБ/с
57 182 IOPS
233.5 МБ/с
57 025 IOPS
Случайное чтение 4k qd=1 fsync=1 61.26 МБ/с
14 960 IOPS
59.9 МБ/с
14 632 IOPS
61.28 МБ/с
14 962 IOPS
61.29 МБ/с
14 967 IOPS
2.2 Тесты mdadm
(назад к оглавлению)
Raid0:
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=8 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1
Для 5-ого рейда:
mdadm --create --verbose /dev/md5 --level=5 --raid-devices=8 /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1
(использование bitmap роняет производительность примерно на 7%)
2.2.1 Raid0
(назад к оглавлению)
Mdadm raid0
Последовательная запись 4M qd=32 7 272.72 МБ/с 1 818 IOPS
Последовательное чтение 4M qd=32 19 033.61 МБ/с 4 758 IOPS
Случайная запись 4k qd=128 jobs=4 4 014.99 МБ/с 1 027 838 IOPS
Случайное чтение 4k qd=128 jobs=4 4 674.35 МБ/с 1 196 633 IOPS
Случайная запись 4k qd=1 fsync=1 162.75 МБ/с 41 665 IOPS
Случайное чтение 4k qd=1 fsync=1 54.47 МБ/с 13 943 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Запись: 511.57 МБ/с 222 959 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Чтение: 1 193.58 МБ/с 305 556 IOPS
Случайное 100% чтение 4k (vsan easyrun) 1 612.74 МБ/с 412 860 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Запись: 1 495.52 МБ/с 191 427 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Чтение: 1 495.11 МБ/с 191 374 IOPS
Последовательная запись 256к (vsan easyrun) 9 480.26 МБ/с 37 921 IOPS

2.2.2 Raid5
(назад к оглавлению)
Mdadm raid5
Последовательная запись 4M qd=32 1 791.21 МБ/с 448 IOPS
Последовательное чтение 4M qd=32 18 925.42 МБ/с 4 731 IOPS
Случайная запись 4k qd=128 jobs=4 350.14 МБ/с 89 635 IOPS
Случайное чтение 4k qd=128 jobs=4 3 964.38 МБ/с 1 014 880 IOPS
Случайная запись 4k qd=1 fsync=1 37.74 МБ/с 9 662 IOPS
Случайное чтение 4k qd=1 fsync=1 59.4 МБ/с 15 207 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 270.77 МБ/с 116 801 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 631.7 МБ/с 161 716 IOPS
Случайное 100% чтение 4k (vsan easyrun) 1 784.94 МБ/с 456 943 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 376.44 МБ/с 48 184 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 376.49 МБ/с 48 190 IOPS
Последовательная запись 256к (vsan easyrun) 1 330.16 МБ/с 5 320 IOPS

2.2.3 Raid5 bitmap
(назад к оглавлению)
Mdadm raid5 bitmap
Последовательная запись 4M qd=32 1 768.41 МБ/с 442 IOPS
Последовательное чтение 4M qd=32 19 175.89 МБ/с 4 794 IOPS
Случайная запись 4k qd=128 jobs=4 330.92 МБ/с 84 714 IOPS
Случайное чтение 4k qd=128 jobs=4 3 941.75 МБ/с 1 009 087 IOPS
Случайная запись 4k qd=1 fsync=1 30.65 МБ/с 7 847 IOPS
Случайное чтение 4k qd=1 fsync=1 54.26 МБ/с 13 891 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 247.63 МБ/с 104 474 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 577.68 МБ/с 147 885 IOPS
Случайное 100% чтение 4k (vsan easyrun) 1 586.71 МБ/с 406 198 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 346.62 МБ/с 44 367 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 346.5 МБ/с 44 352 IOPS
Последовательная запись 256к (vsan easyrun) 1 195.97 МБ/с 4 784 IOPS

2.3 Тесты LVM
(назад к оглавлению)
lvcreate -i8 -I64 --type striped -l 100%VG -n lvm_stripe stripe
lvcreate -i7 -I64 --type raid5 -l 100%VG -n lvm_raid5 raid
2.3.1 Raid0
(назад к оглавлению)
LVM raid0
Последовательная запись 4M qd=32 8 229.46 МБ/с 2 057 IOPS
Последовательное чтение 4M qd=32 18 433.35 МБ/с 4 608 IOPS
Случайная запись 4k qd=128 jobs=4 3 667.81 МБ/с 938 959 IOPS
Случайное чтение 4k qd=128 jobs=4 3 631.25 МБ/с 929 599 IOPS
Случайная запись 4k qd=1 fsync=1 188.96 МБ/с 48 374 IOPS
Случайное чтение 4k qd=1 fsync=1 68.57 МБ/с 17 553 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 685.26 МБ/с 260 452 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 1 598.85 МБ/с 409 304 IOPS
Случайное 100% чтение 4k (vsan easyrun) 1 831.6 МБ/с 468 889 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 1 889.8 МБ/с 241 893 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 1 889.73 МБ/с 241 885 IOPS
Последовательная запись 256к (vsan easyrun) 9 210.2 МБ/с 36 840 IOPS

2.3.2 Raid5
(назад к оглавлению)
LVM raid0
Последовательная запись 4M qd=32 1 481.57 МБ/с 370 IOPS
Последовательное чтение 4M qd=32 15 419.73 МБ/с 3 855 IOPS
Случайная запись 4k qd=128 jobs=4 153.96 МБ/с 39 413 IOPS
Случайное чтение 4k qd=128 jobs=4 2 742.55 МБ/с 702 092 IOPS
Случайная запись 4k qd=1 fsync=1 13.71 МБ/с 3510 IOPS
Случайное чтение 4k qd=1 fsync=1 97.63 МБ/с 24 994 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 121.69 МБ/с 68 250 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 283.98 МБ/с 72 699 IOPS
Случайное 100% чтение 4k (vsan easyrun) 4 402.84 МБ/с 1 127 128 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 164.95 МБ/с 21 113 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 165.06 МБ/с 21 127 IOPS
Последовательная запись 256к (vsan easyrun) 1 211.52 МБ/с 4 846 IOPS

2.4 Тесты ZFS
(назад к оглавлению)
zpool create -o ashift=12 -O compression=lz4 -O atime=off -O recordsize=16k nvme /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1
zfs create -s -V 10T -o volblocksize=16k -o compression=lz4 nvme/iser
2.4.1 Stripe (Raid0)
(назад к оглавлению)
ZFS Raid0
Последовательная запись 4M qd=32 3 219.34 МБ/с 805 IOPS
Последовательное чтение 4M qd=32 4 808.8 МБ/с 1 202 IOPS
Случайная запись 4k qd=128 jobs=4 163.76 МБ/с 41 923 IOPS
Случайное чтение 4k qd=128 jobs=4 1 047.62 МБ/с 26 8191 IOPS
Случайная запись 4k qd=1 fsync=1 31.71 МБ/с 8 118 IOPS
Случайное чтение 4k qd=1 fsync=1 40.24 МБ/с 10 301 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 117.06 МБ/с 40 609 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 273.14 МБ/с 69 923 IOPS
Случайное 100% чтение 4k (vsan easyrun) 771.02 МБ/с 197 382 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 306.99 МБ/с 39 294 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 306.88 МБ/с 39 280 IOPS
Последовательная запись 256к (vsan easyrun) 3 113.8 МБ/с 12 455 IOPS

2.4.2 RaidZ (Raid5)
(назад к оглавлению)
ZFS RaidZ
Последовательная запись 4M qd=32 2 307.02 МБ/с 577 IOPS
Последовательное чтение 4M qd=32 3 591.35 МБ/с 898 IOPS
Случайная запись 4k qd=128 jobs=4 139 МБ/с 35 584 IOPS
Случайное чтение 4k qd=128 jobs=4 956.25 МБ/с 244 801 IOPS
Случайная запись 4k qd=1 fsync=1 28.33 МБ/с 7 252 IOPS
Случайное чтение 4k qd=1 fsync=1 38.63 МБ/с 9 888 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 96.72 МБ/с 31 730 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 225.71 МБ/с 57 780 IOPS
Случайное 100% чтение 4k (vsan easyrun) 713.06 МБ/с 182 544 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 235.53 МБ/с 30 146 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 235.52 МБ/с 30 146 IOPS
Последовательная запись 256к (vsan easyrun) 2 148.34 МБ/с 8 592 IOPS

+ ZFS с дополнительными настройки со стороны OS (Спойлер стало хуже) (https://habr.com/ru/articles/753322/#comment_26542901)

https://habr.com/ru/articles/753322/#comment_26542901
Ухудшение IO по сравнению с дефолтными параметрами - 18%
zfs_vdev_async_write_min_active=1024
zfs_vdev_async_write_max_active=2048
zfs_vdev_async_read_min_active=1024
zfs_vdev_async_read_max_active=2048
zfs_vdev_sync_write_min_active=1024
zfs_vdev_sync_write_max_active=2048
zfs_vdev_sync_read_min_active=1024
zfs_vdev_sync_read_max_active=2048
zfs_vdev_queue_depth_pct=100
Raid0
ZFS mod Raid0
Последовательная запись 4M qd=32 3 212.49 МБ/с 803 IOPS
Последовательное чтение 4M qd=32 4 734.04 МБ/с 1 184 IOPS
Случайная запись 4k qd=128 jobs=4 169.08 МБ/с 43 284 IOPS
Случайное чтение 4k qd=128 jobs=4 1 040.5 МБ/с 266 368 IOPS
Случайная запись 4k qd=1 fsync=1 33.39 МБ/с 8549 IOPS
Случайное чтение 4k qd=1 fsync=1 39.87 МБ/с 10 207 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 115.01 МБ/с 38 809 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 268.37 МБ/с 68 701 IOPS
Случайное 100% чтение 4k (vsan easyrun) 767.75 МБ/с 196 545 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 287.42 МБ/с 36 790 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 287.36 МБ/с 36 781 IOPS
Последовательная запись 256к (vsan easyrun) 3 114.09 МБ/с 12 456 IOPS

RaidZ
ZFS mod RaidZ
Последовательная запись 4M qd=32 3 071.09 МБ/с 767 IOPS
Последовательное чтение 4M qd=32 2 699.02 МБ/с 675 IOPS
Случайная запись 4k qd=128 jobs=4 142.07 МБ/с 36 370 IOPS
Случайное чтение 4k qd=128 jobs=4 864.97 МБ/с 221 431 IOPS
Случайная запись 4k qd=1 fsync=1 25.77 МБ/с 6 596 IOPS
Случайное чтение 4k qd=1 fsync=1 31.71 МБ/с 8 117 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 91.98 МБ/с 31 072 IOPS
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 214.63 МБ/с 54 943 IOPS
Случайное 100% чтение 4k (vsan easyrun) 640.15 МБ/с 163 878 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 217.06 МБ/с 27 783 IOPS
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 217.09 МБ/с 27 786 IOPS
Последовательная запись 256к (vsan easyrun) 2 629.31 МБ/с 10 515 IOPS
3. Итог первой части статьи
(назад к оглавлению)
По итогу первой части общая таблица, за 100% для Raid0 взят LVM Raid0:
MDADM Raid0 LVM Raid0 ZFS Raid0
Последовательная запись 4M qd=32 88.37% 100.00% 39.12%
Последовательное чтение 4M qd=32 103.26% 100.00% 26.09%
Случайная запись 4k qd=128 jobs=4 109.47% 100.00% 4.46%
Случайное чтение 4k qd=128 jobs=4 128.73% 100.00% 28.85%
Случайная запись 4k qd=1 fsync=1 86.13% 100.00% 16.78%
Случайное чтение 4k qd=1 fsync=1 79.43% 100.00% 58.68%
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 74.65% 100.00% 17.08%
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 74.65% 100.00% 17.08%
Случайное 100% чтение 4k (vsan easyrun) 88.05% 100.00% 42.10%
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 79.14% 100.00% 16.24%
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 79.12% 100.00% 16.24%
Последовательная запись 256к (vsan easyrun) 102.93% 100.00% 33.81%

Для 5-ого рейда - mdadm raid5:
MDADM Raid5 MDADM Raid5 bitmap LVM Raid5 ZFS RaidZ
Последовательная запись 4M qd=32 100.00% 98.73% 82.71% 128.80%
Последовательное чтение 4M qd=32 100.00% 101.32% 81.48% 18.98%
Случайная запись 4k qd=128 jobs=4 100.00% 94.51% 43.97% 39.70%
Случайное чтение 4k qd=128 jobs=4 100.00% 99.43% 69.18% 24.12%
Случайная запись 4k qd=1 fsync=1 100.00% 81.22% 36.33% 75.06%
Случайное чтение 4k qd=1 fsync=1 100.00% 91.35% 164.36% 65.02%
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write: 100.00% 91.45% 44.94% 35.72%
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read: 100.00% 91.45% 44.95% 35.73%
Случайное 100% чтение 4k (vsan easyrun) 100.00% 88.89% 246.67% 39.95%
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write: 100.00% 92.08% 43.82% 62.57%
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read: 100.00% 92.04% 43.84% 62.56%
Последовательная запись 256к (vsan easyrun) 100.00% 89.91% 91.08% 161.51%

Как и в прошлый раз - ситуация не сильно поменялась и LVM в 0-м рейде всё также наилучший вариант с точки зрения скорости. Ссылка на вторую статью-Источник
 
Loading...
Error