Гостевая статья нашего спонсора - компании ИТ-ГРАД, предоставляющей услуги виртуальных машин VMware в аренду. В этой статье речь пойдет о плюсах интеграции среды виртуализации VMware и систем хранения NetApp. В частности, продолжим разбираться с VAAI и посмотрим, как использование такой связки может помочь в проектах по разработке ПО.
Не так давно мы писали о том, что компания StarWind, производящая продукт для создания отказоустойчивых хранилищ Virtual SAN, выпустила документ о технологии VAAI, которая позволяет передать часть операций по работе с хранилищем на сторону дискового массива.
Компания StarWind, производитель лучшего средства для создания программных отказоустойчивых хранилищ Virtual SAN, выпустила два интересных документа на тему поддержки технологий
Второй документ - StarWind Virtual SAN ODX (Off-loaded Data Transfer) Configuration and Performance Tuning Guide - расскажет о том, как можно узнать включена ли поддержка ODX со стороны гипервизора Microsoft Hyper-V. Так же как и VAAI у VMware, технология ODX у Microsoft позволяет передать часть операций гипервизора с хранилищем на сторону дискового массива, что существенно повышает производительность ВМ.
Таги: StarWind, Whitepaper, VAAI, ODX, VMware, Microsoft
Этот вебинар продолжает серию технических мероприятий StarWind, в рамках которых подробно рассматриваются довольно интересные глубокие темы. На этот раз речь пойдет об использовании технологий Offloaded Data Transfer (ODX) и APIs for Array Integration (VAAI), которые позволяют передать исполнение до 30% дисковых операций на сторону SAN (дисковый массив или серверы-хранилища), не затрагивая подсистему ввода-вывода хост-серверов Microsoft Hyper-V или VMware ESXi.
Мероприятие пройдет послезавтра, 21 апреля в 21-00 по московскому времени.
Как мы писали недавно, в новой версии платформы VMware vSphere 6, которая сейчас находится в стадии публичной беты, появились возможности использования томов VVols (о которых мы писали здесь). Сейчас эта функциональность также находится в бете и доступна для загрузки вот тут.
Концепция VVol (она же VM Volumes) увеличивает уровень гранулярности работы хост-сервера с хранилищем за счет непосредственных операций с виртуальной машиной, минуя сущности "LUN->том VMFS->Datastore". Тома VVol является неким аналогом существующих сегодня LUN, но с меньшим уровнем гранулярности операций по сравнению с томами VMFS (последние, как правило, создаются из одного LUN). Таким образом, ВМ находится на одном VVol как всадник на лошади.
Чтобы виртуальные машины можно было создавать на томах VVols и производить с ними различные операции, нужно чтобы дисковый массив поддерживал такой интерфейс как vSphere APIs for Storage Awareness (VASA). Через этот API возможна передача функций, обычно выполняемых хостом ESXi, на сторону аппаратного хранилища. Кроме того, есть также интерфейс vSphere Storage API – Array Integration (VAAI), который также используется для offloading'а операций на сторону массива, особенно когда дело касается операций миграции и клонирования ВМ.
Давайте посмотрим, как эти два API (VASA и VAAI) работают с хранилищем при операциях клонирования виртуальных машин, которые часто нужны в инфраструктуре виртуальных ПК на базе VMware Horizon View.
Сценарий 1 - клонирование ВМ в рамках одного контейнера VVol
В этом случае через API VASA вызывается функция cloneVirtualVolume, которая полностью передает на сторону дискового массива операцию клонирования ВМ:
Сценарий 2 - клонирование ВМ в рамках разных VVol
В этом случае все зависит от того, на каких хранилищах находятся данные VVol. Если VVol-a и VVol-b находятся на двух массивах одного вендора, настроенных единообразно, и управляются одним VASA Provider, то в этом случае используется API VASA и вызывается функция cloneVirtualVolume.
Если же VVol-a и VVol-b находятся на одном массиве и настроены по-разному, либо хранилища VVol-a и VVol-b находятся на двух массивах разных вендоров или моделей, то операция через VASA API может не пройти. Тогда происходит переключение на VAAI API, который использует датамувер ESXi (vmkernel data mover) и примитивы VAAI для клонирования виртуальной машины. При этом в случае неудачи передачи операций клонирования на сторону массива датамувер может начать перемещать данные через хост ESXi (подробнее - тут):
Конечно же, предпочтительнее делать все через VASA API - такая операция пройдет быстрее, поскольку в ней не будет задействован хост ESXi. Поэтому тут важна унификация конфигурации хранилищ и дисковых массивов в инфраструктуре. Ну и надо, конечно же, смотреть, чтобы закупаемые массивы в полной мере поддерживали VASA и VAAI.
Сценарий 3 - клонирование ВМ с тома VMFS на VVol
Если получается так, что ВМ надо склонировать с тома VMFS на хранилище VVol, то тут будет работать только операция XCOPY / WRITE_SAME интерфейса VAAI.
При этом работает это только для операции в направлении VMFS->VVol, при обратном клонировании этот API использован не будет.
Узнать больше о томах VVol и позадавать вопросы на эту тему вы можете на специальной странице Virtual Volumes beta community.
Мы уже писали о том, что такое и как работает технология VMware vStorage API for Array Integration (VAAI) (а также немного тут), которая позволяет передать операции по работе с хранилищами, которые выполняет компонент Data Mover в VMkernel, на сторону дискового массива. Это существенно улучшает показатели производительности различных операций (клонирования и развертывания ВМ, использования блокировок) за счет того, что они выполняются самим массивом, без задействования сервера VMware ESXi:
Если ваш массив не поддерживает примитивы VAAI, то чтобы склонировать виртуальный диск VMDK размером 64 ГБ, компонент Data Mover реализует эту операцию следующим образом:
Разделяет диск 64 ГБ на малые порции размером в 32 МБ.
Эту порцию 32 МБ Data Mover разделяет еще на маленькие операции ввода-вывода (I/O) размером в 64 КБ, которые идут в 32 параллельных потока одновремнно.
Соответственно, чтобы передать 32 МБ, Data Mover выполняет 512 операций ввода вывода (I/Os) по 64 КБ.
Если же массив поддерживает примитив XCOPY (он же Hardware Offloaded Copy и SAN Data Copy Offloading), то для передачи тех же 32 МБ будут использованы I/O размером в 4 МБ, а таких I/O будет, соответственно, всего 8 штук - разница очевидна.
Интересно, как работает VAAI с точки зрения ошибок при передаче данных: например, мы делаем клонирование ВМ на массиве с поддержкой VAAI, и вдруг возникает какая-то ошибка. В этом случае VMkernel Data Mover подхватывает операцию клонирования с того места, где VAAI вызвал ошибку, и производит "доклонирование" виртуальной машины. Далее ESXi периодически будет пробовать снова использовать VAAI на случай, если это была кратковременная ошибка массива.
При этом проверки в разных версиях ESXi будут производиться по-разному:
Для ESX/ESXi 4.1 проверка будет производиться каждые 512 ГБ передаваемых данных. Посмотреть этот параметр можно следующей командой:
# esxcfg-advcfg -g /DataMover/HardwareAcceleratedMoveFrequency Value of HardwareAcceleratedMoveFrequency is 16384
Это значение частоты 16384 нужно умножить на порцию 32 МБ и мы получим 512 ГБ. Чтобы поменять эту частоту, можно использовать команду:
Для ESXi 5.0 и выше все проще - проверка производится каждые 5 минут.
Помимо описанных в нашей статье примитивов Full Copy, Zero Block и ATS, начиная с версии ESXi 5.0, поддерживаются еще 2 примитива:
Thin Provisioning - механизм сообщения хостом ESXi дисковому массиву о том, что виртуальная машина или ее файлы с Thin LUN были удалены или перемещены (в силу разных причин - Storage vMotion, консолидация снапшотов и так далее), поэтому массив может забрать это дисковое пространство себе назад.
С точки зрения дисковых массивов, работающих на NFS (прежде всего, NetApp) в ESXi 5.0 также появилась поддержка примитивов VAAI:
Full File Clone – аналог функций Full Copy для VAAI на блочных хранилищах, предназначен для клонирования файлов виртуальных дисков VMDK.
Native Snapshot Support – передача на сторону массива функций создания снапшота ВМ.
Extended Statistics – включает возможность просмотра информации об использовании дискового пространства на NAS-хранилище, что полезно для Thin Provisioning.
Reserve Space – включает возможность создания виртуальных дисков типа "thick" (фиксированного размера) на NAS-хранилищах (ранее поддерживались только Thin-диски).
Функции VAAI включены по умолчанию и будут использованы тогда, когда станут доступны (например, при обновлении Firmware дискового массива, которое поддерживает VAAI).
Таги: VMware, vSphere, VAAI, Storage, ESXi, Enterprise, SAN
Мы уже некоторое время назад писали про различные особенности томов VMFS, где вскользь касалисьпроблемы блокировок в этой кластерной файловой системе. Как известно, в платформе VMware vSphere 5 реализована файловая система VMFS 5, которая от версии к версии приобретает новые возможности.
При этом в VMFS есть несколько видов блокировок, которые мы рассмотрим ниже. Блокировки на томах VMFS можно условно разделить на 2 типа:
Блокировки файлов виртуальных машин
Блокировки тома
Блокировки файлов виртуальных машин
Эти блокировки необходимы для того, чтобы файлами виртуальной машины мог в эксклюзивном режиме пользоваться только один хост VMware ESXi, который их исполняет, а остальные хосты могли запускать их только тогда, когда этот хост вышел из строя. Назвается этот механизм Distributed Lock Handling.
Блокировки важны, во-первых, чтобы одну виртуальную машину нельзя было запустить одновременно с двух хостов, а, во-вторых, для их обработки механизмом VMware HA при отказе хоста. Для этого на томе VMFS существует так называемый Heartbeat-регион, который хранит в себе информацию о полученных хостами блокировок для файлов виртуальных машин.
Обработка лока на файлы ВМ происходит следующим образом:
Хосты VMware ESXi монтируют к себе том VMFS.
Хосты помещают свои ID в специальный heartbeat-регион на томе VMFS.
ESXi-хост А создает VMFS lock в heartbeat-регионе тома для виртуального диска VMDK, о чем делается соответствующая запись для соответствующего ID ESXi.
Временная метка лока (timestamp) обновляется этим хостом каждые 3 секунды.
Если какой-нибудь другой хост ESXi хочет обратиться к VMDK-диску, он проверяет наличие блокировки для него в heartbeat-регионе. Если в течение 15 секунд (~5 проверок) ESXi-хост А не обновил timestamp - хосты считают, что хост А более недоступен и блокировка считается неактуальной. Если же блокировка еще актуальна - другие хосты снимать ее не будут.
Если произошел сбой ESXi-хоста А, механизм VMware HA решает, какой хост будет восстанавливать данную виртуальную машину, и выбирает хост Б.
Далее все остальные хосты ESXi виртуальной инфраструктуры ждут, пока хост Б снимет старую и поставит свою новую блокировку, а также накатит журнал VMFS.
Данный тип блокировок почти не влияет на производительность хранилища, так как происходят они в нормально функционирующей виртуальной среде достаточно редко. Однако сам процесс создания блокировки на файл виртуальной машины вызывает второй тип блокировки - лок тома VMFS.
Блокировки на уровне тома VMFS
Этот тип блокировок необходим для того, чтобы хост-серверы ESXi имели возможность вносить изменения в метаданные тома VMFS, обновление которых наступает в следующих случаях:
Создание, расширение (например, "тонкий" диск) или блокировка файла виртуальной машины
Изменение атрибутов файла на томе VMFS
Включение и выключение виртуальной машины
Создание, расширение или удаление тома VMFS
Создание шаблона виртуальной машины
Развертывание ВМ из шаблона
Миграция виртуальной машины средствами vMotion
Для реализации блокировок на уровне тома есть также 2 механизма:
Механизм SCSI reservations - когда хост блокирует LUN, резервируя его для себя целиком, для создания себе эксклюзивной возможности внесения изменений в метаданные тома.
Механизм "Hardware Assisted Locking", который блокирует только определенные блоки на устройстве (на уровне секторов устройства).
Наглядно механизм блокировок средствами SCSI reservations можно представить так:
Эта картинка может ввести в заблуждение представленной последовательностью операций. На самом деле, все происходит не совсем так. Том, залоченный ESXi-хостом А, оказывается недоступным другим хостам только на период создания SCSI reservation. После того, как этот reservation создан и лок получен, происходит обновление метаданных тома (более длительная операция по сравнению с самим резервированием) - но в это время SCSI reservation уже очищен, так как лок хостом А уже получен. Поэтому в процессе самого обновления метаданных хостом А все остальные хосты продолжают операции ввода-вывода, не связанные с блокировками.
Надо сказать, что компания VMware с выпуском каждой новой версии платформы vSphere вносит улучшения в механизм блокировки, о чем мы уже писали тут. Например, функция Optimistic Locking, появившаяся еще для ESX 3.5, позволяет собирать блокировки в пачки, максимально откладывая их применение, а потом создавать один SCSI reservation для целого набора локов, чтобы внести измененения в метаданные тома VMFS.
С появлением версии файловой системы VMFS 3.46 в vSphere 4.1 появилась поддержка функций VAAI, реализуемых производителями дисковых массивов, так называемый Hardware Assisted Locking. В частности, один из алгоритмов VAAI, отвечающий за блокировки, называется VAAI ATS (Atomic Test & Set). Он заменяет собой традиционный механизм SCSI reservations, позволяя блокировать только те блоки метаданных на уровне секторов устройства, изменение которых в эксклюзивном режиме требуется хостом. Действует он для всех перечисленных выше операций (лок на файлы ВМ, vMotion и т.п.).
Если дисковый массив поддерживает ATS, то традиционная последовательность SCSI-комманд RESERVE, READ, WRITE, RELEASE заменяется на SCSI-запрос read-modify-write для нужных блокировке блоков области метаданных, что не вызывает "замораживания" LUN для остальных хостов. Но одновременно метаданные тома VMFS, естественно, может обновлять только один хост. Все это лучшим образом влияет на производительность операций ввода-вывода и уменьшает количество конфликтов SCSI reservations, возникающих в традиционной модели.
По умолчанию VMFS 5 использует модель блокировок ATS для устройств, которые поддерживают этот механизм VAAI. Но бывает такое, что по какой-либо причине, устройство перестало поддерживать VAAI (например, вы откатили обновление прошивки). В этом случае обработку блокировок средствами ATS для устройства нужно отменить. Делается это с помощью утилиты vmkfstools:
vmkfstools --configATSOnly 0 device
где device - это пусть к устройству VMFS вроде следующего:
Как вы знаете в последнем релизе платформы виртуализации VMware vSphere 4.1 было заявлено множество новых возможностей. Одна из них весьма важна с точки зрения производительности в части работы виртуальных машин с системой хранения. Эта технология называется VMware vSphere VAAI, то есть vStorage API for Array Integration.
Итак, что такое VMware vSphere VAAI. Это комплекс технологий компании VMware, разработанный в сотрудничестве с производителями дисковых массивов (потому и API), предназначенный для передачи некоторых операций виртуальных машин по работе с дисками на сторону массива. В этом случае хост-сервер виртуализации VMware ESX / ESXi при выполнении стандартных процедур в среде виртуализации при работе ВМ с дисковой подсистемой просто дает команду массиву (или массивам) сделать определенные действия, при этом сам хост не гонит через себя все те данные и команды, которые он раньше был вынужден прогонять. То есть, это - Hardware Offloading операций с СХД.
Ну а раз это аппаратно-зависимая вещь, то это означает, что сам массив должен в своем Firmware поддерживать vSphere VAAI (у которой еще бывает несколько видов - так называемые "примитивы"). Чтобы узнать поддерживает ли ваш хост VAAI нужно пойти в VMware Hardware Compatibility Guide и поискать свой дисковый массив в категории "Storage/SAN". Там все сделано несколько криво, но нужно искать в Supported Releases следующую сноску:
VAAI primitives "Full Copy", "Block Zeroing" and "Hardware Assisted Locking" are supported with vmw_vaaip_xxx plug-in
xxx - это идентификатор плагина от VMware
Ну и, конечно, ваш хост VMware ESX / ESXi должен быть версии 4.1 или выше. И помните, что на некоторых массивах VAAI по умолчанию выключена, поэтому вам нужно почитать документацию о том, как ее включить. Кроме того, функциональность VMware vSphere VAAI есть только в изданиях VMware vSphere Enterprise и Enterprise Plus (см. сравнение изданий).
Теперь, какие примитивы (то есть типовые операции с СХД) реализует VMware vSphere VAAI:
Full Copy / Clone Blocks / XCOPY – функция, позволяющая передать на сторону массива возможности копирования объектов виртуальной инфраструктуры без задействования операций четния-записи со стороны сервера VMware ESX 4.1. Эту функцию также называют Hardware Offloaded Copy и SAN Data Copy Offloading.
Write Same / Zero Blocks – возможность обнуления больших массивов блоков на дисковых устройствах для быстрого создания дисков vmdk типа eager zero thick.
Atomic Test and Set (ATS) –возможность защиты метаданных тома VMFS как кластерной файловой системы в ситуациях, когда большое количество хостов ESX имеют разделяемый доступ к одному хранилищу. Также эта функция называется Hardware Assisted Locking.
Давайте рассмотрим как эти компоненты VAAI работают и для чего они нужны.
Full Copy
Используя этот примитив, дисковый массив по команде VMware vSphere осуществляет копирование виртуальной машины (а самое главное для нас копирование диска VMDK) без участия сервера ESX / ESXi и его стека работы с подсистемой хранения (соответственно, не гоняется трафик и не дается нагрузка на CPU). В этом случае гипервизор рассказывает хранилищу, какие блоки занимает виртуальная машина, а оно уже делает все остальное по копированию блоков.
Виртуальная машина может копироваться как в пределах одного хранилища, так и между двумя массивами, если они поддерживают функциональность XCopy. Наиболее интересный способ применения данной техники - это массовое развертывание виртуальных машин из шаблонов, которое больше всего востребовано в VDI-инсталляциях (например, в решении для виртуализации корпоративных ПК предприятия VMware View 4.5).
Еще один важный аспект применения - операция Storage vMotion, которая требует копирования виртуальных дисков машины.
С vSphere VAAI операции по копированию блоков данных хранилищ виртуальных машин занимают меньше времени (в некоторых случаях оно сокращается на 95%):
Ну а вот такие результаты нам выдает Storage vMotion:
Кроме того, данная технология интегрирована и с функциональностью "тонких" (thin) дисков как самой VMware, так и механизмом Thin Provisioning сторонних вендоров.
Write Same / Zero Blocks
За счет этой технологии сервер VMware ESX / ESXi может дать команду хранилищу обнулить блоки виртуальных дисков типа Eager zeroed thick (см. типы дисков). Эти диски являются самыми безопасными (блоки чистятся при создании) и самыми производительными (при обращении к блоку его не надо обнулять и тратить ресурсы), но занимали очень много времени на их создание. Теперь с техникой VAAI этот процесс сильно ускоряется, что позволяет использовать диски eagerzeroedthick чаще (например, для машин с включенной Fault Tolerance). Напомню, что сейчас по умолчанию в VMware vSphere создаются диски типа Zeroed thick disks.
Теперь одинаковые команды ввода-вывода на сторадж от сервера ESX / ESXi дедуплицируются, а массиву дается команда на повторение одинаковых команд для разных блоков. На эту тему есть отдельное видео:
Atomic Test and Set (ATS) или Hardware Assisted Locking
За счет этой техники vSphere VAAI существенно уменьшается число операций с хранилищем, связанных с блокировкой LUN на системе хранения. Как вы знаете, при работае виртуальных машин возникают конфликты SCSI Reservations, связанные с тем, что некоторые операции вызывают блокировку всего LUN для обновления метаданных тома VMFS. Операций этих много: запуск виртуальной машины (обновляется lock и создаются файлы), развертывание новой ВМ, создание снапшота, миграция vMotion и т.п.
Нехорошо также, что при использовании тонких дисков (например для связанных клонов VMware View) также происходит блокировка LUN при выделении нового блока растущему диску (надо обновлять метаданные - см. тут). Это, прежде всего, приводит к тому, что возникает ограничение на количество размещаемых на LUN виртуальных машин, чтобы конфликтов SCSI Reservations не было слишком много.
Теперь же, за счет VAAI, эти операции передаются на сторону дискового массива, который при необходимости обновить метаданные тома не блокирует весь LUN, а лочит только секторы метаданных, которые требуется обновить. Все это делается массивом безопасно и надежно. Отсюда вытекает уменьшение числа конфликтов SCSI Reservations и ,как следствие, лучшая производительность и увеличения числа ВМ на LUN.
Ограничения VMware vSphere VAAI
Недавно мы писали про Data Mover'ы - это компоненты VMware ESX / ESXi, отвечающие за работу хост-сервера с хранилищами при копировании данных. Поддержкой VAAI заведует компонент fs3dm – hardware offload. Он пока еще молодой, поэтому не поддерживает некоторых сценариев использования. Соответственно все или некоторые техники VAAI у вас не будут работать в следующих случаях:
Исходный и целевой тома VMFST имеют разные размеры блоков
Исходный файл лежит на том RDM, а целевое хранилище - это не том RDM
Исходный тип диска VMDK - это eagerzeroedthick, а целевой - thin
Исходный или целевой тип диска VMDK VMDK - один из типов sparse или hosted (не платформа vSphere)
Исходная виртуальная машина имеет снапшот
Блоки хранилища, где лежит виртуальная машина не выровнены (по умолчанию vSphere Client выравнивает блоки автоматически)
Как включить VMware vSphere VAAI
Как уже было сказано выше, со стороны хранилищ VAAI может быть выключена и нужно почитать документацию на СХД. На хостах ESX / ESXi по умолчанию VAAI включена. Проверить это можно, перейдя в Configuration > Advanced Settings и увидев следующие параметры, напротив которых стоят единицы:
DataMover/HardwareAcceleratedMove (это возможности Full Copy)
DataMover/HardwareAcceleratedInit (это Zero Block)
Если ваше хранилище не поддерживает VAAI - ничего страшного, хост ESX / ESXi будет работать софтовыми дедовскими методами.
Как проверить, работает ли vSphere VAAI?
Очень просто, откройте категорию Storage на вкладке Configuration в vSphere Client и посмотрите в последний столбик.
Статус Unknown означает, что хост еще не обращался к операциям, которые поддерживаются VAAI (то есть, это дефолтный статус). Если вы сделаете какую-нибудь операцию с VAAI (например, Copy/Paste виртуального диска больше 4 МБ), то VAAI попробует отработать. Если он отработает успешно - выставится статус Supported, ну а если нет - то Not Supported.
Опросить стораджи можно также из командной строки: