Виртуализация

CPU и память виртуальной машины: vCPU, NUMA и overcommit

Как виртуальные процессоры и память ВМ связаны с физическим сервером и почему больше ресурсов не всегда быстрее.

Назначить виртуальной машине 32 vCPU и 128 ГБ RAM технически просто. Гораздо сложнее понять, как эти ресурсы будут обслуживаться физическим сервером. В виртуальной среде число, указанное в настройках ВМ, ещё не гарантирует соответствующего объёма физического ресурса в каждый момент времени.

Что такое vCPU

vCPU — виртуальный процессор, который гипервизор планирует на физические логические CPU хоста. Если виртуальная машина имеет 8 vCPU, это не означает, что за ней навсегда закреплены восемь физических ядер.

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

Почему слишком много vCPU может мешать

Большая ВМ сложнее для планировщика. Приложению может быть выгоднее иметь 8 действительно доступных vCPU, чем 32 vCPU, постоянно конкурирующих с соседями.

NUMA

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

Память и overcommit

Память можно выделять строго или с переподпиской. Механизмы ballooning позволяют гипервизору попросить гостевую ОС освободить часть памяти. Другие платформы применяют дополнительные техники, но общий принцип один: overcommit безопасен лишь тогда, когда рабочие нагрузки не требуют весь объём одновременно.

Практический вывод

Sizing виртуальной машины начинается не с вопроса «сколько можно дать», а с наблюдения за реальной нагрузкой. CPU utilisation, run queue, working set памяти и NUMA-поведение дают больше информации, чем формальное количество vCPU и гигабайт RAM.

Материал предназначен для общего технического понимания. Конкретная конфигурация зависит от платформы, версии ПО и требований среды.