С момента прошлой статьи прошло 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
Графики по каждому из тестов для локальных тестов:
Итоговые графики:












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












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 сценария:
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 Тесты дисков
(назад к оглавлению)
Если отобразить получившиеся значения в формате графика, взяв среднее в каждом тесте получится следующая картина:

Наименование теста |
Среднее |
Минимальное |
Максимальное |
Последовательная запись 4M qd=32 |
980.22 МБ/с |
975.38 МБ/с |
986.75 МБ/с |
Последовательное чтение 4M qd=32 |
3 676.55 МБ/с |
3 656.5 МБ/с |
3 692 МБ/с |
Случайная запись 4k qd=128 jobs=4 |
765.45 МБ/с |
752.5 МБ/с |
769.63 МБ/с |
Случайное чтение 4k qd=128 jobs=4 |
3815.69 МБ/с |
3809.75 МБ/с |
3819 МБ/с |
Случайная запись 4k qd=1 fsync=1 |
234.13 МБ/с |
215.13 МБ/с |
239.38 МБ/с |
Случайное чтение 4k qd=1 fsync=1 |
61.22 МБ/с |
59.9 МБ/с |
61.56 МБ/с |
И таблицы по каждому диску:
Тест\NVMe# |
NVMe0 |
NVMe1 |
NVMe2 |
NVMe3 |
Последовательная запись 4M qd=32 |
974.63 МБ/с |
979.5 МБ/с |
975.38 МБ/с |
986.75 МБ/с |
Последовательное чтение 4M qd=32 |
3 675.63 МБ/с |
3 656.5 МБ/с |
3 676.5 МБ/с |
3 692 МБ/с |
Случайная запись 4k qd=128 jobs=4 |
768.25 МБ/с |
752.5 МБ/с |
765 МБ/с |
767.38 МБ/с |
Случайное чтение 4k qd=128 jobs=4 |
3 815.63 МБ/с |
3 809.75 МБ/с |
3 815.13 МБ/с |
3 817.88 МБ/с |
Случайная запись 4k qd=1 fsync=1 |
239.13 МБ/с |
239.25 МБ/с |
239.38 МБ/с |
239.25 МБ/с |
Случайное чтение 4k qd=1 fsync=1 |
61.56 МБ/с |
61.36 МБ/с |
61.53 МБ/с |
61.56 МБ/с |
Тест\NVMe# |
NVMe4 |
NVMe5 |
NVMe6 |
NVMe7 |
Последовательная запись 4M qd=32 |
980.5 МБ/с |
981.38 МБ/с |
983.63 МБ/с |
980 МБ/с |
Последовательное чтение 4M qd=32 |
3 685.75 МБ/с |
3 658.63 МБ/с |
3 687.63 МБ/с |
3 679.75 МБ/с |
Случайная запись 4k qd=128 jobs=4 |
768.25 МБ/с |
765.13 МБ/с |
767.5 МБ/с |
769.63 МБ/с |
Случайное чтение 4k qd=128 jobs=4 |
3818 МБ/с |
3812.88 МБ/с |
3819 МБ/с |
3817.25 МБ/с |
Случайная запись 4k qd=1 fsync=1 |
233.38 МБ/с |
215.13 МБ/с |
234 МБ/с |
233.5 МБ/с |
Случайное чтение 4k qd=1 fsync=1 |
61.26 МБ/с |
59.9 МБ/с |
61.28 МБ/с |
61.29 МБ/с |
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-м рейде всё также наилучший вариант с точки зрения скорости. Ссылка на вторую статью