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.