С момента прошлой статьи прошло 2 года (и за время написания статьи ещё полгода), за это время:

  • количество дисков в системе увеличилось до 8 PM9A3 1.92TB;

  • вышло несколько новых прошивок на PM9A3;

  • сеть обновилась с ConnectX-3 Pro 40G до ConnectX-4 100G;

В связи с этим - было решено заново провести тесты.

У данной статьи такие же две цели, как и у прошлой:

  1. Протестировать производительность трёх систем объединения физических устройств в одно логическое, как для локального доступа к нему, так и для использования в качестве блочного массива для виртуализации.

  2. Создание бэкэнда для кластера в виде одноконтроллерного хранилища.

Иными словами выводы данной статьи не применимы, когда Вам нужно:

  1. Синхронное отказоустойчивое решение

  2. Надежность >>> скорость

  3. Долговременное решение, которое можно поставить и забыть

Краткое описание механики проведения тестов:

Тесты для дисков проводились 8 раз каждый. Каждый тест - 10 минут в длительности.
В таблицах ниже взяты средние значения.

Для локальных тестов софт рейдов - каждый тест проходил 2 раза по 10 минут.

Для конечной виртуализации использовался HCIbench - каждая группа тестов проходила 7 раз в рамках тех же ВМ, в итог шли только среднее значение за последние 4 теста. Подробнее в Part 2. "Тесты SAN".

TL;DR

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

Итоговые графики:

Последовательная запись 4M qd=32
Последовательная запись 4M qd=32
Последовательное чтение 4M qd=32
Последовательное чтение 4M qd=32
Случайная запись 4k qd=128 jobs=4
Случайная запись 4k qd=128 jobs=4
Случайное чтение 4k qd=128 jobs=4
Случайное чтение 4k qd=128 jobs=4
Случайная запись 4k qd=1 fsync=1
Случайная запись 4k qd=1 fsync=1
Случайное чтение 4k qd=1 fsync=1
Случайное чтение 4k qd=1 fsync=1
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write:
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write:
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read:
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read:
Случайное 100% чтение 4k (vsan easyrun)
Случайное 100% чтение 4k (vsan easyrun)
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read
Последовательная запись 256к (vsan easyrun)
Последовательная запись 256к (vsan easyrun)

Графики с визуализаций IO по времени (опорные точки каждые 20 секунд)

Последовательная запись 4M qd=32
Последовательная запись 4M qd=32
Последовательное чтение 4M qd=32
Последовательное чтение 4M qd=32
Случайная запись 4k qd=128 jobs=4
Случайная запись 4k qd=128 jobs=4
Случайное чтение 4k qd=128 jobs=4
Случайное чтение 4k qd=128 jobs=4
Случайная запись 4k qd=1 fsync=1
Случайная запись 4k qd=1 fsync=1
Случайное чтение 4k qd=1 fsync=1
Случайное чтение 4k qd=1 fsync=1
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write:
Случайное 70% чтение 30% запись 4k (vsan easyrun) Write:
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read:
Случайное 70% чтение 30% запись 4k (vsan easyrun) Read:
Случайное 100% чтение 4k (vsan easyrun)
Случайное 100% чтение 4k (vsan easyrun)
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write:
Случайное 50% чтение 50% записи 8к (vsan easyrun) Write:
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read:
Случайное 50% чтение 50% записи 8к (vsan easyrun) Read:
Последовательная запись 256к (vsan easyrun)
Последовательная запись 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) Итог первой части статьи

PCIe critical interrupt

Часть тестов имеют смешанное чтение\запись, для них данные операции в таблице разделены на строчку с чтением и строчку с записью.

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 сценария:

  1. Raid 0 - (все же делают бэкапы) как крайний сценарий производительного решения, когда за сохранность данных (не доступность) отвечает или репликация или бэкапы.

  2. Raid 5 - противники использования Raid 5 в таком сценарии уверен найдутся, учитывая последнии \*математические выкладки* по которым Raid 5 разваливается в 80% при ребилде, но как показывает статистика и практика на объёмах меньше 8ТБ\диск - это не так.

Все диски прежде чем начались тесты каждой группы были перезаписаны 2 раза (пока namespace не был заполнен на 100%). Это сделано, дабы исключить запись поверх нулей, которая приводит к завышенным значениям скорости, которые не всегда возможны в реальном сценарии (Да, в реальном сценарии и не рекомендуется заполнять SSD на 100%, как раз по этой причине).

Стоит отметить, что если создать namespace не на 100% объёма, а на ~70%, то производительность становится ближе к заявленной производителем.

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

Первые 6 тестов взяты отсюда, +4 теста взяты у vsan easyrun, пр крайней мере, максимально приближены к ним.

  1. Последовательная запись крупным блоком (4МБ)

  2. Последовательное чтение крупным блоком (4МБ)

  3. Случайная запись мелким блоком (4КБ) с высокой глубиной очереди (128) в 4 потока

  4. Случайное чтение мелким блоком (4КБ) с высокой глубиной очереди (128) в 4 потока

  5. Случайное чтение мелким блоком (4КБ) в 1 поток с глубиной 1

  6. Случайная запись мелким блоком (4КБ) в 1 поток с глубиной 1

  7. 70% случайного чтения чтение, 30% случайной записи мелким блоком (4k) с глубиной очереди 4 в 8 потоков с повторением 50% блоков и легко сжимаемых данных тоже 50%

  8. 100% случайного чтения чтение мелким блоком (4k) с глубиной очереди 4 в 8 потоков с повторением 50% блоков и легко сжимаемых данных тоже 50%

  9. 50% случайного чтения чтение, 50% случайной записи мелким блоком (8k) с глубиной очереди 4 в 8 потоков с повторением 50% блоков и легко сжимаемых данных тоже 50%

  10. 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 Тесты дисков

(назад к оглавлению)
Если отобразить получившиеся значения в формате графика, взяв среднее в каждом тесте получится следующая картина:

График МБ/с для каждого из теста блочного устройства
График МБ/с для каждого из теста блочного устройства

Наименование теста

Среднее

Минимальное

Максимальное

Последовательная запись 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-м рейде всё также наилучший вариант с точки зрения скорости. Ссылка на вторую статью

Комментарии (0)