Virtualize cpu performance counters что это

Анализ производительности ВМ в VMware vSphere. Часть 2: Memory

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

В этой статье поговорим про счетчики производительности оперативной памяти (RAM) в vSphere.
Вроде бы с памятью все более однозначно, чем с процессором: если на ВМ возникают проблемы с производительностью, их сложно не заметить. Зато если они появляются, справиться с ними гораздо сложнее. Но обо всем по порядку.

Немного теории

Оперативная память виртуальных машин берется из памяти сервера, на которых работают ВМ. Это вполне очевидно:). Если оперативной памяти сервера не хватает для всех желающих, ESXi начинает применять техники оптимизации потребления оперативной памяти (memory reclamation techniques). В противном случае операционные системы ВМ падали бы с ошибками доступа к ОЗУ.

Какие техники применять ESXi решает в зависимости от загруженности оперативной памяти:

Состояние памятиГраницаДействия
High400% от minFreeПосле достижения верхней границы, большие страницы памяти разбиваются на маленькие (TPS работает в стандартном режиме).
Clear100% от minFreeБольшие страницы памяти разбиваются на маленькие, TPS работает принудительно.
Soft64% от minFreeTPS + Balloon
Hard32% от minFreeTPS + Compress + Swap
Low16% от minFreeCompress + Swap + Block

minFree — это оперативная память, необходимая для работы гипервизора.

До ESXi 4.1 включительно minFree по умолчанию было фиксированным — 6% от объема оперативной памяти сервера (процент можно было поменять через опцию Mem.MinFreePct на ESXi). В более поздних версиях из-за роста объемов памяти на серверах minFree стало рассчитываться исходя из объема памяти хоста, а не как фиксированное процентное значение.

Значение minFree (по умолчанию) считается следующим образом:

Процент памяти, резервируемый для minFreeДиапазон памяти
6%0-4 Гбайт
4%4-12 Гбайт
2%12-28 Гбайт
1%Оставшаяся память

Например, для сервера со 128 Гбайт RAM значение MinFree будет таким:
MinFree = 245,76 + 327,68 + 327,68 + 1024 = 1925,12 Мбайт = 1,88 Гбайт
Фактическое значение может отличаться на пару сотен МБайт, это зависит от сервера и оперативной памяти.

Процент памяти, резервируемый для minFreeДиапазон памятиЗначение для 128 Гбайт
6%0-4 Гбайт245,76 Мбайт
4%4-12 Гбайт327,68 Мбайт
2%12-28 Гбайт327,68 Мбайт
1%Оставшаяся память (100 Гбайт)1024 Мбайт

Обычно для продуктивных стендов нормальным можно считать только состояние High. Для стендов для тестирования и разработки приемлемыми могут быть состояния Clear/Soft. Если оперативной памяти на хосте осталось менее 64% MinFree, то у ВМ, работающих на нем, точно наблюдаются проблемы с производительностью.

В каждом состоянии применяются определенные memory reclamation techniques начиная с TPS, практически не влияющего на производительность ВМ, заканчивая Swapping’ом. Расскажу про них подробнее.

Transparent Page Sharing (TPS). TPS — это, грубо говоря, дедупликация страниц оперативной памяти виртуальных машин на сервере.

ESXi ищет одинаковые страницы оперативной памяти виртуальных машин, считая и сравнивая hash-сумму страниц, и удаляет дубликаты страниц, заменяя их ссылками на одну и ту же страницу в физической памяти сервера. В результате потребление физической памяти снижается и можно добиться некоторой переподписки по памяти практически без снижения производительности.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это
Источник

Данный механизм работает только для страниц памяти размером 4 Кбайт (small pages). Страницы размером 2 МБайт (large pages) гипервизор дедуплицировать даже не пытается: шанс найти одинаковые страницы такого размера не велик.

По умолчанию ESXi выделяет память большим страницам. Разбивание больших страниц на маленькие начинается при достижении порога состояния High и происходит принудительно, когда достигается состояние Clear (см. таблицу состояний гипервизора).

Если же вы хотите, чтобы TPS начинал работу, не дожидаясь заполнения оперативной памяти хоста, в Advanced Options ESXi нужно установить значение “Mem.AllocGuestLargePage” в 0 (по умолчанию 1). Тогда выделение больших страниц памяти для виртуальных машин будет отключено.

С декабря 2014 во всех релизах ESXi TPS между ВМ по умолчанию отключен, так как была найдена уязвимость, теоретически позволяющая получить из одной ВМ доступ к оперативной памяти другой ВМ. Подробности тут. Информация про практическую реализацию эксплуатации уязвимости TPS мне не встречалось.

Политика TPS контролируется через advanced option “Mem.ShareForceSalting” на ESXi:
0 — Inter-VM TPS. TPS работает для страниц разных ВМ;
1 – TPS для ВМ с одинаковым значением “sched.mem.pshare.salt” в VMX;
2 (по умолчанию) – Intra-VM TPS. TPS работает для страниц внутри ВМ.

Однозначно имеет смысл выключать большие страницы и включать Inter-VM TPS на тестовых стендах. Также это можно использовать для стендов с большим количеством однотипных ВМ. Например, на стендах с VDI экономия физической памяти может достигать десятков процентов.

Memory Ballooning. Ballooning уже не такая безобидная и прозрачная для операционной системы ВМ техника, как TPS. Но при грамотном применении с Ballooning’ом можно жить и даже работать.

Вместе с Vmware Tools на ВМ устанавливается специальный драйвер, называемый Balloon Driver (он же vmmemctl). Когда гипервизору начинает не хватать физической памяти и он переходит в состояние Soft, ESXi просит ВМ вернуть неиспользуемую оперативную память через этот Balloon Driver. Драйвер в свою очередь работает на уровне операционной системы и запрашивает свободную память у нее. Гипервизор видит, какие страницы физической памяти занял Balloon Driver, забирает память у виртуальной машины и возвращает хосту. Проблем с работой ОС не возникает, так как на уровне ОС память занята Balloon Driver’ом. По умолчанию Balloon Driver может забрать до 65% памяти ВМ.

Если на ВМ не установлены VMware Tools или отключен Ballooning (не рекомендую, но есть KB:), гипервизор сразу переходит к более жестким техникам отъема памяти. Вывод: следите, чтобы VMware Tools на ВМ были.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это
Работу Balloon Driver’а можно проверить из ОС через VMware Tools.

Memory Compression. Данная техника применяется, когда ESXi доходит до состояния Hard. Как следует из названия, ESXi пытается сжать 4 Кбайт страницы оперативной памяти до 2 Кбайт и таким образом освободить немного места в физической памяти сервера. Данная техника значительно увеличивает время доступа к содержимому страниц оперативной памяти ВМ, так как страницу надо предварительно разжать. Иногда не все страницы удается сжать и сам процесс занимает некоторое время. Поэтому данная техника на практике не очень эффективна.

Memory Swapping. После недолгой фазы Memory Compression ESXi практически неизбежно (если ВМ не уехали на другие хосты или не выключились) переходит к Swapping’у. А если памяти осталось совсем мало (состояние Low), то гипервизор также перестает выделять ВМ страницы памяти, что может вызвать проблемы в гостевых ОС ВМ.

В отличие от Ballooning’а, когда у ВМ отбираются неиспользуемые страницы, при Swapping’e на диск могут переехать страницы, которые активно используются ОС или приложениями внутри ВМ. В результате производительность ВМ падает вплоть до подвисания. ВМ формально работает и ее как минимум можно правильно отключить из ОС. Если вы будете терпеливы 😉

Если ВМ ушли в Swap — это нештатная ситуация, которую по возможности лучше не допускать.

Основные счетчики производительности памяти виртуальной машины

Вот мы и добрались до главного. Для мониторинга состояния памяти в ВМ есть следующие счетчики:

Active — показывает объем оперативной памяти (Кбайт), к которому ВМ получила доступ в предыдущий период измерения.

Usage — то же, что Active, но в процентах от сконфигурированной оперативной памяти ВМ. Рассчитывается по следующей формуле: active ÷ virtual machine configured memory size.
Высокий Usage и Active, соответственно, не всегда является показателем проблем производительности ВМ. Если ВМ агрессивно использует память (как минимум, получает к ней доступ), это не значит, что памяти не хватает. Скорее это повод посмотреть, что происходит в ОС.
Есть стандартный Alarm по Memory Usage для ВМ:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Shared — объем оперативной памяти ВМ, дедуплицированной с помощью TPS (внутри ВМ или между ВМ).

Granted — объем физической памяти хоста (Кбайт), который был отдан ВМ. Включает Shared.

Consumed (Granted — Shared) — объем физической памяти (Кбайт), которую ВМ потребляет с хоста. Не включает Shared.

Если часть памяти ВМ отдается не из физической памяти хоста, а из swap-файла или память отобрана у ВМ через Balloon Driver, данный объем не учитывается в Granted и Consumed.
Высокие значения Granted и Consumed — это совершенно нормально. Операционная система постепенно забирает память у гипервизора и не отдает обратно. Со временем у активно работающей ВМ значения данных счетчиков приближается к объему сконфигурированной памяти, и там остаются.

Zero — объем оперативной памяти ВМ (Кбайт), который содержит нули. Такая память считается гипервизором свободной и может быть отдана другим виртуальным машинам. После того, как гостевая ОС получила записала что-либо в зануленную память, она переходит в Consumed и обратно уже не возвращается.

Reserved Overhead — объем оперативной памяти ВМ, (Кбайт) зарезервированный гипервизором для работы ВМ. Это небольшой объем, но он обязательно должен быть в наличии на хосте, иначе ВМ не запустится.

Balloon — объем оперативной памяти (Кбайт), изъятой у ВМ с помощью Balloon Driver.

Compressed — объем оперативной памяти (Кбайт), которую удалось сжать.

Swapped — объем оперативной памяти (Кбайт), которая за неимением физической памяти на сервере переехала на диск.
Balloon и остальные счетчики memory reclamation techniques равны нулю.

Вот так выглядит график со счетчиками Memory нормально работающей ВМ со 150 ГБ оперативной памяти.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

На графике ниже у ВМ явные проблемы. Под графиком видно, что для данной ВМ были использованы все описанные техники работы с оперативной памятью. Balloon для данной ВМ сильно больше, чем Consumed. По факту ВМ скорее мертва, чем жива.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

ESXTOP

Как и с CPU, если хотим оперативно оценить ситуацию на хосте, а также ее динамику с интервалом до 2 секунд, стоит воспользоваться ESXTOP.

Экран ESXTOP по Memory вызывается клавишей «m» и выглядит следующим образом (выбраны поля B,D,H,J,K,L,O):

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Интересными для нас будут следующие параметры:

Mem overcommit avg — среднее значение переподписки по памяти на хосте за 1, 5 и 15 минут. Если выше нуля, то это повод посмотреть, что происходит, но не всегда показатель наличия проблем.

В строках PMEM/MB и VMKMEM/MB — информация о физической памяти сервера и памяти доступной VMkernel. Из интересного здесь можно увидеть значение minfree (в МБайт), состояние хоста по памяти (в нашем случае, high).

В строке NUMA/MB можно увидеть распределение оперативной памяти по NUMA-нодам (сокетам). В данном примере распределение неравномерное, что в принципе не очень хорошо.

Далее идет общая статистика по серверу по memory reclamation techniques:

PSHARE/MB — это статистика TPS;

SWAP/MB — статистика использования Swap;

ZIP/MB — статистика компрессии страниц памяти;

MEMCTL/MB — статистика использования Balloon Driver.

По отдельным ВМ нас может заинтересовать следующая информация. Имена ВМ я скрыл, чтобы не смущать аудиторию:). Если метрика ESXTOP аналогична счетчику в vSphere, привожу соответствующий счетчик.

MEMSZ — объем памяти, сконфигурированный на ВМ (МБ).
MEMSZ = GRANT + MCTLSZ + SWCUR + untouched.

GRANT — Granted в МБайт.

TCHD — Active в МБайт.

MCTL? — установлен ли на ВМ Balloon Driver.

MCTLSZ — Balloon в МБайт.

MCTLGT — объем оперативной памяти (МБайт), который ESXi хочет изъять у ВМ через Balloon Driver (Memctl Target).

MCTLMAX — максимальный объем оперативной памяти (МБайт), который ESXi может изъять у ВМ через Balloon Driver.

SWCUR — текущий объем оперативной памяти (МБайт), отданный ВМ из Swap-файла.

SWGT — объем оперативной памяти (МБайт), который ESXi хочет отдавать ВМ из Swap-файла (Swap Target).

Также через ESXTOP можно посмотреть более подробную информацию про NUMA-топологию ВМ. Для этого нужно выбрать поля D,G:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

NHN – NUMA узлы, на которых расположена ВМ. Здесь можно сразу заметить wide vm, которые не помещаются на один NUMA узел.

NRMEM – сколько мегабайт памяти ВМ берет с удаленного NUMA узла.

NLMEM – сколько мегабайт памяти ВМ берет с локального NUMA узла.

N%L – процент памяти ВМ на локальном NUMA узле (если меньше 80% — могут возникнуть проблемы с производительностью).

Memory на гипервизоре

Если счетчики CPU по гипервизору обычно не представляют особого интереса, то с памятью ситуация обратная. Высокий Memory Usage на ВМ не всегда говорит о наличие проблемы с производительностью, а вот высокий Memory Usage на гипервизоре, как раз запускает работу техник управления памятью и вызывает проблемы с производительностью ВМ. За алармами Host Memory Usage надо следить и не допускать попадания ВМ в Swap.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Unswap

Если ВМ попала в Swap, ее производительность сильно снижается. Следы Ballooning’а и компрессии быстро исчезают после появления свободной оперативной памяти на хосте, а вот возвращаться из Swap в оперативную память сервера виртуальная машина совсем не торопится.
До версии ESXi 6.0 единственным надежным и быстрым способ вывода ВМ из Swap была перезагрузка (если точнее выключение/включение контейнера). Начиная с ESXi 6.0 появился хотя и не совсем официальный, но рабочий и надежный способ вывести ВМ из Swap. На одной из конференций мне удалось пообщаться с одним из инженеров VMware, отвечающим за CPU Scheduler. Он подтвердил, что способ вполне рабочий и безопасный. В нашем опыте проблем с ним также замечено не было.

Собственно команды для вывода ВМ из Swap описал Duncan Epping. Не буду повторять подробное описание, просто приведу пример ее использования. Как видно на скриншоте, через некоторое время после выполнения указанной команд Swap на ВМ исчезает.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Советы по управлению оперативной памятью на ESXi

Напоследок приведу несколько советов, которые помогут вам избежать проблем с производительностью ВМ из-за оперативной памяти:

Источник

Виртуализация vSphere, Hyper-V, Xen и Red Hat

Более 5550 заметок о виртуализации, виртуальных машинах VMware, Microsoft и Xen, а также Kubernetes

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

VM Guru / News / Метрики производительности процессора в утилите esxtop для VMware vSphere.

Метрики производительности процессора в утилите esxtop для VMware vSphere.

Мы уже касались некоторых аспектов мониторинга производительности с помощью утилиты esxtop, которая есть на сервере VMware ESXi, а также метрик производительности хранилищ (и немного сетевого взаимодействия). Сегодня мы более детально взглянем на метрики производительности процессора (CPU) для контроля нагрузки виртуальных машин.

Если мы запустим утилиту esxtop, то увидим следующие столбцы (интересующее нас выделено красным):

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Нас интересует 5 счетчиков, касающиеся процессоров виртуальных машин, с помощью которых мы сможем сделать выводы об их производительности. Рассмотрим их подробнее:

Счетчик %RUN

Если значение данного счетчика равно x 100%, это значит, что в гостевой ОС виртуальной машины процессы загрузили все доступные процессорные ресурсы ее vCPU. То есть необходимо зайти внутрь ВМ и исследовать проблему.

Счетчики %WAIT и %VMWAIT

Счетчик %WAIT отображает процент времени, которое виртуальная машина ждала, пока ядро ESXi (VMkernel) выполняло какие-то операции, перед тем, как она смогла продолжить выполнение операций. Если значение этого счетчика значительно больше значений %RUN, %RDY и %CSTP, это значит, что виртуальная машина дожидается окончания какой-то операции в VMkernel, например, ввода-вывода с хранилищем. В этом случае значение счетчика %SYS, показывающего загрузку системных ресурсов хоста ESXi, будет значительно выше значения %RUN.

Когда вы видите высокое значение данного счетчика, это значит, что нужно посмотреть на производительность хранилища виртуальной машины, а также на остальные периферийные устройства виртуального «железа». Зачастую, примонтированный ISO-образ, которого больше нет на хранилище, вызывает высокое значение счетчика. Это же касается примонтированных USB-флешек и других устройств ВМ.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Счетчик %RDY

Главный счетчик производительности процессора. Означает, что виртуальная машина (гостевая ОС) готова исполнять команды на процессоре (ready to run), но ожидает в очереди, пока процессоры сервера ESXi заняты другой задачей (например, другой ВМ). Является суммой значений %RDY для всех отдельных виртуальных процессоров ВМ (vCPU). Обращать внимание на него надо, когда он превышает пороговое значение 10%.

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

Кроме того, значение счетчика %RDY может быть высоким при установленном значении CPU Limit в настройках виртуальной машины или пула ресурсов (в этом случае посмотрите счетчик %MLMTD, который при значении больше 0, скорее всего, говорит о достижении лимита). Также посмотрите вот этот документ VMware.

Счетчик %CSTP

Этот счетчик отображает процент времени, когда виртуальная машина готова исполнять команды, одна вынуждена ждать освобождения нескольких vCPU при использовании vSMP для одновременного исполнения операций. Например, когда на хосте ESXi много виртуальных машин с четырьмя vCPU, а на самом хосте всего 4 pCPU могут возникать такие ситуации с простоем виртуальных машин для ожидания освобождения процессоров. В этом случае надо либо перенести машины на другие хосты ESXi, либо уменьшить у них число vCPU.

В итоге мы получаем следующую формулу (она верна для одного из World ID одной виртуальной машины)

%WAIT + %RDY + %CSTP + %RUN = 100%

То есть, виртуальная машина либо простаивает и ждет сервер ESXi (%WAIT), либо готова исполнять команды, но процессор занят (%RDY), либо ожидает освобождения нескольких процессоров одновременно (%CSTP), либо, собственно, исполняется (%RUN).

Чтобы оставлять комментарии, вы должны быть зарегистрированы на сайте.Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Вебинары VMC о виртуализации:

Постер VMware vSphere PowerCLI 6.3:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware ESXi 5.1:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware Hands-on Labs 2015:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware Platform Services Controller 6.0:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware vCloud Networking:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware NSX (референсный):
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware vCloud SDK:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware vCloud Suite:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware vCenter Server Appliance:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Порты и соединения VMware vSphere 6:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Порты и соединения VMware Horizon 7:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Порты и соединения VMware NSX:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Управление памятью в VMware vSphere 5:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Как работает кластер VMware High Availability:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер VMware vSphere 5.5 ESXTOP (обзорный):
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер Veeam Backup & Replication v8 for VMware:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Постер Microsoft Windows Server 2012 Hyper-V R2:
Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Источник

Анализ производительности виртуальной машины в VMware vSphere. Часть 1: CPU

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Если вы администрируете виртуальную инфраструктуру на базе VMware vSphere (или любого другого стека технологий), то наверняка часто слышите от пользователей жалобы: «Виртуальная машина работает медленно!». В этом цикле статей разберу метрики производительности и расскажу, что и почему «тормозит» и как сделать так, чтобы не «тормозило».

Буду рассматривать следующие аспекты производительности виртуальных машин:

Для анализа производительности нам понадобятся:

Немного теории

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

В ESXi за работу каждого vCPU (ядра виртуальной машины) отвечает отдельный процесс – world в терминологии VMware. Также есть служебные процессы, но с точки зрения анализа производительности ВМ они менее интересны.

Процесс в ESXi может находиться в одном из четырех состояний:

Основные счетчики производительности CPU виртуальной машины

CPU Usage, %. Показывает процент использования CPU за заданный период.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Как анализировать? Если ВМ стабильно использует CPU на 90% или есть пики до 100%, то у нас проблемы. Проблемы могут выражаться не только в «медленной» работе приложения внутри ВМ, но и в недоступности ВМ по сети. Если система мониторинга показывает, что ВМ периодически отваливается, обратите внимание на пики на графике CPU Usage.

Есть стандартный Аlarm, который показывает загрузку CPU виртуальной машины:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Что делать? Если у ВМ постоянно зашкаливает CPU Usage, то можно задуматься об увеличении количества vCPU (к сожалению, это не всегда помогает) или переносе ВМ на сервер с более производительными процессорами.

CPU Usage in Mhz

В графиках на vCenter Usage в % можно посмотреть только по всей виртуальной машине, графиков по отдельным ядрам нет (в Esxtop значения в % по ядрам есть). По каждому ядру можно посмотреть Usage in MHz.

Как анализировать? Бывает, что приложение не оптимизировано под многоядерную архитектуру: использует на 100% только одно ядро, а остальные простаивают без нагрузки. Например, при дефолтных настройках бэкапа MS SQL запускает процесс только на одном ядре. В итоге резервное копирование тормозит не из-за медленной скорости дисков (именно на это изначально пожаловался пользователь), а из-за того, что не справляется процессор. Проблема была решена изменением параметров: резервное копирование стало запускаться параллельно в несколько файлов (соответственно, в несколько процессов).

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это
Пример неравномерной нагрузки ядер.

Также бывает ситуация (как на графике выше), когда ядра нагружены неравномерно и на некоторых из них есть пики в 100%. Как и при загрузке только одного ядра, alarm по CPU Usage не сработает (он по всей ВМ), но проблемы с производительностью будут.

Что делать? Если ПО в виртуальной машине нагружает ядра неравномерно (использует только одно ядро или часть ядер), нет смысла увеличивать их количество. В таком случае лучше переместить ВМ на сервер с более производительными процессорами.

Также можно попробовать проверить настройки энергопотребления в BIOS сервера. Многие администраторы включают в BIOS режим High Performance и тем самым отключают технологии энергосбережения C-states и P-states. В современных процессорах Intel используется технология Turbo Boost, которая увеличивает частоту отдельных ядер процессора за счет других ядер. Но она работает только при включенных технологиях энергосбережения. Если мы их отключаем, то процессор не может уменьшить энергопотребление ядер, которые не нагружены.

VMware рекомендует не отключать технологии энергосбережения на серверах, а выбирать режимы, которые максимально отдают управление энергопотреблением гипервизору. При этом в настройках энергопотребления гипервизора нужно выбрать High Performance.

Если у вас в инфраструктуре отдельные ВМ (или ядра ВМ) требуют повышенную частоту CPU, корректная настройка энергопотребления может значительно улучшить их производительность.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

CPU Ready (Readiness)

Если ядро ВМ (vCPU) находится в состоянии Ready, оно не выполняет полезную работу. Такое состояние возникает, когда гипервизор не находит свободное физическое ядро, на которое можно назначить процесс vCPU виртуальной машины.

Как анализировать? Обычно если ядра виртуальной машины находятся в состоянии Ready больше 10% времени, то вы заметите проблемы с производительностью. Проще говоря, больше 10% времени ВМ ждет доступности физических ресурсов.

В vCenter можно посмотреть 2 счетчика, связанных с CPU Ready:

Значения счетчика Ready можно посмотреть также в исторической перспективе. Это полезно для установления закономерностей и для более глубокого анализа проблемы. Например, если у виртуальной машины начинаются проблемы с производительностью в какое-то определенное время, можно сопоставить интервалы повешенного значения CPU Ready с общей нагрузкой на сервер, где данная ВМ работает, и принять меры по снижению нагрузки (если DRS не справился).

Ready в отличие от Readiness показывается не в процентах, а миллисекундах. Это счетчик типа Summation, то есть он показывает, сколько времени за период измерения ядро ВМ находилось в состоянии Ready. Перевести данное значение в проценты можно по несложной формуле:

(CPU ready summation value / (chart default update interval in seconds * 1000)) * 100 = CPU ready %

Например, для ВМ на графике ниже пиковое значение Ready на всю виртуальную машину получится следующим:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

При подсчете значения Ready в процентах стоит обращать внимание на два момента:

Рассчитаем Ready на основе данных из графика ниже. (324474/(20*1000))*100 = 1622% на всю ВМ. Если смотреть по ядрам получится уже не так страшно: 1622/64 = 25% на ядро. В данном случае обнаружить подвох довольно просто: значение Ready нереалистичное. Но если речь идет о 10–20% на всю ВМ с несколькими ядрами, то по каждому ядру значение может быть в пределах нормы.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Что делать? Высокое значение Ready говорит о том, что серверу не хватает ресурсов процессора для нормальной работы виртуальных машин. В такой ситуации остается только уменьшить переподписку по процессору (vCPU:pCPU). Очевидно, этого можно добиться, уменьшив параметры существующих ВМ или путем миграции части ВМ на другие серверы.

Co-stop

Как анализировать? Данный счетчик также имеет тип Summation и переводится в проценты аналогично Ready:

(CPU co-stop summation value / (chart default update interval in seconds * 1000)) * 100 = CPU co-stop %

Здесь также нужно обращать внимание на количество ядер на ВМ и на интервал измерения.
В состоянии сostop ядро не выполняет полезную работу. При правильном подборе размера ВМ и нормальной нагрузке на сервер счетчик со-stop должен быть близок к нулю.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это
В данном случае нагрузка явно ненормальная:)

Что делать? Если на одном гипервизоре работают несколько ВМ с большим количеством ядер и есть переподписка по CPU, то счетчик co-stop может вырасти, что приведет к проблемам с производительностью данных ВМ.

Также co-stop вырастет, если для активных ядер одной ВМ используются треды на одном физическом ядре сервера со включенным hyper-treading. Такая ситуация может возникнуть, например, если у ВМ больше ядер, чем физически есть на сервере, где она работает, или если для ВМ включена настройка «preferHT». Про эту настройку можно прочитать здесь.

Чтобы избежать проблем с производительностью ВМ из-за высокого сo-stop, выбирайте размер ВМ в соответствии с рекомендациями производителя ПО, которое работает на этой ВМ, и с возможностями физического сервера, где работает ВМ.

Не добавляйте ядра про запас, это может вызвать проблемы с производительностью не только самой ВМ, но и ее соседей по серверу.

Другие полезные метрики CPU

Run – сколько времени (мс) за период измерения vCPU находился в состоянии RUN, то есть собственно выполнял полезную работу.

Idle – сколько времени (мс) за период измерения vCPU находился в состоянии бездействия. Высокие значения Idle – это не проблема, просто vCPU было «нечего делать».

Wait – сколько времени (мс) за период измерения vCPU находился в состоянии Wait. Так как в данный счетчик включается IDLE, высокие значения Wait также не говорят о наличии проблемы. А вот если при высоком Wait IDLE низкий, значит ВМ ждала завершения операций ввода/вывода, а это, в свою очередь, может говорить о наличии проблемы с производительностью жесткого диска или каких-либо виртуальных устройств ВМ.

Max limited – сколько времени (мс) за период измерения vCPU находился в состоянии Ready из-за установленного лимита по ресурсам. Если производительность необъяснимо низкая, то полезно проверить значение данного счетчика и лимит по CPU в настройках ВМ. У ВМ действительно могут оказаться выставлены лимиты, о которых вы не знаете. Например, так происходит, когда ВМ была склонирована из шаблона, на котором был установлен лимит по CPU.

Swap wait – сколько времени за период измерения vCPU ждал операции с VMkernel Swap. Если значения данного счетчика выше нуля, то у ВМ точно есть проблемы с производительностью. Подробнее про SWAP поговорим в статье про счетчики оперативной памяти.

ESXTOP

Если счетчики производительности в vCenter хороши для анализа исторических данных, то оперативный анализ проблемы лучше производить в ESXTOP. Здесь все значения представлены в готовом виде (не нужно ничего переводить), а минимальный период измерения 2 секунды.
Экран ESXTOP по CPU вызывается клавишей «c» и выглядит следующим образом:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Для удобства можно оставить только процессы виртуальных машин, нажав Shift-V.
Чтобы посмотреть метрики по отдельным ядрам ВМ, нажмите «e» и вбейте GID интересующей ВМ (30919 на скриншоте ниже):

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Кратко пройдусь по столбцам, которые представлены по умолчанию. Дополнительные столбцы можно добавить, нажав «f».

NWLD (Number of Worlds) – количество процессов в группе. Чтобы раскрыть группу и увидеть метрики для каждого процесса (например, для каждого ядра многоядерной ВМ), нажмите “e”. Если в группе больше одного процесса, то значения метрик для группы равны сумме метрик для отдельных процессов.

%USED – сколько циклов CPU сервера использует процесс или группа процессов.

%RUN – сколько времени за период измерения процесс находился в состоянии RUN, т.е. выполнял полезную работу. Отличается от %USED тем, что не учитывает hyper-threading, frequency scaling и время, затраченное на системные задачи (%SYS).

%SYS – время, затраченное на системные задачи, например: обработку прерываний, ввода/вывода, работу сети и пр. Значение может быть высоким, если на ВМ большой ввод/вывод.

%OVRLP – сколько времени физическое ядро, на котором выполняется процесс ВМ, потратило на задачи других процессов.

Данные метрики соотносятся между собой следующим образом:

%USED = %RUN + %SYS — %OVRLP.

Обычно метрика %USED является более информативной.

%WAIT – сколько времени за период измерения процесс находился в состоянии Wait. Включает IDLE.

%IDLE – сколько времени за период измерения процесс находился в состоянии IDLE.

%SWPWT – сколько времени за период измерения vCPU ждал операции с VMkernel Swap.

%VMWAIT – сколько времени за период измерения vCPU находилось в состояния ожидания события (обычно ввода/вывода). Аналогичного счетчика нет в vCenter. Высокие значения говорят о проблемах с вводом/выводом на ВМ.

%WAIT = %VMWAIT + %IDLE + %SWPWT.

Если ВМ не использует VMkernel Swap, то при анализе проблем с производительностью целесообразно смотреть на %VMWAIT, так как данная метрика не учитывает время, когда ВМ ничего не делала (%IDLE).

%RDY – сколько времени за период измерения процесс находился в состоянии Ready.

%CSTP – сколько времени за период измерения процесс находился в состоянии сostop.

%MLMTD – сколько времени за период измерения vCPU находился в состоянии Ready из-за установленного лимита по ресурсам.

%WAIT + %RDY + %CSTP + %RUN = 100% – ядро ВМ все время находится в каком-то из этих четырех состояний.

CPU на гипервизоре

В vCenter есть также счетчики производительности CPU для гипервизора, но они не представляют из себя ничего интересного – это просто сумма счетчиков по всем ВМ на сервере.
Удобнее всего смотреть состояние CPU на сервере на вкладке Summary:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Для сервера, как и для виртуальной машины, есть стандартный Alarm:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

При высокой нагрузке на CPU сервера у ВМ, работающих на нем, начинаются проблемы с производительностью.

В ESXTOP данные о загрузке CPU сервера представлены в верхней части экрана. Помимо стандартного CPU load, который малоинформативен для гипервизоров, есть еще три метрики:

CORE UTIL(%) – загрузка ядра физического сервера. Данный счетчик показывает, сколько времени за период измерения ядро выполняло работу.

PCPU UTIL(%) – если включен hyper-threading, то на каждое физическое ядро приходится два потока (PCPU). Данная метрика показывает, сколько времени каждый поток выполнял работу.

PCPU USED(%) – то же, что PCPU UTIL(%), но учитывает frequency scaling (либо снижение частоты ядра в целях энергосбережения, либо повышение частоты ядра за счет технологии Turbo Boost) и hyper-threading.

PCPU_USED% = PCPU_UTIL% * эффективную частоту ядра / номинальную частоту ядра.

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это
На этом скриншоте для некоторых ядер из-за работы Turbo Boost’а значение USED больше 100%, так как частота ядра выше номинальной.

Пара слов о том, как учитывается hyper-threading. Если процессы исполняются 100% времени на обоих потоках физического ядра сервера, при этом ядро работает на номинальной частоте, то:

В ESXTOP также есть экран с параметрами энергопотребления CPU сервера. Здесь можно посмотреть, используются ли сервером технологии энергосбережения: C-states и P-states. Вызывается клавишей «p»:

Virtualize cpu performance counters что это. Смотреть фото Virtualize cpu performance counters что это. Смотреть картинку Virtualize cpu performance counters что это. Картинка про Virtualize cpu performance counters что это. Фото Virtualize cpu performance counters что это

Стандартные проблемы производительности CPU

Напоследок пробегусь по типичным причинам возникновения проблем с производительностью CPU ВМ и дам короткие советы их решению:

Не хватает тактовой частоты ядра. Если нет возможности перевести ВМ на более производительные ядра, можно попробовать изменить настройки энергопотребления, чтобы Turbo Boost работал эффективнее.

Неправильный сайзинг ВМ (слишком много/мало ядер). Если поставить мало ядер, будет высокая загрузка CPU ВМ. Если много, словите высокий co-stop.

Большая переподписка по CPU на сервере. Если на ВМ высокий Ready, снизьте переподписку по CPU.

Неправильная NUMA-топология на больших ВМ. NUMA-топология, которую видит ВМ (vNUMA), должна соответствовать NUMA-топологии сервера (pNUMA). Про диагностику и возможные варианты решения данной проблемы написано, например, в книге «VMware vSphere 6.5 Host Resources Deep Dive». Если не хотите углубляться и у вас нет лицензионных ограничений по ОС, установленной на ВМ, делайте на ВМ много виртуальных сокетов по одному ядру. Много не потеряете 🙂

На этом про CPU у меня все. Задавайте вопросы. В следующей части расскажу про оперативную память.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *