38

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

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

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

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

Приключение пакетишки Raid, Жесткий диск, Windows server, Windows, SSD, Длиннопост

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

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

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

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

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.

Приключение пакетишки Raid, Жесткий диск, Windows server, Windows, SSD, Длиннопост

Что там рекомендуют в проприетарном 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.2K постов18.8K подписчика

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.