Для ЛЛ: сложности отладки производительности дисковых подсистем в среде виртуализации.
Каждый вечер, когда солнце прячется за верхушки сосен, на небе зажигаются звезды, а где-то в лесу неподалеку начинает ухать сова, которую мы уже два месяца не можем поймать, чтобы сварить из нее суп, - так вот: каждый раз, когда на нашу свалку опускается темнота, вся детвора собирается вокруг ржавого чайника в пустой нефтяной цистерне на западной окраине, чтобы попить кипятка, съесть по кусочку сахара и послушать сказку на ночь.
(проследовать за кроликом)
Зашел в нашем колхозном клубе разговор о том, как в конфету "подушечку" варенье попадает, и постепенно перешли на то, как данные из приложения попадают на диск, и где можно на граблях попрыгать, и на взрослых, и на детских.
Итак, у нас есть «данные».
Если речь заходит о том, что надо быстро и много работать с хоть сколько-то большими объемами данных, то обычно у производителя есть рекомендации «как лучше организовать дисковое пространство». Обычно. Но не всегда.
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)
Что там рекомендуют в проприетарном Postgrepro?
Ладно, для простоты (более полная и занудная версия про размеры страниц в памяти будет на Пикабу) будем считать (хотя это и не всегда верно), что из приложения в 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 может насоветовать, то будет просто караул
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
(тут мне стало лень оформлять)
Анализ производительности ВМ в VMware vSphere. Часть 3: Storage
https://habr.com/ru/companies/rt-dc/articles/461127/
Broadcom® 95xx PCIe 4.0 MegaRAID™ and HBA Tri-Mode Storage Adapters
https://serverflow.ru/upload/iblock/583/ehhvql2l0gn06v02227c...
Using TRIM and DISCARD with SSDs attached to RAID controllers
https://www.redhat.com/sysadmin/trim-discard-ssds
Microsoft Storage Spaces Direct (S2D) Deployment Guide
https://lenovopress.lenovo.com/lp0064.pdf
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/
Forensic Analysis of the Resilient File System (ReFS) Version 3.4
https://d-nb.info/1201551625/34