Как вы знаете в последнем релизе платформы виртуализации 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.
Опросить стораджи можно также из командной строки: