vCPU — логическая единица процессорной мощности, которую гипервизор предоставляет виртуальной машине. Один vCPU соответствует одному потоку исполнения (hardware thread) на физическом процессоре. На сервере с двумя 8-ядерными Intel Xeon с Hyper-Threading доступно 32 аппаратных потока — значит, можно выделить до 32 vCPU без оверкоммита.
Как работает vCPU
Гипервизор (KVM, VMware ESXi, Xen) реализует планировщик vCPU: он решает, какие виртуальные ядра в какой момент получают реальное время физического процессора. При оверкоммите продаётся больше vCPU, чем есть физических потоков. Если все VM одновременно нагружают CPU на 100%, каждая получит меньше заявленного — так работает CPU steal (метрика %st в top).
CPU pinning — привязка vCPU к конкретным физическим ядрам. Это устраняет «шумного соседа» и полностью предсказуемую производительность. В KVM: virsh vcpupin vmname vcpu cpulist. На хостинге без CPU pinning производительность может деградировать в пиковые часы.
vCPU vs физический CPU
| Параметр | Физический CPU-поток | vCPU |
|---|---|---|
| Доступность | Всегда (hardware) | Зависит от планировщика гипервизора |
| Производительность | 100% (baseline) | 85–97% при малом оверкоммите |
| Изоляция | Физическая (ядро) | Программная (scheduler) |
| CPU Steal | Не применимо | 0–30%+ при перегрузке хоста |
История
Концепция виртуального процессора появилась вместе с первыми гипервизорами IBM в 1960–70-х годах. Для x86-платформы термин vCPU стал употребляться с VMware GSX/ESX в 1999–2001 годах. KVM внёс vCPU как ядерную концепцию в Linux в 2007 году. AMD добавила расширения виртуализации AMD-V в 2006 году (Pacifica), Intel VT-x — в 2005 году (Vanderpool) — оба стандарта сделали реализацию vCPU эффективной на аппаратном уровне.
Практические рекомендации
Для баз данных и CPU-интенсивных задач: vCPU = количество реальных физических потоков, без оверкоммита. Для веб-серверов и приложений с I/O-ожиданием: умеренный оверкоммит 1,5–2× допустим. При выборе VPS: спрашивайте провайдера, есть ли CPU pinning или CPU steal ограничен. Метрика steal >5% — признак перегруженного хоста. На Proxmox: qm config VMID | grep cpu показывает тип CPU и привязку.
Оверкоммит CPU в различных гипервизорах
В KVM оверкоммит CPU — программный: scheduler Linux CFS распределяет время между vCPU. По умолчанию нет жёсткого ограничения ratio. Рекомендация Red Hat: не более 10:1 (vCPU:pCPU). В VMware vSphere: рекомендуемый ratio 3:1 для серверной нагрузки, 6:1 для VDI. В Proxmox VE: параметр cpulimit ограничивает суммарный % CPU одной VM — например, cpulimit: 2 означает максимум 200% (2 полных ядра). CPU shares (cpuunits) управляют приоритетом при конкуренции. Для production баз данных: cpulimit = числу выделенных vCPU, оверкоммит отключить.
vCPU в облачных провайдерах
AWS EC2: vCPU — это один поток гипервизора (hardware thread с HT). c6i.xlarge — 4 vCPU = 2 физических ядра Intel с HT. В отчётах AWS прямо указано: "1 vCPU = 1 hyper-thread". Google Compute Engine: похожая схема, 2 vCPU = 1 физическое ядро. Исключение: bare-metal инстансы (AWS m5.metal, i3.metal) — здесь вы получаете реальные физические ядра без виртуализации, overhead = 0%. Для задач с максимальными требованиями к CPU (компиляция ядра, ML inference) bare-metal даёт 5–15% прироста над виртуализованными инстансами.