Latency Sensitive Virtual Machines

В этом посте пойдет речь о настройках VM на борту которых работают экстра-чувствительные к задержкам приложения и службы. Что такое эти чувствительные к задержкам приложения? Это высокопроизводительные (HPC) службы, приложения высокочувствительные к сетевой активности и ее задержкам, голосовая телефония, службы торговли и карточной обработки, которые не могут терпеть задержку выше десятков микросекунд. VMware поддерживает часть из этих приложений, хотя совсем недавно виртуализация накладывала достаточно высокий уровень пенальти по производительности и подобные системы не могли быть виртуализированы ввиду этого. Но теперь благодаря развивающимся технологиям в мире виртуализации этим ограничениям пришел конец и сейчас многие подобные, чувствительные приложения могут быть виртуализированы с поддержкой как их вендора так и vSphere. Что бы обеспечить нашу VM ресурсами с низкой задержкой при доставке, необходимо проследовать в VM → Edit Settings → VM Options → Advanced→Latency Sensitivity и выбрать там High. А теперь следует разобраться что же это все значит и как это работает.

Latency-Sensitivity Feature

Сама по себе виртуализация накладывает дополнительные расходы при работе VM — на CPU, сеть и память. Что накладывает дополнительные расходы?

  • Виртуализация ввода-вывода. Ввод-вывод проходит путь внутри гипервизора через несколько уровней. Это VMM (Virtual Machine Monitor) и vmkernel (я дро гипервизора), что добавляет некоторую задержку, так же присутствую различные технологии для уменьшения задействования CPU, например, LRO.
  • Виртуализация CPU. pCPU не дается виртуальной машине в полное пользование и строгий CPU шедулер внимательно следит за процессорным временем, отданным каждой VM, исполняемой на нем и очень часто снимает один vCPU с исполнения в пользу другого, из этого вытекают классические проблемы смены контекста, использования кеша и так далее. Особенно заметны накладные расходы при частом входе-выходе виртуального ядра в HALT состояние.
  • Дополнительные факторы. Это и Power Management и ввод-вывод с хранилища, но это уже за пределами влияния ESXi.

Итак, Latency Sensitive функция действует на виртуальную машину и позволяет обойти некоторые ограничения и задержки в виртуальной среде. Что же она делает? Погнали:

  • Эксклюзивный доступ к физическому оборудованию
  • Обход уровней виртуализации
  • Настройка уровней виртуализации

Эксклюзивный доступ к физическому оборудованию. Дает эксклюзивный доступ к pCPU в случае Reservation 100% у vCPU. Что гарантирует персональное физическое ядро, даже процессы Vmkernel хоста не будут иметь доступа к этому ядру. Но для этого необходимо выставить полную резервацию CPU. Так же рекомендуется зарезервировать весь объем виртуальной памяти у VM, чтобы в случае конкуренции за ресурс памяти, различные механизмы рекламации не отбирали память у чувствительной VM, тем самым ухудшая ее производительность.

Обход уровней виртуализации. Когда персональный доступ к физическому ядру предоставлен, больше нет нужды использовать CPU scheduler для предоставления процессорного времени для vCPU виртуальной машины и vCPU исполняется на уровне VMM (virtual machine monitor), что уменьшает задержки и время переключения на исполнение, но все же переключение между VMM и vCPU остается на этом PCPU и небольшие задержки все же есть, но намного меньше.

Настройка уровней виртуализации. Когда используется VMXNET3 адаптер для VM, interrupt coalescing и LRO (Large Receive Offload) автоматически отключаются, чтобы не добавлять задержек в работе сети. Хотя такие настройки могут помочь в производительности, они могут иметь негативный эффект для чувствительных к сетевым задержкам приложений. Если аппаратное обеспечение поддерживает сквозной механизм, такой как виртуализация ввода-вывода с одним корнем (SR-IOV), и виртуальная машина не нуждается в определенных функциях виртуализации, таких как vMotion, NetIOC и HA, мы рекомендуем использовать pass-through механизм для проброса сетевой карты в VM напрямую. Итак, SR-IOV и VM DirectPath I/O сетевого адаптера могут существенно улучшить жизнь нашим чувствительным приложениям.

Latency-Sensitivity побочные эффекты

Хоть и подобные настройки позволяют получить у VM близкое к 0 время RDY%, у этого есть и свои негативные стороны. VM выдается персональный доступ к физическому ядру и никакая другая VM не сможет им пользоваться, даже если оно idle. Машина превращается в «жадного» единоличника и ограничивает какую-либо активность на своем ядре другим потребителям.