惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

www.infosecurity-magazine.com
www.infosecurity-magazine.com
Vercel News
Vercel News
G
Google Developers Blog
MyScale Blog
MyScale Blog
The Register - Security
The Register - Security
I
InfoQ
Blog — PlanetScale
Blog — PlanetScale
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
V2EX - 技术
V2EX - 技术
F
Fortinet All Blogs
博客园_首页
S
Secure Thoughts
GbyAI
GbyAI
S
Security Affairs
N
News | PayPal Newsroom
Forbes - Security
Forbes - Security
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Security Archives - TechRepublic
Security Archives - TechRepublic
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
H
Heimdal Security Blog
A
About on SuperTechFans
P
Proofpoint News Feed
H
Help Net Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
L
LINUX DO - 最新话题
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
博客园 - 叶小钗
A
Arctic Wolf
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
人人都是产品经理
人人都是产品经理
T
Threat Research - Cisco Blogs
N
News and Events Feed by Topic
Security Latest
Security Latest
The Hacker News
The Hacker News
T
Tor Project blog
O
OpenAI News
博客园 - 三生石上(FineUI控件)
PCI Perspectives
PCI Perspectives
量子位
大猫的无限游戏
大猫的无限游戏
Stack Overflow Blog
Stack Overflow Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Производительность софт NVMe рейдов на основе mdadm, LVM и ZFS при использовании iSER и NVMe-oF (100G version) — Part 1
Dante4 · 2026-05-02 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение13 мин

Охват и читатели488

Обзор

С момента прошлой статьи прошло 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

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

0. Оглавление

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