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

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

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

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

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

Общеизвестно, что:
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

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

Комментарии (13)


  1. Thomas_Hanniball
    13.10.2024 20:41

    А куда пропала прошлая статья про молодёжь и рынок труда? Я только начал её читать, обновил страницу и она пропала в черновики. Теперь боюсь обновлять эту страницу.

    UPD. Понятно, модераторам не понравился формат той статьи. Жаль я не успел прочитать.


    1. Iselston
      13.10.2024 20:41

      Из-за таких ситуаций года два уже перед тем как читать что-то интересное - сначала кидаю в локальный сейв на инстанс readeck.


  1. splitfire
    13.10.2024 20:41

    На Пикабу почему-то про пакетишку есть, а вот про молодёжь и рынок труда до сих пор нет.

    ?


    1. Grigory_Otrepyev Автор
      13.10.2024 20:41

      Положил на Пикабу


  1. alexrus
    13.10.2024 20:41

    И целый абзац украли во вступлении из одного прекрасного текста.


    1. kuzzdra
      13.10.2024 20:41

      Хм, где-то есть еще более полный прекрасный текст?


      1. alexrus
        13.10.2024 20:41

        Конечно))

        https://nl.livejournal.com/1214265.html

        Там самая главная картинка в конце отвалилась, но вы ее легко найдете по названию.


        1. kuzzdra
          13.10.2024 20:41

          Отступлений от канона не замечено ;)


    1. Grigory_Otrepyev Автор
      13.10.2024 20:41

      И целый абзац украли во вступлении из одного прекрасного текста.

      Как сказал классик: «Надо брать музыку у народа и только обрабатывать её» — так я и делаю. Поэтому, когда сегодня берёшь у композитора — это, собственно говоря, берёшь у народа, берёшь у народа — берёшь у себя, и главное, чтоб музыка была твоя, и кто говорит — плагиат, я говорю — традиция.

      Интерфейс хабра не дает вставить текст как цитату при отображении в ленте


  1. DM_man
    13.10.2024 20:41

    Сеть, сетью, а сколько контроллеры на СХД проглотят столько и будет хорошо. vSAN это для рисковых энтузиастов из серверных комнат ООО "Интеграционная интеграция" , задумка красива, надежность под вопросом (туда же Ceph). Вообщем, разделяй (серверы, сеть, схд) и властвуй. Замельчив блок, получим нагрузку на ЦПУ контроллера СХД, если контроллеры проглотят write, то вряд ли сеть и серверы проглотят обратно read от СХД. Старая vmwar-а , 6.75 (кое где работают на такой) так вообще только 512e использует при работе с СХД и смысла городить огород (покупка 4к СХД) особого не имеет . В новой всё уже лучше, но читаем статьи (ваши) о лицензировании и подписке и т.д. Что с KVM? ПО iSCSI и 10G задержки в норме, при малой нагрузке, при большой - полный "ой".


    1. Grigory_Otrepyev Автор
      13.10.2024 20:41

      vSAN это для рисковых энтузиастов из серверных комнат ООО "Интеграционная интеграция" , задумка красива, надежность под вопросом

      Это не так года с 2020

      Старая vmwar-а , 6.75

      нет такой редакции

      Что с KVM? ПО iSCSI и 10G задержки в норме, при малой нагрузке

      При чем тут kvm ? И что такое "большая" ? Большой блок? Большой разброс размера блока ?


      1. DM_man
        13.10.2024 20:41

        Ошибся - vSphere 6.7, имел ввиду 6.7 и 6.5.

        По поводу KVM, например zvirt 3.1.1 на iSCSI блок 9000 (MTU) и где то в определенный момент наступает "завал" при активной нагрузке ВМ (>1,5 гб/с) Где? Было не понятно.


  1. Grigory_Otrepyev Автор
    13.10.2024 20:41

    И немного цифр

    Хабр - 11 голосов, 1500 прочтений.

    Пикабу - 30 плюсцов, 4500 прочтений