Серия «Кудахтеры: захоронение данных»

58

Две истории про бекапы

На днях случились две занимательные истории про бекапы.

История первая.

Послушайте!
Ведь, если ЦОДы зажигают —
значит — это кому-нибудь нужно?

В Южной Корее сгорел ЦОД - G-Drive Fire Destroys 125,000 Officials' Data. Бекапов не было.
Все бы ничего, но это было официальное корейское государственное облако.
Согласно официальной части «просто загорелись литиевые батареи при переносе».
Неофициально злые языки говорят, что облако давно взломали или северные корейцы, или китайцы, и слили оттуда все, что было интересного, поэтому

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

Объемы данных заявлены как 858 терабайт. Бекапы, а что бекапы, ну не смогли:

The actual number of users is about 17% of all central government officials. According to the Ministry of the Interior and Safety, as of last August, 125,000 public officials from 74 ministries are using it. The stored data amounts to 858TB (terabytes), equivalent to 449.5 billion A4 sheets.

Вся эта история, конечно, вранье.

Система хранения данных 5 летней давности (из 2020 года), даже среднего сегмента, то есть обычная, серийная, продаваемая в розницу – это 36 SSD дисков формата PALM, размещаемые в систему хранения высотой 2 юнита, включенных через NVME.

Например, Huawei dorado 5000 v6 с дисками Huawei 15.36TB SSD NVMe Palm Disk Unit(7")

Или, система из того же ценового диапазона, 8 летней давности (из 2017 года) - HPE Nimble Storage All Flash Array AF60 или AF80, с заявленной емкостью системы хранения от 1.8 до 3.7 петабайт, с SSD дисками комплектом в 24 штуки - HPE Nimble Storage AF40/60/80 All Flash Array 184TB (24x7.68TB) FIO Flash Bundle.
Диски 2.5 и по 7.68TB Тб, так что потребуется больше дисков, больше места, и больше денег. Старая система, ничего не поделать.

В 2025 году петабайт, да еще с учетом сжатия и дедупликации, это даже не половина стойки.
Все современные системы хранения данных, кроме уж совсем SOHO (small office - home office):
и продаваемые как системы хранения данных,
и продаваемые как программно-определяемые системы хранения данных,
и продаваемые как гиперконвергентые среды (Storage space direct, vSAN) для гиперскейлеров и частных облаков,

Все они:
Во первых имеют в составе функционал репликации на «другой удаленный ЦОД» - то есть функционал метрокластера, синхронный или асинхронный. Это не бекап, это только репликация, но она спасет от пожара, потопа, и так далее (лицензируется отдельно).
Во вторых, так или иначе, интегрируются с системами резервного копирования, в том числе с офлайн хранением – с классическими ленточными библиотеками (LTO) или их эмуляцией, Virtual Tape Library (тот же QUADstor).

Что-то там еще пытаются рассказать, что такие объемы записать на кассеты нельзя .. ну что ж. Посчитаем.
Кассета Quantum LTO-9 – это 18 терабайт не сжатых данных.
10 кассет – 180 терабайт. 100 кассет – 1800 терабайт, 2.5 раза выполнить полный бекап этих 850 Тб
Расширяемая ленточная библиотека HPE Storage MSL3040 Tape Library идет с комплектом на 40 слотов, расширяется до 640 слотов.
Сам привод для дисков (стример), например HPE Storage LTO Ultrium Tape Drives, точнее HPE StoreEver MSL LTO-9 Ultrium 45000 Fibre Channel Drive Upgrade Kit (R6Q74A) какой-то странный, я что-то не пойму, почему везде пишут, что он не FC, а SAS 12G.
Но, какая разница. Для библиотеки (HPE StoreEver MSL 3040 Tape Library) заявлена скорость:
Maximum Data Transfer (Native) 22.5 TB/hr (21 LTO-9 drives)
Maximum Data Transfer (Native) 51.4 TB/hr (48 LTO-9 drives)
Источник: QuickSpecs, официальный сайт HPE.

То есть для «обычных» 4 приводов скорость составит около 4 терабайт \ час, 98-100 Тб\сутки. 850 заявленных терабайт можно было записать за 8-10 дней на 4 дисках, или, для записи «за сутки» потребовалось бы 35 приводов из максимум 48.

Деление полученного бекапа на несколько потоков для записи, Aux copy with Maximum streams для Commvault (не путать с Multiplexing, он не для этого) – функционал не очевидный, и возможно что-то надо покрутить – подпилить, но решаемый.

Так что, было бы желание, а коммерческие решения есть на рынке очень давно. Но, желания не было.

История вторая

Летом 2025 года Газпромбанк торжественно отчитался, цитата:

Москва, 18 июня 2025 года – Газпромбанк успешно завершил один из самых масштабных ИТ-проектов последних лет — переход на полностью импортозамещённую автоматизированную банковскую систему (АБС) ЦФТ, в основе которой лежит программно-аппаратный комплекс Скала^р (продукт Группы Rubytech) для построения доверенной ИТ-инфраструктуры финансового сектора на базе технологии Postgres Pro Enterprise.

Официальный сайт Газпромбанка, статья Газпромбанк завершил переход на импортозамещённую автоматизированную банковскую систему

Перешел и перешел, молодцы. Но попалась мне на глаза реклама ООО «Постгрес Профессиональный», под видом статьи Как Газпромбанк перешел на российскую СУБД. Поскольку это реклама под видом «колонки» (то, что реклама написано внизу, серыми буквами), то дата не проставлена.

Понравилась мне оттуда цитата:

Приведу пример с резервным копированием и восстановлением данных. Высокая скорость этих процессов была для нас одним из ключевых требований, потому что при наступлении фатальной ошибки критически важно быстро восстановиться из резервной копии. Postgres Pro Enterprise делает это за два часа, иностранные решения, которые мы тестировали, — за 14.

Возникает вопрос, как так это у них получается.

Если (по неизвестным причинам) использовать не средства резервного копирования (которые все равно используют RMAN), а сам RMAN, то он, если я правильно прочитал, позволяет выполнять параллельное восстановление, цитата:

As long as there are many backup pieces into a backup set, RMAN will use an appropriate number of channels - if allocated - to restore the database.
Ex:
7 backup pieces and 6 channels allocated - RMAN will use the whole 6 channels in parallel
6 backup pieces and 6 channels allocated - RMAN will use the whole 6 channels in parallel
5 backup pieces and 6 channels allocated - RMAN will use only 5 channels - one will be IDLE
rman restore datafile : how to force parallelism ?

Если говорить про Microsoft SQL, то там есть SMB multichannel, и давным давно есть Accelerated database recovery, ADR и Multi-Threaded Version Cleanup (MTVC)
Accelerated Database Recovery enhancements in SQL Server 2022

У Postgre тоже есть параллельное исполнение:

By using multiple concurrent jobs, you can reduce the time it takes to restore a large database on a multi-vCore target server. The number of jobs can be equal to or less than the number of vCPUs that are allocated for the target server.
Best practices for pg_dump and pg_restore for Azure Database for PostgreSQL

Но не в 7 же раз разница.

Заключение

Не знаю, как после первой истории не вспомнить загадку про трех черепах:
Три черепахи ползут по дороге. Одна черепаха говорит: “Впереди меня две черепахи”. Другая черепаха говорит: “Позади меня две черепахи”. Третья черепаха говорит: “Впереди меня две черепахи и позади меня две черепахи”. Как такое может быть?

Вторая история просто интересная.

PS. И про первую историю, пишут что: Gov't official in charge of state computer network dies after fall at Sejong complex.

Как говорил один мой знакомый, покойник: я слишком много знал.

Две истории про бекапы

PS. Тега commvault нет

Показать полностью 1
25

Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 1 - общая

Для лиги лени: ничего нового, просто запускаю DiskSPD.

Про тестирование и дисков, и систем хранении написаны сотни статей, и ничего нового вы тут не увидите, проходите мимо.
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 1 - общая
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 2 - виртуализация
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 3 – цифры и итоги

Зачем я прогнал эти тесты?
Конечно, во славу сатаны и для слез Греты. Одна из систем на текущей работе оперирует с несколькими базами данных – там и MS SQL, и Postgre, и MySQL, и, по моему, где-то был SQL Lite. Объемы небольшие – 25, 30 терабайт на базу. Не было задач для Tibero и Oracle RAC. Firebird на этой работе нет. На Oracle нет денег, на MS SQL еле выбили бюджет.
Система считает кое-какую аналитику, в связи с этим вычитывает из базы, которая еще не data lake или data warehouse, но что-то такое между этим. DWH тоже есть.
Проблема, которую соседи из DBA решают – что так медленно считается. Сейчас отчет генерируется 5-6  часов, это не устраивает бизнес, это не устраивает заказчиков, внутренних и внешних.
Точнее, бизнес это не устраивает настолько, что он был готов выделить большой бюджет с июля (финансовый год начинается 1 июля, если кто-то не в курсе), маленький "прямо сейчас", и выделить (списать) время на тесты.

С чем приходится иметь дело.
Это легаси поверх легаси. Сделано когда-то давно, в 2016-2017 годах, в режиме «надо вчера, берем сначал укропу, потом кошачью жопу». Поэтому, "надо было быстро", был взят MS Hyper-V, а не Broadcom ESXi. И не Nutanix Acropolis, который тоже KVM. Можно было взять Huawei FusionSphere, но не взяли.
Тут кто-то спросит, почему не KVM, не Xen. Хорошо, если не спросит про bhyve. Очевидно, спрашивающий не имеет ни малейшего представления о том, как тупил, и как отставал в развитии ванильный KVM в те годы, особенно под нагрузкой. Да и сейчас не лучше, взять что планировщик, что сбор событий для мониторинга.

Это легаси, и люди, которые это делали, уже уволились. Поэтому всплывает и совершенно очевидное «просто забыли», и не очень очевидное.

Железо и инструменты

На первом месте по оценке дисковой подсистемы, конечно, идут Microsoft DiskSPD и ATTO Disk Benchmark for Windows.
Оба очень неудобны, потому что:

Microsoft DiskSPD хорошо настраивается, воспроизводится, можно немного покодить и сделать хоть пакетное задание, хоть чего, но результаты выгружаются в никак не структурированный текстовый файл. Можно (GPT мне сделал за 5 минут, я бы провозился час) парсер эти логов в csv \ excel, но с xml иметь дело было бы проще.

ATTO Disk Benchmark поддерживает пакетные задания, дает воспроизводимые и вполне совпадающие с DiskSPD результаты, но максимальный размер тестируемого файла – 32 Гб.
На серверах по 1.5 Тб памяти, столько можно закешировать. 1.5 по современным меркам мало, сервера старые. На новых будут брать по 3 Тб, или что-то около того, не помню спецификацию. Я просил 6 Тб, почему-то решили скроить и на этом тоже, или не нашли в продаже модули по 512 Гб не помню. На новых материнских платах по 24 слота памяти. Если ставить модули 256 Гб, те же HPE P07654-B21, можно поставить 6144 Гб.
Очень жаль, что по размерности в сервера не лезут платы расширения типа BC61MRTC Huawei 12 slot memory riser board for huawei fusion server rh5885h v3. PN 03022SPP. Были у коллег такие, очень полезное решение.

Разумеется, есть FIO, и под линуксы я его люблю, не умею, но практикую.

Дальше возникают Nutanix XRay и VDbench \ HCIBench. Первое – оболочка для Fio, второе – имитатор рабочей нагрузки, а мне надо другое, такое как SQLIOSim и, особенно, HammerDB

Проблема со статьями и описаниями.

Проблема в том, что все вокруг забито CEO калом. Может попасться, цитата с одной помойки, причем из копроблога:

В тестирование лучше не лезть, если:

вы хотите с помощью синтетики имитировать поведение сложного приложения (например, базы данных);

Бред написан, хотя откуда там алмазы. Как раз имитация «сложного поведения как получится», это одна из задач нагрузочного тестирования. Вместе с выявлением узких мест по стеку под нагрузкой, как и умение найти, и наблюдать эти места, с нужной частотой и нужной реакцией - To strive, to seek, to find, как говорили древние.

Такого бреда в копроблогах полно. Впрочем, кому-то и GUI над DiskSPD в виде Crystalmark сойдет, а кто-то тестирует скорость путем копирования файла. Это (тестирование копированием) еще не самый плохой вариант, если вы хотите прикинуть скорость копировать.

Прочие проблемные места: Железо на уровне BIOS.
В BIOS современных серверов есть два десятка настроек, отвечающих за скорости, из которых важнейшими для нас являются кино и цирк* «зеленый» режим работы, все эти performance mode, авторазгон, NUMA и C2-C6 state. И, иногда, MWAIT, если вы работаете с виртуализацией. Не стоит забывать и о режиме работы PCIe, особенно если вы используете нормальные современные SSD, включенные через NVME. Как же я скучаю по оптанам, как они работали.
Особенно, если у вас PCIe линий мало, или стоят райзеры во фронт панелях, это придется учитывать.

Прочие проблемные места и выбор нужного железа: power-loss protection.
Просто процитирую: some enterprise drives that should work, is not recognized as devices with power-loss protection, and that means Storage Spaces will only send synchronous writes to the devices, and not use the internal buffer in the device, and that will degrade performance a lot on most drives.

Выбор нужного железа: прошивка.

У Micron выложена «последняя нужная версия прошивки для вашего SSD NVME», и две утилиты – для GUI (убогая) и CLI (топ за свои деньги).

У Kioxa ничего такого не нашел. Утилита есть, узнать про существование случайно взятой KIOXIA CD8P-R Series (2.5-inch) можно, спецификация есть, на странице KIOXIA Ecosystem Member: Vmware (не MS) есть какие-то списки, но чтобы найти, что для Model:KPM6XVUG1T60 есть прошивка 0102, и для KPM6XRUG960G серии PM6 есть прошивка 0102, надо очень постараться.

Список совместимости на Windows Server Catalog сделан плохо, но он хотя бы есть, и в нем:
KIOXIA Corporation, DapuStor Corporation, Huawei Technologies Co., Ltd. (внезапно), Infrasky Solutions – кто это? По маркировке это Intel), primeLine Solutions GmbH, Intel Corporation (с оптанами), Samsung Electronics CO., LTD. (с дисками HPE MZXL515THALA-00H3 MPK76H5Q и похожими), Sandisk Technologies, Inc. , SK Hynix, Western Digital Technologies, Inc.

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

Режим работы parity для Storage space и storage space direct, плюс кеширование и работа с числом колонок (NumberOfColumns) делают очень, очень больно. Особенно если у вас Allocation Unit Size (FS cluster size) – 4 кб, по умолчанию. А все почему? Потому что я не читал статью Storage Spaces and Slow Parity Performance.

Отступление.

Как же у автора статьи Storage Spaces and Slow Parity Performance все просто. Берем три диска, делаем -Interleave 32KB, делаем 3 колонки, делаем 64Кб NTFS, и готово. Stripe size 96 Кб, data size 64 Кб, 64 Кб записи кладется на два блока данных как 1:1, охапка дров и плов готов.
Вот бы мне перед тестами прочитать про AutoWriteCacheSize и Interleave для New-VirtualDisk.
попробую посчитать:

$ntfs_aus = ($number_of_columns - 1) * $interleave
Но ntfs_aus можно выбрать только из ряда 4,8,16,32,64 – и при этом, поскольку дальше мы идем в виртуализацию с ее vhdx с выбором его выбором LogicalSectorSizeBytes и PhysicalSectorSizeBytes между 512 и 4096, в любом сочетании, и учитывая как с этим Даталайн похлебал двумя руками с Read-Modify-Write.

Для 4 колонок – то есть, 4 дисков, и блока 4к, это будет решением уравнения
4к = (4-1) *х – но 4096 на 3 не очень делится.
Для 6 колонок, соответственно:
4к = (6-1) *х, но 4096 и на 5 не очень делится.
Остается что-то типа
64к = (5-1) *х, и тогда получаем 64/4 – interleave по 16к, NTFS 64k.
Но, оперируя на гипервизоре с NTFS 64k с дисками LogicalSectorSizeBytes \ PhysicalSectorSizeBytes 4096, получим блоки по 4к на диски с разметкой 64к, и привет Read-Modify-Write. Это что, получается надо ставить 5 колонок, и interleave в 1к ? Выглядит дико, как будет работать, если будет работать – не понятно. Про бекапы в таком случае лучше не забывать.

В сегодня лет до меня в очередной раз дошел термин full stripe, что еще раз говорит не только о пользе чтения,  но и пользе записи написания текста.

Почему эти блоки важны?

Потому что MS SQL пишет страницы данных – и это 64 Кб. Windows пишет блоками по, кажется, 4 кб. Linux – 8 кб, Postgre вроде тоже 8, но MySQL - 16 KB.
ESXi – 32 Кб (если вы зачем-то отдали диски через iSCSI или NFS).
Внизу все равно физические диски – или очень старые с их 512 \ 512e, или новые, 4k. Причем еще надо посмотреть, что там для SAS SSD и SAS NVME, какая там разметка (если этот термин вообще применим к SSD).

Все грустно у пакетишки.

И, наконец, Mirror-accelerated parity, MAP

Чудовищно недооцененный режим работы для storage space и S2D , storage space direct

Идея простая, пишем данные на зеркало, потом в фоновом режиме переносим. Проблема в том, что он плохо документирован, настраивается только из poweshell, дефолтные настройки неудобные и кривые, и в целом командная строка и пресет к нему ориентирован на то, чтобы иметь два дисковых пула, HDD и SSD. Этакий tiering, хотя это он и есть. Сейчас кругом SAS SSD и NVME SSD, но никаких изменений не внесено. Есть и есть, но не развивается.

Но при этом в одной статье пишут про StorageBusCache для MAP, а в другой -

Storage Bus Layer (SBL) cache isn't supported in single server configuration. All flat single storage type configurations (for example all-NVMe or all-SSD) is the only supported storage type for single server.

Вот с этим грузом знаний мы постараемся долететь до второй части.

Ссылки

Use DISKSPD to test workload storage performance

Github Microsoft diskspd

GitHub VMFleet

Next Generation Performance Tools: VMFleet 2.0

VMFleet 2.0 - Quick Start Guide

ATTO Disk Benchmark Windows

ETCD Performance and Optimization. Оригинал от Matteo Olivi and Mike Spreitzer утерян где-то в IBM, но остался в виде статьи Storage speed suitable for etcd? Let's ask fio в инернетах.
Оригинал был тут https://www.ibm.com/blogs/bluemix/2019/04/using-fio-to-tell-whether-your-storage-is-fast-enough-for-etcd/. Есть перевод от Фланта - Как с fio проверить диски на достаточную производительность для etcd

index : fio

fio - Flexible I/O tester rev. 3.38

Performance benchmarking with Fio on Nutanix

Тестирование производительности гиперконвергентных систем и SDS своими руками.
Облако на Microsoft Hyper-V, часть 3: хранилище Storage Spaces в части Read-Modify-Write
Ссылок нет, потому что не хватало еще ссылаться на оптимизационные помойки

Enterprise Storage Benchmarking Guide и его перевод - Руководство по синтетическому бенчмаркингу корпоративных систем хранения данных и лучшие практики. Часть 1. Общая теория, методы и подходы

Тестирование СХД

Use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem

Use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem on Linux

SQL Server Distributed Replay overview - Distributed Replay deprecation in SQL Server 2022

SqlQueryStress

SQL Hammer (everything is a nail) . Примечание от рецензента: из РФ ссылка не работает,  поэтому начинать лучше тут, github  - shutdownhook.

HammerDB

Database files and filegroups

Storage Spaces and Slow Parity Performance

New-VirtualDisk

Mirror-accelerated parity

Storage Spaces Direct Mirroring vs MRV (Parity) performance

Don't do it: consumer-grade solid-state drives (SSD) in Storage Spaces Direct

Storage Spaces series:
Part 1 Storage Spaces – Current / Old Setup
Part 2 Storage Spaces parity in Server 2025
Part 3 Storage Spaces 2025 Mirror-accelerated Parity and Storage Bus Cache

Kioxia SSD Utility Management Software

Choose drives for Azure Stack HCI and Windows Server clusters

Windows Server Catalog (HCL)

Примечание от рецензента: не раскрыта тема LRC (local reconstruction codes) и Parallel Failure Rebuild
LRC Erasure Coding in Windows Storage Spaces (2013 Storage Developer Conference.) Наконец раскрывают тему Рида, Соломона и Галуа, на странице 21.  

Maximally Recoverable Local Reconstruction Codes или MS research.

* важнейшими для нас являются кино и цирк

Перефраз цитаты Луначарского:
Владимир Ильич несколько раз мне указывал на то, что из всех областей искусств наибольшее государственное значение в настоящий момент может и должно иметь кино

Показать полностью

Производительность систем хранения данных: успехи импортозамещения

Для лиги лени. «российский топ» сравним, 1.6 против 2.0 очков,  с китайской СХД «нижнего ценового сегмента» из 2020 года.

Прислали тут новости по импортозамещению, посмотри, пишут, как мощны очередные лапищи.
Посмотрел.

Март 2016. HPE 3PAR StoreServ 8450 Storage System, система хранения данных среднего ценового диапазона, выдала 545164 IOPS в тесте Performance (SPC-1 IOPS).

Декабрь 2017. Huawei OceanStor Dorado5000 V3, система хранения данных среднего ценового диапазона, all-flash, выдала 800465 IOPS в тесте Performance (SPC-1 IOPS).

Декабрь 2018. Huawei OceanStor 5600 V5, гибридная система хранения данных среднего ценового диапазона, выдала 1100252 IOPS в тесте Performance (SPC-1 IOPS).

Март 2020. Huawei OceanStor 5310 V5, гибридная система хранения данных, самого низа среднего ценового диапазона, выдала 1600658 IOPS в тесте Performance (SPC-1 IOPS).

Август 2020. Huawei OceanStor 5510 V5, гибридная система хранения данных, среднего ценового диапазона, выдала 3800781 IOPS в тесте Performance (SPC-1 IOPS). Пруфы

Май 2025. Компания YADRO объявила о выходе первой на российском рынке All-Flash системы хранения данных TATLIN.AFA с end-to-end NVMe-архитектурой .. TATLIN.AFA — система хранения данных старшего уровня с рекордной производительностью, высокой надёжностью и отказоустойчивостью для решения самых амбициозных и требовательных задач настоящего и будущего. Отличается высокой производительностью: до 2 млн операций ввода-вывода в секунду (IOPS). Источник.

То есть, производительность старшей аналоговнетной системы находится на уровне «чуть выше дна в 2020», или, если открыть Micron 7500 SSD key specifications, то на уровне производительности 2 (двух) модулей Micron 7500 PCIe Gen4 1x4, NVMe v2.0b , для которых заявлен миллион IOPS на чтение блоком 4к.

Зато проплатили блог на самой SEO – помойке всего рунета.

Какие-то еще комментарии? Избыточны. Кроме подтверждения корреляции: если у фирмы в 2025 году есть блог на самой SEO – помойке рунета, то ее продукция полный шлак.

Показать полностью
5

Производительность систем хранения данных: зато свое-4

Для лиги лени: российские облака на таком же, как у всех,  Intel \ Micron \ KIOXIA inside теряют 90% производительности железа на «своих и опенсорс решениях».

На одном CEO-ресурсе вышла очередная реклама «зато свое». Интересны только цифры, цитата:

Локальные диски:
При SLA bs=4k, iodepth=16, randaccess, скорость чтения — 75 000 IOPS, скорость записи — 50 000 IOPS.
Ceph:
При идентичных условиях SLA Ceph обеспечивает скорость чтения на уровне 16 000 IOPS и скорость записи в 8000 IOPS.
High-IOPS:
При идентичных условиях SLA скорость чтения — 45 000 IOPS, скорость записи — 30 000 IOPS.

КАК? Как у них это получилось?
Вышедшие полтора года назад (Oct 17, 2023 диски Micron 7500 дают:
- Sequential 128KB READ: Up to 7000 MB/s ; - Sequential 128KB WRITE: Up to 5900 MB/s
- Random 4KB READ: Up to 1,100,000 IOPS; - Random 4KB WRITE: Up to 410,000 IOPS

Samsung:
Samsung 980 Pro SSD Random Write 4K QD32 Up to 1,000,000 IOPS
Samsung 990 PRO - while 4TB even higher random read speed of up to 1,600K IOPS.

Broadcom MegaRAID 9670W-16i RAID Card
4KB Random Reads (IOPs) - 7,006,027 ; 4KB Random Writes (IOPs) - 2,167,101
NVME Raid – We Need To Go Deeper, или что там на глубине. GPU over NVME, с водяным охлаждением
Xinnor xiRAID 4.1 уже дает 65 миллионов IOPS на чтение, и поддерживает HA.

Еще в 2017 году для Microsoft Ignite – Micron собрал кластер на почти миллион IOPS - Microsoft storage spaces direct is an IO performance beast.

Что Microsoft S2D, что Broadcom vSAN, что Nutanix – все они, на самом обычном железе, уже несколько лет выдают 5-10 миллионов IOPS.
СХД Huawei на том же самом железе от Intel выдает от 5 до 20 миллионов IOPS, в зависимости от модели.

С чем бы это еще сравнить? Azure managed disk types:
Azure Premium SSD v2 - 80,000 IOPS
Azure Ultra Disk  - 400,000 IOPS
И это с репликацией в соседний ЦОД, а не «без репликации».

Концовка.

Я не понимаю, как в российских облаках умудряются терять скорость локальных дисков с пары миллионов до пары десятков тысяч IOPS.На точно таком же железе, с тем же самым Intel Inside. Это же не рокет сайнс и не AI-accelerated cloud на чипах Ascend.
Точно так же не понимаю, как можно строить такие конструкции, где шансы получить кашу вместо данных значимо растут.
Может и понимаю. Осенью 2024 году баг «viostor Reset to device» из апреля 2022 – в российских облаках у коллег воспроизводился на отлично. Российская техподдержка только мычала «попробуйте включить и выключить».
И, какие они российские. Китайские или корейские сервера, американские Cisco и Arista в сети, и американская VMware Cloud Foundation – для тех, кому надо чтобы работало. Или то, что описано сверху – для всех остальных.
Колокол уже прозвонил, Broadcom уже объявил конец эпохи - Announcing the VMware Cloud Foundation 9.0 Beta Program. Еще год-два и российским облакам придется слезать с VCF 8, а на VCF 9 уже будет совсем другая цена, и лицензии.
Reminder: vSphere 7 to reach End of Service on Oct 2, 2025
VMware ESXi 8.0 will reach the end of general support on October 11, 2027

Показать полностью
2

Новый ноутбук 2: скорость, плюсы-минусы, DiskSPD, Hyper-V и далее

Для лиги лени: привыкание к новому и бесполезные тесты часть следующая. И немного powershell

Начало тут:

Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 1 - общая
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 2 - виртуализация
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 3 – цифры и предварительные итоги
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 4 – что там изнутри виртуализации
Новый ноутбук: скорость, плюсы-минусы, DiskSPD, Hyper-V и продолжение про методику тестирование скорости

Решил я доделать сбор статистики перед тем, как что-то смотреть изнутри виртуалки, тем более вложенной виртуализации.

Предупреждение еще раз. Все данные ниже можно принимать во внимание, но не стоит рассматривать как какой-то эталон.

Что получил:

Один тред, один файл, блок 4k на чтение.

1 Влияние длины очереди. Тут была таблица, но не вставилась, поэтому просто цифрами:

После очереди == 4, нагрузка не растет, около 90k IOPS

2 Влияние числа тредов и числа файлов в работе на общий IOPS

Примечание: для 2 и 3 файлов – один файл был размещен на другом логическом диске

Тут тоже была таблица, но мне лень вставлять ее даже картинкой. На картинке опечатка, везде k, тысячи IOPS.

IOPS

IOPS

Затем общий IOPS не рос.

До 10 тредов IOPS на поток падало – с 40 тысяч при 1 треде на каждый файл.
При соотношении 2 файла \ 3 треда, всего 6 тредов, и 3 файла \ 2 треда – выйдя на примерно 40k IOPS на поток, при 4 тредах и 3 файлах просев до 33-35 k IOPS на поток

На 14 (7\2) и 15 (5\3) тредах начинает падать IOPS\thread – с 35 до 17.
На 14 – 10 по 35k, 4 по 17k
на 15 – 9 треда по 35k, 3 треда по 17k.
Что отлично укладывается в логику 12 тредов CPU, из которых 9 работают на один тред, генерируя по 35k, и 3 CPU потока обрабатывают по 2 дисковых треда по 17k.
На 24 тредах (2 файла \ 12 тредов и 3 файла \ 8 тредов)  картинка та же – все треды примерно по 17.5 IOPS
На 26 тредах (2\13 и 3\12) -4-6 потоков падают до 10k IOPS \ thread. Суммарно те же 40k

И для записи, пиковое значение было получено при 2 тредах на каждый их 3 файлов, 240k IOPS итого, по 40k IOPS на тред. Затем было только хуже –

Например, на казалось бы ПОЧТИ то же самое, 3 треда на два файла – производительность упала до 20k на тред, 120k IOPS.

На 4 потоках на файл, 12 файлах – производительность вроде бы была 210k, но есть разброс – от 15 до 20k IOPS на тред, перемерять надо.

На этом обзор физики можно и закончить, с выводами:
AMD потоки работают интереснее, чем у Intel, в именно этой реализации.
Максимальная производительность по чтению по дисковым операциям на физическом хосте достигается на числе потоков данных = числу потоков CPU
Производительность на чтение от очереди зависит достаточно слабо, то есть на очереди 8 выжало не 430, а 440k IOPS, на очереди 16 и 32 – 450k IOPS.

Внезапно, наловил ошибок – удалил старые файлы тестов, а новые, с тем же именем, не создаются!
There has been an error during threads execution
Error generating I/O requests
Оказалось, в какой-то момент в середине ночи удалил параметр с размером файлов.  Случайно. И даже не заметил. Поправил и завелось.

И, наконец, влияние read-modify-write для любителей дисков потолще.

Показать не удалось, потому что:
Картина на файле 10 гигабайт и длительности записи 10 секунд и прогреве W=10

Картина приплыли на файле 200 гигабайт при прогреве W=2

До этого прогрев был W=10. И, в таблице ниже, 3.5k это не опечатка, 3500 IOPS

Везде забыл проставить k, это тысячи IOPS

Везде забыл проставить k, это тысячи IOPS

Как бы так сказать, что при таком разбросе данных, это не тестирование, а полная и беспросветная лажа?

Потому что ничего не понятно, кроме того, что не зря замерял при разных параметрах. Получить лажу и увидеть ее полезно.

Перейдем к SQLsim.
Для опытов был взят Microsoft® SQL Server® 2019 Express,
Будете ставить – не забывайте сразу качать SQL Server Management Studio, пригодится.

файл отдельно не качается (я не нашел), поэтому скачал, поставил и вот -
C:\Program Files\Microsoft SQL Server\MSSQLXX.<InstanceName>\MSSQL\Binn

В GUI варианте теста «по умолчанию» ничего сложного – размеры файлов, размещение, число циклов, длина теста. Просто, наглядно.

Одна проблема – по умолчанию на 1 цикл поставлено 600 секунд (10 минут), и 12 циклов – то есть базовый тест – это два часа.

В конце теста генерируется sqliosim.log.xml.

Вторая проблема: тест не выдает в итоге каких-то цифр, типа «вы молодец, давайте дальше» - только таблицу

Display Monitor ********** Final Summary for file sqliosim.ldx ********** CLogicalFile::OutputSummary fileio.cpp

Display Monitor File Attributes: Compression = No, Encryption = No, Sparse = No CLogicalFile::OutputSummary fileio.cpp

Display Monitor Target IO Duration (ms) = 100, Running Average IO Duration (ms) = 0, Number of times IO throttled = NN, IO request blocks = NN CLogicalFile::OutputSummary fileio.cpp

Display Monitor Reads = NN, Scatter Reads = 0, Writes = NN, Gather Writes = 0, Total IO Time (ms) = NN CLogicalFile::OutputSummary fileio.cpp

Display Monitor DRIVE LEVEL: Sector size = 512, Cylinders = NN, Media type = NN, Sectors per track = 63, Tracks per Cylinders = 255 CLogicalFile::OutputSummary fileio.cpp

Display Monitor DRIVE LEVEL: Read cache enabled = Yes, Write cache enabled = Yes CLogicalFile::OutputSummary fileio.cpp

Display Monitor DRIVE LEVEL: Read count = BB, Read time = BB, Write count = BB, Write time = NN, Idle time = NN, Bytes read = NN, Bytes written = NN, Split IO Count = 0, Storage number = NN, Storage manager name = VOLMGR  CLogicalFile::OutputSummary fileio.cpp

Я молодец, ок, а дальше что?

Конечно, если вы молодец (как я), то будете смотреть не только в окно самой программы, а запустите resmon и будете смотреть нагрузку по дискам, очереди, задержки, etc.

Перейду к hammerdb .. но это уже другая история.

В следующих сериях, теперь уже точно!
Опыты на виртуальной машине на 3 ядра.

CPU affinity
Опыты на Debian внутри Hyper-V, опыты с Proxmox nested. Stay tuned!

Литература

Performance benchmark test recommendations for Azure NetApp Files
Azure NetApp Files regular volume performance benchmarks for Linux
Hidden Treasure Part 1: Additional Performance Insights in DISKSPD XML
Hidden Treasure Part 2: Mining Additional Insights

Command line and parameters
Customizing tests
Use an XML file to provide DiskSpd parameters
Use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem

SQL Server I/O Basics, Chapter 2
Use the SQLIOSim utility to simulate SQL Server activity on a disk subsystem on Linux
SQLIOSim Create a realistic I/O load for stress-testing SQL Server 2005

about_Comparison_Operators
about_Assignment_Operators

hammerdb Documentation

PS

И немного powershell.

Часть 1, которую вы уже видели

$pciStats = (Get-WMIObject Win32_Bus -Filter 'DeviceID like "PCI%"').GetRelated('Win32_PnPEntity') |

foreach {

# request connection properties from wmi

[pscustomobject][ordered]@{

Name = $_.Name

ExpressSpecVersion=$_.GetDeviceProperties('DEVPKEY_PciDevice_ExpressSpecVersion').deviceProperties.data

MaxLinkSpeed  =$_.GetDeviceProperties('DEVPKEY_PciDevice_MaxLinkSpeed'  ).deviceProperties.data

MaxLinkWidth  =$_.GetDeviceProperties('DEVPKEY_PciDevice_MaxLinkWidth'  ).deviceProperties.data

CurrentLinkSpeed  =$_.GetDeviceProperties('DEVPKEY_PciDevice_CurrentLinkSpeed'  ).deviceProperties.data

CurrentLinkWidth  =$_.GetDeviceProperties('DEVPKEY_PciDevice_CurrentLinkWidth'  ).deviceProperties.data

} |

# only keep devices with PCI connections

Where MaxLinkSpeed

}

$pciStats | Format-Table -AutoSize


Get-CimInstance -ClassName Win32_Volume | Select-Object DriveLetter, FileSystem, BlockSize| Format-Table -AutoSize


$Path001 = 'C:\DiskSpd\amd64\'

$Sp = $Path001 + "diskspd.exe"

cd $Path001

$Rn = Get-Random -Minimum 1 -Maximum 10

$Version = "070_" + $Rn


$Drives = @("C")

$FilesTemp = "Data4del"

$File001 = "deleteme_01a.dm"

$File002 = "deleteme_02a.dm"

$File003 = "deleteme_03a.dm"

$Out021 = $Drives[0] + ':\' + $FilesTemp + '\' + $File001

$Out022 = $Drives[0] + ':\' + $FilesTemp + '\' + $File002

$Out023 = "D" + ':\' + $FilesTemp + '\' + $File003

# $OutsFilesAA = @("$Out021", "$Out023", "$Out021 $Out022","$Out021 $Out023","$Out021 $Out022 $Out023") - не работает вот так и все.

$OutsFilesAA = @( "$Out022")

$Logs = @()

$Threads = @("-t1","-t2", "-t3", "-t4","-t5","-t6","-t7","-t8","-t9","-t10","-t11","-t12","-t13","-t14","-t15")

# $Threads = @("-t1")

# $Write = ("-w0","-w30", "-w100")

$Write = @("-w100")

#$BlockSize = ("-b4k","-b8k")

$BlockSize = @("-b4k")

# $Outstanding = @("-o2","-o4","-o8","-o16","-o32")

$Outstanding = @("-o2")

$Size = "-c200G"

$Time = "-d10"


foreach ($OutFilesGr in $OutsFilesAA){

foreach ($Drv in $Drives){

foreach ($Bl in $BlockSize) {

foreach ($Wr in $Write) {

foreach ($Outs in $Outstanding){

foreach ($T1 in $Threads){


$TimeNow = get-date -UFormat "-%d-%m-%Y-%R" | ForEach-Object {$_ -replace ":","-"}

Write-Host "TT " $TimeNow

$Out001 = $Drv + ':\' + $FilesTemp + '\' + $File001

$Out002 = $Drv + ':\' + $FilesTemp + '\' + $File002

$Out003 = "D" + ':\' + $FilesTemp + '\' + $File003


$Stat1 = $Drv + ':\' + $FilesTemp + '\' + $Version + $TimeNow + "_" + $T1 + $Drv + $Outs + $T1 +'_1.log'

$Stat2 = $Drv + ':\' + $FilesTemp + '\' + $Version + $TimeNow + "_" + $T1 + $Drv + $Outs + $T1 +'_2.log'

$Stat3 = $Drv + ':\' + $FilesTemp + '\' + $Version + $TimeNow + "_" + $T1 + $Drv + $Outs + $T1 +'_3.log'

$Logs += $Stat1


Write-Host "testing mode " $T1 $Wr $Bl $Outs 'time' $Time # "GR" $OutFilesGr

# &$Sp $T1 $Wr $Bl -W10 $Outs $Time -Suw -D -L $Size $Out021 $Out022 > $Stat1

&$Sp $T1 $Wr $Bl -W10 $Outs $Time -Suw -D -L $Size $Out021 > $Stat1

}}}}}}

И часть 2

$FilesTempDir = "c:\Data4del\"

$StatFiles = "069"

$StatFilesList = Get-ChildItem -Path $FilesTempDir | Where-Object {$_.Name -like ($StatFiles + '*') | Sort-Object -Property CreationTime  }


foreach ($MyFile in $StatFilesList){

$TempData1 = Get-Content $MyFile.FullName  | Where-Object {$_ -like "Command Line*"}

$TempData1

$TempData2 = Get-Content $MyFile.FullName  | Where-Object {$_ -like "total:*"}

$TempData2

}

Показать полностью 3
33

Скорость работы storage space в Windows server 2025 – первое приближение и методология

Для лиги лени: нытье какое-то и унылые цифры про software-defined storage, что там как.

Немного теории - Software-defined storage, что это

Лет 20 назад, в 2004 году, когда я еще ходил в школу, и читал комиксы про всамделишные приключения сексуального вампира, системы хранения данных жили отдельно (за дорого и очень дорого), сервера отдельно. Только-только вышел  SQL Server 2000 Service Pack 2 (SP2), кластеризация на уровне сервиса была у SQL  (кто хочет, найдет статью Clustering Windows 2000 and SQL Server 2000, Brian Knight, first published: 2002-07-12) , и вроде, в Oracle RAC.

Почему было такое деление? Потому что расчет четности и двигание блоков данных туда-сюда – операция, с одной стороны математически не самая простая, с другой – рутинная, использовать под них относительно медленный процессор общего назначения, хоть x86, хоть уже умершие  к тому времени Motorola 68060 и еще живые UltraSPARC II, не очень рационально.

К середине 2010х ситуация постепенно изменилась. Производительность x86 выросла, цена за операцию упала. Со стороны классических СХД еще в 2015 в тех же 3Par стоял отдельный модуль для расчета чего-то-там, в Huawei Oceanstor v2 можно было покупать отдельный модуль LPU4ACCV3 Smart ACC module, но основная нагрузка уже считалась на x86 -  HPE 3PAR StoreServ 7000 уже был на  Intel Xeon. К 2019 Huawei перешел на Arm, точнее на Kunpeng 920.

Примерно в то же время, а точнее в Microsoft Windows Server 2012 появилась поддержка динамических рейдов в виде Storage Spaces, плюс появился SMB Direct и SMB Multichannel, к R2 Добавились local reconstruction codes, в 2016 Server появилась новая функция – S2D, storage space direct, но это уже старая история, а там и ReFS подоспел, с своей защитой данных от почти чего угодно, кроме своей дедупликации и своего же патча на новый год (January 2022 Patch Tuesday KB5009624 for Windows Server 2012 R2, KB5009557 for Windows Server 2019, and KB5009555 for Windows Server 2022.)

Все бы было хорошо и там, и тут, НО.

Но. S2D поддерживается только в редакции Datacenter, а это не просто дорого, а очень дорого. На то, чтобы закрыть этими лицензиями небольшой кластер серверов на 20 – уйдет столько денег, что проще купить классическую СХД.

Но. Если у вас в кластере работает хотя бы 1 (одна) виртуальная машина с Windows Server, вы все равно обязаны лицензировать все ядра всех узлов кластера лицензиями Windows Server. Тут уже надо считать, что выгоднее – попробовать закрыть все узлы лицензиями STD, с их лимитом в 2 виртуальные машины на лицензию, или лицензировать Datacenter.

Но. При этом все равно можно НЕ иметь нормальной дедупликации и компрессии (DECO) на Datacenter, НО иметь вечные проблемы со скоростью, если ваша система настроена криворукими интеграторами или таким же своим же персоналом, набранным за 5 копеек, и который тестирует скорость СХД путем копирования файла. Или путем запуска Crystal Disk mark с настройками по умолчанию.

Попутно получая проблемы с резервным копированием, если вы DECO включили, а руководство по резервному копированию с DECO Windows Server не прочитали.

Все очень просто: если экономим на кадрах, то покупаем классический выделенный СХД, в нем в разы меньше настроек и ручек, которые может крутить пользователь в GUI. Масштабируем емкость покупкой новых полок. Скорость так просто не масштабируется, как у вас стоит 2 или 4 или 8 контроллеров, так они и стоят (до 16 контроллеров, если вам очень надо).

Это не уменьшает проблем с обслуживанием, на классической СХД тоже очень желательно проводить обновление и прошивки СХД, и прошивки дисков. На некоторых СХД раньше (10-15 лет назад) обновление прошивки вполне могло привести к потере разметки и потере данных (ds4800). Но там порой и замена дисков вела к факапам, как на ds3500. Но и наоборот, в IBM была версия прошивки, которая работала 1.5, чтоли, года. Но и не прошиваться нельзя – как недавно вышло с дисками HPE и не только, которые работали ровно 40.000 часов (Dell & HPE Issue Updates to Fix 40K Hour Runtime Flaw, update to SSD Firmware Version HPD8 will result in drive failure and data loss at 32,768 hours of operation, FN70545 - SSD Will Fail at 40,000 Power-On Hours и так далее).
С как-бы всеядными MSA (старых версий) можно было сделать самому себе больно иначе – купить саму СХД, а диски туда поставить подешевле, даже SATA с их надежностью (Latent Sector Error (LSE) rate) в «1/10(-16)», и получить проблемы при ребилде даже в Raid 6. Прошиваться страшно, не прошиваться тоже страшно, зато использовать левые диски не страшно.

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

Почему Windows 2025 и storage space? Ведь есть же ..

Есть. На рынке РФ, кроме storage space и S2D, есть:

VMware by Broadcom vSAN. Есть специалисты, нет возможности купить напрямую нормальную подписку.
Высокие требования к оборудованию – нужны не бытовые дешевые SSD.
Высокие требования к людям - очень нужны умеющие и любящие читать люди.
Нужно планирование перед внедрением.
Нужна вменяемая сетевая команда, которая сможет настроить хотя бы DCB + RDMA и не впадает в священный ужас при виде Mellanox.

Nutanix. Давно ушел и с российского рынка, да и на мировом как-то скатывается в нишевое решение. Ограничения те же, что для vSAN.

Ceph. Есть и такие решения, но. Для его промышленной эксплуатации, а не в варианте «оно сломалось и не чинится, что же делать» нужны отдельные люди. Таких людей в РФ человек.. ну 20 - 40. Один из них – автор статьи Ceph. Анатомия катастрофы. Статью советую прочитать.
И это решение, если вы хотите хоть какой-то скорости, начинается с фразы «если у вас еще нет 200G коммутатора и карт, то вначале хватит и 100G, по два 100G порта на хост». Демо-стенд можно запустить хоть на 1G. Работать даже на 10G будет очень болезненно. Если еще на стадии демо начать задавать неудобные вопросы про RDMA и Active-active, то будет еще больнее. Почти так же больно, как спрашивать, можно ли использовать сервера, на которых развернут Ceph, под Openstack. И как его, Ceph, бекапить на ленты, как обеспечить аналог Veeam Direct SAN Access или Commvault Direct-Attached Shared Libraries или аналог Metro / Replication / Stretched Clusters

Остальные решения, особенно импортозамещающие, не стоят и рассмотрения. Проблема с ними всеми одна и та же – их разработчики имеют очень ограниченное представление о том, как работает ядро, как с ядром и драйверами взаимодействует виртуализация, что может быть намешано в сетевом стеке и как обрабатывать задержки в реальной среде. Наиболее эпичное падение у коллег в РФ было совсем недавно, когда пустой демо-стенд упал сам по себе. Не помню, с разносом данных в не восстановимую кашу или просто умер совсем, вплоть до переустановки всего кластера. И это я не вспоминаю о нагрузке при блоках разного размера, проблемах мониторинга, скорости работы Redundant Array of Independent Nodes (RAIN) и проблемах со скоростью при использовании четности (parity), а точнее при возникновении write amplification. И затем посмотрим, у какого из этих решений есть мониторинг, а у какого – система резервного копирования не на уровне приложений внутри виртуализации.

Альтернатива - иметь сложные интимные отношения с drbd, Patroni (PostgreSQL + Patroni + etcd + HAProxy), Stolon, Corosync, PaceMaker, BDR, bucardo, Watchdog – и постоянный риск split-brain. Рядом еще плавает RAFT и CAP theorem. Так можно докатиться до знаний про global transaction identifier (GTID) и Commit Sequence Number (CSN).

Все упирается в проблему человеков.
Или у вас большая организация с базой знаний, обучением, передачей опыта, и как-то это будет работать.
Или вы рано или поздно получите черный ящик, потому что настраивавший это человек (1 производственная штатная единица) уволился, и как это работает  - никто не знает.

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

Изначальные проблемы Storage space без direct

Это дорогое решение, необходимо считать что почем, в том числе лицензии.

Erasure coding (EC) в GUI в нем (и в S2D) был в 2016 и 2019 сервере реализован на уровне «ну как смогли». Из GUI можно было настроить Mirror и Raid-5 (single parity), настройка Raid-6 (dual parity) требовала, почему-то, толи 7 толи 8 дисков, не понятно зачем, и давала какую-то безумную физическую деградацию, раз в 10 кажется при настройках «всего по умолчанию», а про вынос журнала на отдельный диск никто не пишет, и публично вроде не тестировал.

Схема развертывания

Поскольку мне только посмотреть, то я попробую посмотреть, что будет на домашнем ноутбуке. SSD + Windows 11 + VMware Workstation Pro 17, недавно ставшая бесплатной для домашних пользователей.

Схема тестирования

Для тестов будет выделен отдельный (конечно виртуальный) диск – сначала на 40 Гб, чтобы посмотреть на то, сколько вытянет на нем Atto benchmark, по сравнению с таким же тестом, но без виртуализации.

Там же попробую DiskSPD – с настройками:

Образ для тестов – 10 Гб, тестирование:

1 файл, 1блок, 1 поток, 100% чтения, 50/50, 0/100 % записи. Продолжительность – 30 секунд прогрев – 10 секунд. Блок данных 4 к и 64 к. Форматирование раздела .. хм. Тоже надо посмотреть, конечно, write amplification это не игрушка.

1 файл, 1,2,4, 8 потоков и очереди 4, 8, 16 и 32.

В вариантах Mirror, parity GUI.

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

Или сокращу объем проверок, если надоест.

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

Затем попробую собрать в storage space 4, 6 и 8 дисков – через GUI, и посмотрю, что и как.

Моя глобальная цель – не столько посмотреть на падение скорости, сколько

1) посмотреть на варианты настроек Erasure coding (EC) в GUI и в CLI (это я в виртуальной среде сделать могу)

2) посмотреть, влияет ли, и если влияет то как, размер блока и четность.

Сразу видны подводные камни – у меня виртуализация 2 типа, поэтому приземляемый в файл в реальной ОС блок данных – будет работать в итоге с фактической разметкой NTFS, можно получить порядочный штраф.
В рабочей среде такого, конечно, не будет, но размер блока важен и при создании LUN на классической СХД. Там хотя бы пресеты есть, это иногда помогает.

Сначала посмотрим, что там с диском

Get-WmiObject -Class Win32_Volume | Select-Object Label, BlockSize | Format-Table –AutoSize

Или более классическим путем –

fsutil fsinfo ntfsinfo c:

Ничего интересного,NTFS BlockSize – 4096 (Bytes Per Sector  : 512, Bytes Per Physical Sector :  4096, Bytes Per Cluster :  4096  (4 KB), Bytes Per FileRecord Segment  :  1024

С глубиной очереди 4, Atto дает удручающие для конца 2024 года 100 мб/сек на запись и 170 мб/сек на чтение, 25к IOPS /40k IOPS,  разгоняясь до 750/1300 мб/сек для блока 64 кб (и падая до 10 к/ 20к IOPS). Старый SATA SSD, откуда там чудеса?

Поставлю очередь 8, а тестирование ограничу размерами от 4 до 64. Стало ли лучше? Стало. 25к IOPS на запись, и 55 к IOPS на чтение для 4к блока, 16 и 20 к к IOPS для 64 к блока.

DiskSPD

Где брать: https://github.com/microsoft/diskspd/releases/latest/download/DiskSpd.zip

Что читать: https://github.com/microsoft/diskspd

Что еще читать: https://learn.microsoft.com/ru-ru/azure-stack/hci/manage/diskspd-overview

Качаем DiskSPD с github, распаковываем , кладем в C:\Diskspd\amd64 , делаем папку test, делаем первый тест

.\diskspd -t2 -o32 -b4k -r4k -w0 -d120 -Sh -D -L -c5G C:\Diskspd\test\test0001.dat > test0000.txt

И идем читать инструкцию.

-t2: указывает количество потоков для каждого целевого или тестового файла.

-o32: указывает количество невыполненных запросов ввода-вывода для каждого целевого объекта на поток

b4K: указывает размер блока в байтах, КиБ, МиБ или ГиБ. В этом случае размер блока 4K

-r4K: указывает на случайный ввод-вывод

-w0: указывает процент операций, которые являются запросами на запись (-w0 эквивалентно 100 % чтения)

-d120: указывает продолжительность теста

-Suw: отключает кэширование программной и аппаратной записи

И получаем (бадабумс) -  310.39  MiB/s  , 80к  I/O per s - 55000 на первый тред и 25000 на второй (округленно).

На этом месте пока прервусь, надо подумать как сделать удобнее.

Показать полностью
40

Приключение пакетишки

Приключение пакетишки

Для ЛЛ: сложности отладки производительности дисковых подсистем в среде виртуализации.

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

(проследовать за кроликом)

Зашел в нашем колхозном клубе разговор о том, как в конфету "подушечку" варенье попадает, и постепенно перешли на то, как данные из приложения попадают на диск, и где можно на граблях попрыгать, и на взрослых, и на детских.

Итак, у нас есть «данные».
Если речь заходит о том, что надо быстро и много работать с хоть сколько-то большими объемами данных, то обычно у производителя есть рекомендации «как лучше организовать дисковое пространство». Обычно. Но не всегда.

Общеизвестно, что:

Microsoft SQL работает с страницами по 8 кб, а сохраняет данные экстентами (extent) по 8 страниц – 64 Кб, и рекомендации для MS SQL - cluster (NTFS allocation) size в 64 Кб.  (1) . Все просто, все понятно, и.

И даже есть статья Reading Pages / cчитывание страниц про  Read-Ahead (Упреждающее чтение) экстентами по, вроде как, 64к, хотя прямо на странице этого не указано.

Для Oracle все тоже как-то описано – есть статья Oracle Workloads and Redo Log Blocksize – 512 bytes or 4k blocksize for redo log (VMware 4k Sector support in the roadmap) Oracle Workloads and Redo Log Blocksize – 512 bytes or 4k blocksize for redo log (VMware 4k Sector support in the roadmap)

Для PostgreSQL на Windows пишут просто: и так сойдет!- The default allocation unit size (4K) for NTFS filesystems works well with PostgreSQL.

Что там рекомендуют в проприетарном Postgrepro?

Да ничего, вместо документации и тестов – обсуждение на тему 8Kb or 4Kb ext4 filesystem page size из 2019 года.

Ладно, для простоты (более полная и занудная версия про размеры страниц в памяти будет на Пикабу) будем считать (хотя это и не всегда верно), что из приложения в Linux вылетит пакет размером 4к в сторону диска.

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

Настоящие проблемы только начинаются

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

Дальше у пакета, в зависимости от настроек гипервизора, есть варианты, например:

Отправиться в путешествие по сети здорового человека блоками по 2112 байт.
Правда если вы альтернативно одаренны, и не следите за ретрансмитами, отброшенными пакетами, не настроили ano и mpio, то вы на ровном месте, на бильярдном столе яму  найдете. И в ней утонете. Или наоборот, медленно высохнете (Slow drain in Fibre Channel: Better solutions in sight )

Отправиться в путешествие по сети бедного человека tcp блоками – в iSCSI или в NFS. Нарезка «по питерски» на блоки от 1500 до 9000 – на ваш вкус.

Отправиться в путешествие по сети нормального человека – в iSCSI или в NFS, но в Ge UDPwagen, со всеми остановками – DCB, lossless ethernet, congestion control.

И, самый неприятный вариант – отправиться на локальные диски, потому что по бедности ничего другого нет, и это самый плохой вариант. То есть, почти самый плохой, но есть нюансы.

Почему этот вариант плох?

Потому что, в случае проблем в стеке богатого человека, вы можете увидеть задержки в гостевой системе, задержки в системе гипервизора, посмотреть QAVG, KAVG, DAVG и сказать – проблемы где-то тут. Конечно, иногда приходится и в vsish ходить, и про Disk.SchedNumReqOutstanding знать, а то, что еще хуже, читать по не русски всякие документы типа vSAN Space Efficiency Technologies

В случае проблем в стеке не такого богатого человека – вы можете просто взять и включить:

Get-VM | Format-List Name,ResourceMeteringEnabled

Enable-VMResourceMetering -VMName NameOfVM

Get-StorageQoSFlow -CimSession ClusterName | Sort-Object InitiatorIOPS -Descending | select -First 5

Что делать в остальных случаях, я как-то не очень понимаю, потому что load average покажет что угодно, кроме того что мне интересно, а iotop и sysstat хороши, но показывают не то, что мне надо. Хотя - и так сойдет, главное не забывать валить вину на кого угодно.

Но и это не самая большая проблема, потому что на этом месте в игру вступает

БОЛЬШОЕ ФИНАЛЬНОЕ КРОИЛОВО

И, наконец, данные начинают приземляться на диски

Тут кто-то вспомнит выравнивание разделов (partition alignment), но это параметр, про который стоит помнить, и иногда проверять.

Самая простая часть кроилова, это IO amplification. С ним все просто, пришел пакет в 512 байт на 4к разметку – пришлось делать много операций. Открываете статью Cluster size recommendations for ReFS and NTFS из списка литературы, читаете. Потом возвращаетесь к началу этой заметки, и делаете ААА, вот про что это было.

Особенно больно будет, если у вас на хосте развернута любое программно-определяемое хранилище – хоть vSAN, хоть storage space, хоть storage space direct.

Там вы еще полной ложкой поедите не только IO amplification, но и Storage Spaces Direct Disk Write-Caching Policy, CSV BlockCache, и на сладкое - alternate data streams, вместе с Read-Modify-Write

Just a dose that'll make you wish you were born a woman

Более сложная часть шоу начинается с «мы купили какой-то SSD, поставили его в какой-то raid-контроллер, оно поработало, а потом не работает, мы купили SATA NVME и оно тоже не работает на те деньги, которые мы за него отдали, караул помогите ограбили».

Лучше этого шоу – только то самое, на Walking Street, ну вы знаете.

После такой фразы можно только посочувствовать, но пионер, то есть внешний подрядчик, должен быть вежливым, вне зависимости от того, что бабка, то есть заказчик, говорит*.

Сначала вспомним термины.

Solid-State Drive, SSD. Это диск. Может быть:
NAND (NOT-AND gate)) – SLC, MLC, TLC,
3D NAND (Vertical NAND (V-NAND) / 3D NAND ) - 3D MLC NAND, 3D TLC NAND, а там и QLC недалеко - QLC V-NAND. Какой там тип level cell, не так важно на данном этапе.
3D XPoint. Ох, как он был хорош, как мощны были его данные. Но, все. Optane больше нет, и не будет.
Compute Express Link (CXL) – не видел пока.
Non-Volatile Memory Express (NVMe) – это протокол, но есть NVMe U.2 и есть NVMe U.3
Serial Attached SCSI (SAS) – тоже протокол
SFF-8643 (Mini SAS HD) , SFF-8654 (x8 SlimSAS) , SFF-8639 –разъемы.
Universal Backplane Management  -  одна из возможностей, или функций, как хотите называйте, у контроллеров Broadcom 9500 (и не только).

Вспомнили?

Сходу суть: При включении SSD через RAID контроллер, и, особенно, через старый RAID контроллер, с его тормозной маленькой сморщенной памятью и усохшей батареей, и последующих тормозах, дело не только в фоновых операциях, всех этих Garbage Collection и TRIM, и даже не в балансировке нагрузки, а в том что контроллеры, года примерно из 2015-2018, вообще работают с новыми SSD отвратительно, и еще хуже, если это новый, но дешевый SSD, видевший некоторое Г.
Рекомендации типа «если у вас в контроллере нет JBOD, то просто сделайте RAID 0 на все» - есть, но их последствия, прямые и косвенные, описаны в статье Using TRIM and DISCARD with SSDs attached to RAID controllers (смотрите список литературы).

Контроллеры tri-mode – не позволяют получить из SSD NVME всю его скорость, а скорее привносят проблемы.
Больше проблем приносит, разве что, Intel VROC.

И, что самое интересное

У SSD есть свой микроконтроллер, в котором есть своя прошивка. Получить от вендора SSD, того же Micron, список исправлений между версиями – наверное, можно. Но на официальном сайте есть обновленный микрокод (прошивка), и только микрокод. Никаких релиз нот с описанием. Просто прошивайтесь.

А на какую, интересно, версию прошиваться, если производитель гипервизора у себя в списке совместимости указывает версию, которой у вендора на сайте нет?

Итого

Отладка «что так медленно-то» может начаться со стороны DBA, и в итоге оказаться где-то на уровне обновления микрокода RAID контроллера, или на уровне обновления прошивки диска.

Пока SCSI команды и нагрузка доедут до физических дисков – с ними чего только не происходит, и проблемы могут быть на любом уровне. Например, с уровнем сигнала (мощности) на оптическом SFP по пути.

Хуже всего сценарий, когда из соображений «кроилово» и «нечего читать – сбегали и купили Samsung 870 EVO , ведь дома на нем ИГОРЫ ОТЛИЧНО РАБОТАЮТ» . Иногда из соображений кроилова покупается продукт «для дома», рассчитанный на работу 4 часа в день при температуре +25, причем настроенный на задачу «загрузить игру – сохранить игру», а не 24*7 обрабатывать потоки данных при температуре +35.
ЗАПОМНИТЕ, КРОИЛОВО ВЕДЕТ К ПОПАДАЛОВУ.
Если вы собрали систему на домашних компонентах, она будет работать до первого падения какого-то из компонентов, потом превратится в тыкву. Как и данные. И их не вытащить. Никак не вытащить. Совсем никак.

Будьте готовы.

Хотя нет. Лучше не будьте. Когда все сломается, то:

- наймите на восстановление данных пару идиотов,

-один из которых эффективный менеджер,

- который не умеет читать вообще, зато может пушить первого

- второй думает, что он умеет читать, думает что умеет думать, и лучше знает, что ему делать (Эффект Даннинга — Крюгера), вместо того чтобы: прочитать, что ему пишут, записать что понял, спросить правильно ли он понял, переписать, и сделать хорошо. А плохо не сделать.

Эта парочка качественно и надежно похоронит то, что еще оставалось.

А уж если они привлекут к решению проблем AI, не пытаясь понять, что AI может насоветовать, то будет просто караул

Список литературы

Set the NTFS allocation unit size to 64 KB
SQL Server 2005 Best Practices Article
Disk Partition Alignment Best Practices for SQL 2008 Server
Improve Performance as Part of a SQL Server Install (2014)
Oracle Workloads and Redo Log Blocksize – 512 bytes or 4k blocksize for redo log (VMware 4k Sector support in the roadmap)
Oracle on VMware Collateral – One Stop Shop

Oracle Redo Log file with 4k blocksize - 11.2.4 Planning the Block Size of Redo Log Files

2022 SQL Server on Linux: Scatter/Gather == Vectored I/O
2024 Performance best practices and configuration guidelines for SQL Server on Linux

The default allocation unit size (4K) for NTFS filesystems works well with PostgreSQL:  PostgreSQL on FlashArray Implementation and Best Practices
Block Size on MSSQL on Linux

SCSI mid_level - lower_level driver interface

sg_verify

RoCEv2 CNP Packet Format Example

RoCEv2

Intelligent Traffic Analysis for RoCEv2 Flows

An In-Depth Guide to RoCE v2 Network

(тут мне стало лень оформлять)

ESXTOP
https://www.yellow-bricks.com/esxtop/

Using esxtop to identify storage performance issues for ESXi (multiple versions)
https://knowledge.broadcom.com/external/article/344099/using-esxtop-to-identify-storage-perform.html

What is the latency stat QAVG?
https://www.codyhosterman.com/2018/03/what-is-the-latency-stat-qavg/

Troubleshooting Storage Performance in vSphere – Part 1 – The Basics
https://blogs.vmware.com/vsphere/2012/05/troubleshooting-storage-performance-in-vsphere-part-1-the-basics.html

Анализ производительности ВМ в VMware vSphere. Часть 3: Storage
https://habr.com/ru/companies/rt-dc/articles/461127/

Get Hyper-V VM IOPS statistics
https://pyrolaptop.co.uk/2017/07/07/get-hyper-v-vm-iops-statistics/

Tips and Tools for Microsoft Hyper-V Monitoring
https://www.nakivo.com/blog/tips-and-tools-for-microsoft-hyp...

Identifying storage intensive VMs in Hyper-V 2016 Clusters
https://bcthomas.com/2016/10/identifying-storage-intensive-v...

How to Monitor Disk IO in a Linux System
https://www.baeldung.com/linux/monitor-disk-io

What is VMware vsish?
https://williamlam.com/2010/08/what-is-vmware-vsish.html

vSphere ESXi 4.1 - Complete vsish configurations (771 Total)
https://s3.amazonaws.com/virtuallyghetto-download/complete_vsish_config.html

Advanced Disk Settings для хостов VMware ESX / ESXi.
https://vm-guru.com/news/vmware-esx-esxi-advanced-settings

Cluster size recommendations for ReFS and NTFS
https://techcommunity.microsoft.com/t5/storage-at-microsoft/cluster-size-recommendations-for-refs-and-ntfs/ba-p/425960

Выравнивание разделов

Что такое выравнивание разделов и как выровнять разделы

Why Intel killed its Optane memory business
https://www.theregister.com/2022/07/29/intel_optane_memory_dead/

How CXL may change the datacenter as we know it
https://www.theregister.com/2022/05/16/cxl_datacenter_memory/

Кабели для подключения NVMe к контроллерам Broadcom
https://www.truesystem.ru/solutions/khranenie_danny/424809/

Тестирование NVMe SSD Kioxia CD6 и CM6
https://www.truesystem.ru/review/424664/

Что нужно знать о стандарте U.3
https://www.nix.ru/computer_hardware_news/hardware_news_viewer.html?id=211282

Broadcom® 95xx PCIe 4.0 MegaRAID™ and HBA Tri-Mode Storage Adapters
https://serverflow.ru/upload/iblock/583/ehhvql2l0gn06v02227c...

Понимание SSD-технологии: NVMe, SATA, M.2
https://www.kingston.com/ru/ssd/what-is-nvme-ssd-technology

NVMe и SATA: в чем разница?
https://www.kingston.com/ru/blog/pc-performance/nvme-vs-sata

vSAN — Выбор SSD и контроллеров
https://vgolovatyuk.ru/vsan-controller/

FTL Design for TRIM Command
https://vgolovatyuk.ru/wp-content/uploads/2019/07/trim_ftl.pdf

Using TRIM and DISCARD with SSDs attached to RAID controllers
https://www.redhat.com/sysadmin/trim-discard-ssds

SSD TRIM command support and Adaptec RAID adapters
https://ask.adaptec.com/app/answers/detail/a_id/16994

New API allows apps to send "TRIM and Unmap" hints to storage media
https://learn.microsoft.com/en-us/windows/win32/w8cookbook/new-api-allows-apps-to-send--trim-and-unmap--hints-to-storage-media?redirectedfrom=MSDN

TRIM mdadm - How to set up SSD raid and TRIM support?
https://askubuntu.com/questions/264625/how-to-set-up-ssd-raid-and-trim-support

vSAN support of NVMe devices behind tri-mode controllers
https://knowledge.broadcom.com/external/article?legacyId=88722

Memory usage on Azure Stack HCI/Storage Spaces Direct
https://jtpedersen.com/2020/10/memory-usage-on-azure-stack-hci-storage-spaces-direct/

Deploy Storage Spaces Direct on Windows Server
https://learn.microsoft.com/en-us/windows-server/storage/storage-spaces/deploy-storage-spaces-direct

Microsoft Storage Spaces Direct (S2D) Deployment Guide
https://lenovopress.lenovo.com/lp0064.pdf

How to Enable CSV Cache
https://techcommunity.microsoft.com/t5/failover-clustering/how-to-enable-csv-cache/ba-p/371854

CSV block cache causes poor performance of virtual machines on Windows Server 2012
https://support.microsoft.com/sl-si/topic/csv-block-cache-causes-poor-performance-of-virtual-machines-on-windows-server-2012-88b35988-a964-30ba-98d9-9b89d0a39d35

Mirror accelerated parity (MAP) - https://learn.microsoft.com/en-us/windows-server/storage/refs/mirror-accelerated-parity

ReFS Supported Deployment Scenarios Updated
https://blog.workinghardinit.work/2018/04/17/refs-supported-deployment-scenarios-updated/

ReFS Accelerated VHDX Operations
https://aidanfinn.com/?p=18840

dedicated journal disk – точнее, старая статья Storage Spaces Performance Analysis – Part 1 https://noobient.com/2015/09/18/storage-spaces-performance-analysis-part-1/

Storage Innovations in Windows Server 2022
https://techcommunity.microsoft.com/t5/storage-at-microsoft/storage-innovations-in-windows-server-2022/ba-p/2714214

Reverse engineering of ReFS
https://www.sciencedirect.com/science/article/pii/S1742287619301252

Forensic Analysis of the Resilient File System (ReFS) Version 3.4
https://d-nb.info/1201551625/34

vSAN Space Efficiency Technologies
https://core.vmware.com/resource/vsan-space-efficiency-techn...

Показать полностью 2
70

Виртуализация, SDS, HCI– что это и зачем в 2025 году. vSAN, s2d, NVMe, вот это все еще раз1

Для ЛЛ: ничего интересного или нового, даже список литературы старый.

В теории: рутуб, импортозамещение.
На практике: на рутубе лежит Моана 2 и Оппенгеймер.

Коллеги прислали очередную ссылку на прекрасный пример вырождения кадров в российском ИТ. Отличный пример, надо сказать:
- люди в разговоре используют слова, смысла которых не понимают.
- говорят, что пришли за советом, но на самом деле пришли с готовым (и плохим) решением, и хотят чтобы их за плохой похвалили. Но их не хвалят, это обидно!
- говорят, что читали литературу по теме, но на самом деле читали только 2 статьи на русском, и ничего больше. Полный ноль. Но это тоже обидно!

Сцена из FX's English Teacherпро F , только вживую.

Поэтому сначала мне придется еще раз пройтись по базовым терминам определениям.

Базовые определения.

Начинать приходится с самой базовой базы – железо. Почему-то в головах у людей слово NVMe – это универсальное слово – замена для «супер быстрого хранилища данных». Это не так, и особенно не так, если у вас уже сервер, а не домашний кудахтер.

Процессор.
Любой современный процессор предоставляет пользователю какое-то количество полос (lane) PCIe разных поколений (Gen1 - Gen5), собираемых в группы.

Например:
14th Gen Intel® Core™ Desktop Processors
CPU PCIe 5.0 Lanes  Up to 16
CPU PCIe 4.0 Lanes  4

Intel® Xeon® Gold 5515+
PCI Express Revision 5.0
Max # of PCI Express Lanes 80

AMD EPYC™ 9005
Up to 160 PCIe® 5.0 lanes

Затем у вас возникает NVM Express (NVMe) или Non-Volatile Memory Host Controller Interface Specification (NVMHCIS) – это интерфейс передачи данных «до устройства хранения». Устройство хранения, в свою очередь, это сейчас какая-то NAND память. Раньше была еще память 3D XPoint, более известная как Optane, но ее выпуск прекращен, хотя она и обгоняла варианты NAND. Устройство хранения – NAND SSD, может быть в формате BGA, M.2 2230 \ 2280 \ 22110 и так далее, может быть в виде 2.5 SSD с интерфейсами M.2, U.2 (SFF-8639), U.3, EDSFF или даже L3-NVMe-3840 - NVMe Palm. Вариантов много. Сам физический разъем может быть SFF-8643, SFF-8639 и так далее.

При этом, никто не мешает включать NAND SSD через AHCI \ SATA \ SAS – и все будет работать, но есть нюансы по скорости, горячей замене, задержкам, пропускной способности и так далее.

Отличия AHCI \ SATA  и NVMe можно посмотреть тут - Understanding SSD Technology: NVMe, SATA, M.2 или на русском - Понимание SSD-технологии: NVMe, SATA, M.2

Почему это нужно и важно знать.

Потому что в головах у людей опилки происходит смешение IDE, ATA, SCSI и serial attached scsi (SAS).
На IDE контроллер можно было поставить 2 (два) устройства – master и slave.
На Ultra2 Wide SCSI – до 16 устройств.
SAS поддерживает до 65535 устройств.
Как следствие, даже в простые старые сервера (не рассматривая старые СХД) уже давно можно было ставить по 16 дисков (тогда еще дисков, сейчас уже драйвов \ приводов \ устройств хранения) на SCSI или SAS RAID контроллер, и проблем с этим не было. Наоборот, RAID контроллер за счет своей памяти, и батарейки к нему, ускорял работу, частично снимая проблему RAID write penalty, в том числе за счет всяких фокусов.
НО.

С 2012 - 2015 года, в массы пошли SSD диски, и появился стандарт NVMe 1.1b (история тут), и высокоскоростные жесткие диски (15к оборотов, 10к оборотов) стали уходить на второй план. К 2020 примерно, году, умерли и те и другие. Не нужны – цена SSD NAND упала настолько, что тот же объем памяти будет стоить уже сравнимо с дисков на 7.2к оборотов, а скорость выше в разы.
НО.

С 2012 – 2014 года началось умирание русскоязычного комьюнити, и революция с переходом на SSD прошла мимо масс. До сих пор люди пишут в спецификации 10к диски, RAID контроллеры итд. Но все, 10к дисков больше нет.

То есть, куча людей остановилась в развитии на уровне знаний где-то 2012 – 2015 года, когда RAID контроллеры уже были, а NVMe еще не было.

Где тут подвох?

Подвох в том, что существуют RAID 3-Mode (SATA/SAS/NVMe), и, естественно, возникает простое желание – взять и собрать NVMe RAID. Технически это возможно, он соберется.
Практически SCSI \ NVMe команды, приходя на контроллер, будут попадать в очередь контроллера (или не будут - потому что в документации этот вопрос написан крайне мутно), а там глубина очереди всего 64, может 128, может 256. Глубину очереди в обзорах порой просто не затрагивают (пример). И в спецификации этого параметра нет. И в ОС этот параметр настраивается, до определенных пределов.
При том, что у Dell PERC H755N front NVMe - Controller queue depth - 5120, но не указано, на контроллер или на IO target.
При том, что в тестах типа Partner Blog: Boston Limited | Elevate Your NVMe Performance with SupremeRAID™ Next Generation GPU-based RAID - результаты очень неплохие.
У NVMe диска, подключенного напрямую, глубина очереди 2046 и выше. Итог – система в целом будет работать медленнее, и, что еще хуже, с непредсказуемым поведением дисков. Операционная система может в какой-то момент посчитать, что исправный NVMe диск работает слишком медленно, по ее представлению, и пометить его как неисправный. И вы скажете ШТОООА? А вот.

Поэтому: пока что никаких NVMe RAID. Еще раз:

Queue depth is extremely important, as issues have been observed with controllers that have very small queue depths. In particular, controllers with small queue depths (less than 256) can impact virtual machine I/O performance when vSAN is rebuilding components, either due to a failure or when requested to do so when entering maintenance mode.

Design Decision : Choose storage I/O controllers that have as large a queue depth as possible. While 256 are the minimum, the recommendation would be to choose a controller with a much larger queue depth where possible. (Цитата стянута из вот этой, полезной в целом, статьи)

Где тут подвох еще раз?

Подвох в том, что у вас на серверной материнской плате может оказаться 2-4-6, ну может 8, разъемов под NVMe. На передней панели слоты есть, а на дисковом бекплейне – нет. И как хотите. Поэтому нужно очень, очень внимательно читать спецификацию на все.

И при этом, вы все равно не можете нормально собрать аппаратный NVMe RAID на простом серверном железе. Что делать и как это обходят прочие производители? Для СХД давным давно, со времен первых HPE 3PAR, используется динамический рейд, с чанками \ чанклетами, только называется у всех по разному – Lenovo draid, Huawei raid 2.0, Netapp Dynamic disk pools (DDP), и так далее.
Для всего остального есть программный RAID, только вот загрузиться с такого зеркала, без плясок и кучи ручных операций, нельзя.

Прочие больные места -1. На старых серверах, где-то до 2020 года выпуска, в BIOS нет интегрированного NVMe драйвера. Иногда можно разобрать старый образ BIOS, вручную добавить драйвер, собрать обратно и обновить систему, иногда нет. В итоге, устройство есть и работает, как и положено PCIe устройству, а как загрузочный диск данное устройство не определяется. И все. Сам не сталкивался, дальние знакомые на какой-то распродаже купили старые Supermicro и поели с этим, большой ложкой.

Прочие больные места -2. Некоторые SSD NVMe домашнего сегмента работают только в режиме PCIe4. Некоторые при этом могут работать с некоторыми материнскими платами с какой-то версией BIOS в режиме автоопределения, а некоторым надо ставить режим вручную.

Поэтому, когда кто-то необученный переносит свой домашний опыт «воткнул и заработало» на работу с серверами, может быть больно тут, там, везде. И еще в паре десятков мест это может выстрелить в ногу, но про это позже.

Обманчивая простота современной виртуализации и соблазны перейти на SDS и HCI

Снова – сначала термины

HA: VMware vSphere High Availability: средство отказоустойчивости виртуальных машин, позволяющее в случае отказа физического хост-сервера автоматически перезапустить его виртуальные машины с общего хранилища

Аналог: Hyper-V High Availability (в составе Hyper-V failover cluster)

VMware Fault Tolerance (FT): средство непрерывной доступности виртуальных машин, позволяющее поддерживать резервную работающую копию виртуальной машины на другом сервере.

Аналоги – так сразу и не скажу. Если смотреть на уровень выше или дороже, то это что-то типа 4* BullSequana S200 – то есть BullSequana S800. И то, такое определение сошло бы для контингента хабра, потому что это совсем другое.

Software-defined storage (SDS) – в какой-то степени маркетинговый термин, потому что туда попадает и Gluster, и S2D, и даже XPenology, ScaleIO и RAIDIX. Возникает соблазн сказать, что «если что-то ставится на обычное железо и получается СХД (Storage system \ Data Storage), то это SDS. Но это не совсем так – в современных СХД стоят почти те же самые Intel или что-то из arm, специализированные контроллеры для ускорения операций остались где-то на рубеже 2015-2018 годов, и на некоторых СХД возможен запуск виртуальных машин для каких-то очень небольших задач.
Чуть проще различать SDS и HCI.
SDS занимается почти только обработкой данных.
HCI (
Hyper-converged infrastructure) занимается и виртуализацией, и хранением, и сетью.

Причем, сказать «занимается сетью», обсуждая HCI, можно только с перепоя. Это тоже очень непростая тема для обсуждения, потому что существует и активно применяется Azure SmartNIC/DPU/IPU / Azure Boost – FPGA модуль ускорения для сети. Или, те же настройки VMware VeloCloud SD-WAN и NSX Data Center – это вещь «очень в себе». Как и Hyper-V Network Virtualization с VXLAN. Как и OpenStack Networking Open vSwitch (OVS), Open Virtual Network (OVN) и так далее.

В чем кажущиеся плюсы HCI?

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

Система будет ругаться, кричать ужасными алертами, что так делать нельзя, не надо так, но разве это кого-то остановит, запустилось же.

Можно даже собрать сеть так, как собирали деды – на LACP, наплевав на то, что уже больше 10 лет существует и active – active, и Switch Embedded Teaming с его Dynamic VMMQ, и даже божественный и неповторимый Network Air Gaps.

Читать алерты не нужно, все же не взорвалось сразу, значит ок.

Если вам безразлична остановка на неделю, если у вас нет и не было проверенного плана восстановления – то смело делайте. Если же вам критична остановка, то не нанимайте на работу идиотов, которые запускают сервисы на чем попало.

Тем не менее, экономные начальники, которые нанимают на работу людей, который собирают HCI системы на SATA , или ставят NVMe в RAID, или строят системы на 2 серверах не из HCL – были, есть, и будут. С последующим «ой кто же это сделал».

То есть, для учебы, тестов, стендов, прочих систем которые совсем не жалко – сколько угодно делайте, и из чего угодно. Хоть стройте систему на shotgun mode. Учиться –можно, работать нет.

В реальной жизни все иначе

Если у вас нет опыта работы в инфраструктуре с хотя бы 2-3 хотя бы MSA 2060 и аналогами (Synology и TrueNas не считаются), то даже не смотрите в сторону HCI. HCI имеет смысл, когда у вас есть опыт работы с классическим хранилищем, и вы понимаете их плюсы и минусы. Иначе любая HCI будет источником сплошной и бесконечной боли, причем в самый неудобный и неприятный момент.
Да, есть варианты типа ROBO на 3 сервера, и даже 2-node cluster, но
минимальное число серверов в инфраструктуре HCI – 4, но надо 6, лучше 10:
vSAN: To use RAID-6, you must have at least six hosts in the cluster.
S2D – можно начать с 4, но лучше 10-12: Dual parity efficiency for hybrid deployments, Dual parity efficiency for all-flash deployments.

HCI крайне, бесконечно капризен к используемому оборудованию и его конфигурации.

То есть, если вы хотите зачем-то внедрить HCI И спать спокойно, то вам придется покупать исключительно сертифицированное оборудование, и внимательно следить за рекомендациями связки драйвер + прошивка. Это еще если у производителя HCI есть такие рекомендации, иначе все на свой страх и риск.
Еще раз повторю: запуск системы и ее работа во время тестов – 1,2, 3 дня, неделя – не означает, что система не упадет просто так через 32 тысячи минут. Или через 200 дней. Или еще как-то. Это не говоря про проблемы с зависимостями, где обновление какой-то одной библиотеки может положить весь кластер.

Комплексная литература на русском по HCI отсутствует, и почти отсутствует русскоязычная экспертиза

По простым задачам вам, может, и помогут – советами типа «перезагрузи все». Совет плохой.
По сложным задачам помогать вам будет некому. То есть, может да, может нет – но это не та система, и не то сообщество, где люди вообще склонны помогать, и тем более бесплатно.
Но, и за деньги помогать зачастую, некому. Все сами.

Да, есть много англоязычной литературы -
vSAN Planning and Deployment
vSAN Network Design
Designing and Sizing vSAN Storage

Storage Spaces Direct overview
Storage Spaces Direct hardware requirements
Identify and verify the status of tested products for Windows Server

Compute Starter Kit
Learning OpenStack Networking - Third Edition
OpenStack Cloud Computing Cookbook: Over 100 practical recipes to help you build and operate OpenStack cloud computing, storage, networking, and automation, 4th Edition – 2018


Вам не поможет набраться опыта падение этой системы.

Есть старое и ошибочное мнение – профессионал это тот, кто наступал на грабли много раз.
Это не так.
Профессионал – это человек, который наступал на грабли мало раз, потому что про основной объем граблей он узнал заранее, предусмотрел эти сценарий отказа, проработал их на стенде и при пилоте, и потом бил по рукам тех, кто говорил «давайте сразу в прод,  я сто раз так делал».

Концовка

Тут должна быть какая-то не скомканная концовка, но я ее не придумал.

Показать полностью
Отличная работа, все прочитано!