Управлявайте броя на vCPU и ядра във виртуална машина

Когато създавате виртуални машини на различни хипервизори (VMWare, KVM, Hyper-V и т.н.), може да забележите, че понякога виртуалната машина може да не вижда всички виртуални ядра, разпределени за нея (vCPU). В нашия случай на виртуалната машина KVM бяха разпределени 8 vCPU, на нея беше инсталиран Windows 10. Въпреки това Windows определи тези ядра като отделни процесори, от които могат да се използват само 2 vCPU..

Съдържание:

  • Виртуалната машина на Windows 10 не вижда всички ядра
  • Броят на поддържаните процесори в Windows 10
  • Управление на виртуални ядра и vCPU в KVM
  • Конфигуриране на виртуални процесори и броя на ядрата във VMWare
  • NUMA архитектура и виртуални vCPU

Виртуалната машина на Windows 10 не вижда всички ядра

Ако отворите мениджъра на устройства с Windows, можете да се уверите, че всички избрани ядра са видими като 8 отделни виртуални процесори от този тип QEMU Виртуален процесор версия 2.5.

В същото време в свойствата на Windows 10 (Компютър -> Свойства) и в Управлението на задачите може да се види, че на компютъра са достъпни само 2 виртуални процесора QEMU..

Тоест, без значение колко виртуални ядра добавите, Windows 10 все още може да използва само две. В същото време съседният виртуален сървър с Window Server 2016 на същия хипервизор вижда всички 16 vCPU, разпределени към него.

Броят на поддържаните процесори в Windows 10

Проблемът е, че в настолните издания на Windows (Windows 10 / 8.1 / 7) има ограничение за максимален брой физически процесори (сокети), кой компютър може да използва:

  • Windows 10 Home - 1 процесор
  • Windows 10 Professional - 2 процесора
  • Windows 10 Workstation - до 4 CPU
  • Windows Server 2016 - до 64 процесора

Това ограничение обаче не се отнася за ядките. Т.е. за по-добра производителност можете да използвате процесор с много ядра. Повечето хипервизори могат да предоставят vCPU под формата на процесори, процесорни ядра или дори нишки. Т.е. вместо 8 виртуални процесора можете да предоставите vCPU под формата на 2 гнезда с по 4 ядра във всеки. Нека помислим как да различим виртуалните процесори под формата на ядра в различни системи за виртуализация и как да го свържем с архитектурата NUMA, използвана в съвременните процесори.

Управление на виртуални ядра и vCPU в KVM

В моята виртуална машина KVM в Windows 10, всички назначени виртуални ядра се считат за отделни процесори.

За да използвате всички CPU ресурси, разпределени на виртуална машина, е необходимо виртуалната машина да вижда не 8 процесора, а един 8-ядрен процесор, 2 процесора с 4 ядра или 1 процесор с 4 ядра с 2 нишки. Нека се опитаме да променим начина, по който VM са присвоени на VM на KVM.

Изключете виртуалната машина:

# virsh shutdown server.vpn.ru - където server.vpn.ru е името на виртуалната машина.

Характеристики на управление на VM в KVM от конзолата на сървъра с помощта на virsh.

Отпечатайте текущата XML конфигурация на виртуалната машина KVM:

# virsh dumpxml server.vpn.ru

Нас ни интересува блок с описание на процесорите:

8 1000 / машина hvm        

Както можете да видите, току-що уточнихме 8 vCPU. Промяна на конфигурацията:

# virsh редактиране на server.vpn.ru

И след това добави:

   

когато:

  • хост-пропускателен - режим на емулация, в който виртуалният процесор на клъстерния възел (възлите) ще бъде показан на виртуалната машина.
  • sockets = '1' - посочете, че процесор 1
  • ядра = '4' - показват, че процесорът има 4 ядра
  • теми = '2' - посочете, че имаме 2 нишки

Запазете конфигурационния файл и стартирайте VM. Влезте в гост VM с Windows 10 и в Task Manager или Resource Monitor проверете дали ОС вижда всички избрани виртуални ядра.

Също така, свойствата на системата сега започнаха да показват физическия процесор на хост Intel (R) Xeon (R) Silver 4114 CPU, не виртуално.

Така успяхме да разрешим проблема с натоварването на VM, тъй като двете ядра не бяха достатъчни за пълното приложение.

Конфигуриране на виртуални процесори и броя на ядрата във VMWare

Можете да промените начина, по който vCPU се представя за VMWare виртуална машина от интерфейса на клиент vSphere.

  1. Изключете VM и отворете настройките му;
  2. Разгънете раздел CPU;
  3. Променете конфигурацията на VM, така че гостната ОС вижда 2 процесора с 4 ядра. Промяна на стойността Ядра на гнездо с 4. Това означава, че гостната ОС ще види два четириядрени процесора (2 гнезда с 4 ядра);
  4. Запазете промените и стартирайте VM.

NUMA архитектура и виртуални vCPU

Има няколко други аспекта на vCPU и присвояване на ядрото на виртуални машини, които трябва да разберете..

Когато присвоявате ядра на гнездо, помислете NUMA архитектура (използва се в повечето съвременни процесори). Не се препоръчва да присвоите на вашия VM броят ядра на сокета (и общият брой vCPU) е по-голям от наличните ядра във вашия физически сокет / процесор (NUMA възел). Когато бъде поставен на един физически възел NUMA, виртуалната машина ще може да използва бързата локална RAM, налична на конкретния NUMA възел. В противен случай, за да завършите операцията, процесите ще трябва да изчакат отговор от друг NUMA възел (който е малко по-дълъг).

Ако зададете два отделни виртуални гнезда на VM, тогава хипервизорът може да ги изпълни на различни NUMA възли. Което не е най-добрият начин да повлияете на производителността на VM.

Ако броят на необходимите vCPU надвишава броя на ядрата в 1 физически сокет (NUMA възел), трябва да създадете няколко виртуални сокета (процесори) с необходимия брой ядра. Също така не е препоръчително да използвате нечетен брой процесори (по-добре е да добавите 1 vCPU)

Това ще спести производителността на виртуалната машина..

Например за 2 хоста на процесора с 10 ядра (общо 40 vCPU) са достъпни, като се вземат предвид Hyper-Threading), когато конфигурирате vCPU за VM, е оптимално да използвате следните конфигурации:

Необходимо количество vCPUБроят на виртуалните гнезда в настройките на VMБроят ядра на виртуалния процесор в настройките на VM
111
...
10110
11Не е оптимално
1226
...
20210
В безплатната версия на ESXi не можете да създавате VM с повече от 8 vCPU.

Например, VM с Microsoft SQL Server 2016 Enterprise Edition 16 vCPU в конфигурация от 8 гнезда с 2 ядра ще работят по-лошо, отколкото в конфигурация от 2 гнезда с 8 ядра.

Също така не забравяйте, че някои приложения са лицензирани на физически сокети (както беше при по-старите версии на SQL Server). Понякога е просто по-изгодно да лицензирате един многоядрен процесор от няколко процесора с по-малко ядра.

Съвременните версии на Windows Server са лицензирани в среда за виртуализация по специален начин. В VMWare vSphere има и функции за лицензиране на процесори.