Quando si configurano le impostazioni del processore per una nuova macchina virtuale, ci sono diversi concetti chiave da comprendere: come calcolare il numero di core del processore per CPU e core CPU per socket e come queste impostazioni influenzano la velocità delle macchine virtuali. Inoltre, è importante capire cosa garantisce una migliore prestazione della VM: limitare il numero di processori e avere più core CPU o avere più processori con meno core?
Continua a leggere per scoprire questi concetti e i principi di base per la configurazione della CPU per le macchine virtuali sugli host ESXi.
Terminologia
Cominciamo con le definizioni dei termini utilizzati quando si configurano le impostazioni della CPU per le macchine virtuali. Questi termini aiuteranno a comprendere il principio di funzionamento e eviteranno confusioni riguardo al numero di core per CPU, core CPU per socket e il numero di core CPU rispetto alla velocità.
Socket del CPU
A CPU Socket is a physical connector on the motherboard to which a single physical CPU is connected. A motherboard has at least one CPU socket. Server motherboards usually have multiple CPU sockets that support multiple multicore processors. CPU sockets are standardized for different processor series. Intel and AMD use different CPU sockets for their processor families.
CPU
A CPU (central processing unit, microprocessor chip, or processor) is a computer component. It is the electronic circuitry with transistors that is connected to a socket. A CPU executes instructions to perform calculations, run applications, and complete tasks.
Quando la velocità di clock dei processori si avvicinò alla barriera termica, i produttori cambiarono l’architettura dei processori e iniziarono a produrre processori con più core CPU. Per evitare confusione tra processori fisici e processori logici o core del processore, alcuni fornitori si riferiscono a un processore fisico come socket.
Core CPU
A CPU core is the part of a processor containing the L1 cache. The CPU core performs computational tasks independently without interacting with other cores and external components of a “big” processor that are shared among cores. Basically, a core can be considered as a small processor built into the main processor that is connected to a socket. Applications should support parallel computations to use multicore processors rationally.
Hyper-threading
Hyper-threading è una tecnologia sviluppata dagli ingegneri Intel per portare la computazione parallela ai processori che hanno un’unica core. Il debutto dell’hyper-threading è avvenuto nel 2002 quando è stato rilasciato il processore Pentium 4 HT e posizionato per i computer desktop. Un sistema operativo rileva un processore single-core con hyper-threading come un processore con due core logici (non fisici). Allo stesso modo, un processore quad-core con hyper-threading appare a un OS come un processore con 8 core. Più thread vengono eseguiti su ogni core, più attività possono essere svolte in parallelo.
I processori Intel moderni hanno sia multipli core che hyper-threading. Di solito l’hyper-threading è abilitato per impostazione predefinita e può essere attivato o disattivato nel BIOS. La multi-threading simultanea AMD (SMT) è l’analogia dell’hyper-threading per i processori AMD.
vCPU
A vCPU is a virtual processor that is configured as a virtual device in the virtual hardware settings of a VM. A virtual processor can be configured to use multiple CPU cores. A vCPU is connected to a virtual socket.
Sovraccarico di CPU
Sovraccarico di CPU è la fornitura di più processori logici (core CPU dell’host fisico) alle VM rispetto al numero totale di processori logici disponibili sull’host fisico. Il sovraccarico di CPU consente una maggiore flessibilità ed efficienza nell’utilizzo delle risorse ma può portare a una degradazione delle prestazioni se la domanda totale supera la capacità fisica disponibile della CPU.
NUMA
NUMA (non-uniform memory access) è un design di memoria per computer utilizzato in computer multiprocessore. L’idea è quella di fornire memoria separata per ogni processore (a differenza di UMA, dove tutti i processori accedono alla memoria condivisa tramite un bus). Allo stesso tempo, un processore può accedere alla memoria che appartiene ad altri processori utilizzando un bus condiviso (tutti i processori accedono a tutta la memoria sul computer). Una CPU ha il vantaggio prestazionale di accedere alla propria memoria locale più velocemente rispetto ad altre memorie su un computer multiprocessore.
Queste architetture di base sono mescolate nei moderni computer multiprocessore. I processori sono raggruppati su un pacchetto CPU multicore o nodo. I processori che appartengono allo stesso nodo condividono l’accesso ai moduli di memoria come nell’architettura UMA. Inoltre, i processori possono accedere alla memoria del nodo remoto tramite un’interconnessione condivisa. I processori lo fanno per l’architettura NUMA ma con prestazioni più lente. Questo accesso alla memoria viene eseguito attraverso la CPU che possiede quella memoria anziché direttamente.
I nodi NUMA sono coppie CPU/Memoria che consistono in un socket CPU e i moduli di memoria più vicini. Di solito, NUMA è configurato nel BIOS come interleaving del nodo o impostazione della memoria interlacciata.
Esempio: Un host ESXi ha due socket (due CPU) e 256 GB di RAM. Ogni CPU ha 6 core del processore. Questo server contiene due nodi NUMA. Ogni nodo NUMA ha 1 socket CPU (una CPU), 6 core e 128 GB di RAM.
ESXi cerca sempre di allocare memoria per una VM da un nodo NUMA nativo (di casa). Un nodo di casa può essere cambiato automaticamente se ci sono cambiamenti nei carichi delle VM e nei carichi del server ESXi.
vNUMA
Virtual NUMA (vNUMA) è l’analogia di NUMA per le macchine virtuali VMware. Un vNUMA consuma risorse hardware di più di un nodo NUMA fisico per fornire prestazioni ottimali. La tecnologia vNUMA espone la topologia NUMA a un sistema operativo guest. Di conseguenza, il sistema operativo guest è consapevole della topologia NUMA sottostante per l’uso più efficiente. La versione hardware virtuale di una VM deve essere 8 o superiore per utilizzare vNUMA.
La gestione di vNUMA è stata significativamente migliorata in VMware vSphere 6.5 e questa funzionalità non è più controllata dal valore dei core CPU per socket nella configurazione della VM. Per impostazione predefinita, vNUMA è abilitato per le VM che hanno più di 8 processori logici (vCPU). È possibile abilitare vNUMA manualmente per una VM modificando il file di configurazione VMX della VM e aggiungendo la riga numa.vcpu.min=X, dove X è il numero di vCPU per la macchina virtuale.
Calcolo del numero di core
Scopriamo come calcolare il numero di core CPU fisici, core CPU logici e altri parametri su un server.
- Il numero totale di core CPU fisici su una macchina host viene calcolato con la formula:
(Il numero di socket del processore) x (Il numero di core/processore) = Il numero di core del processore fisico
Deve essere considerato solo i socket del processore con processori installati.
- Se la hyper-threading è supportata, calcola il numero di core processore logici utilizzando la formula:
(Il numero di core processore fisici) x (2 thread/processore fisico) = il numero di processori logici
- Infine, usa una formula singola per calcolare le risorse di processore disponibili che possono essere assegnate alle VM:
(Socket CPU) x (Core CPU) x (threads)
Ad esempio, se hai un server con due processori ciascuno con 4 core e che supporta la hyper-threading, il totale del numero di processori logici che può essere assegnato alle VM è:
2(CPU) x 4(core) x 2(HT) = 16 processori logici
Un processore logico può essere assegnato come un processore o come un core CPU per una VM nelle impostazioni della VM.
Riguardo alle macchine virtuali, a causa delle caratteristiche dell’emulazione hardware, possono utilizzare molti processori e core CPU nella loro configurazione per l’operazione. Un core CPU fisico può essere configurato come un processore virtuale o un core virtuale per una VM.
- La quantità totale di cicli di clock disponibili per una VM viene calcolata come:
(Il numero di socket logici) x (La frequenza di clock del CPU)
Ad esempio, se si configura una VM per utilizzare 2 vCPU con 2 core quando si ha un processore fisico con una velocità di clock di 3,0 GHz, allora la velocità di clock totale è 2x2x3=12 GHz. Se viene utilizzato un sovraimpegno della CPU su un host ESXi, la frequenza disponibile per una VM può essere inferiore a quella calcolata se le VM eseguono attività CPU-intensive.
Limitazioni per i core CPU per socket
Le limitazioni CPU/core in vSphere 7.0 Update 1 e vSphere 8.0 sono elencate di seguito.
- Il numero massimo di socket di processore virtuale assegnati a una VM è 768. Se si desidera assegnare più di 768 processori virtuali, configurare una VM per utilizzare processori multicore.
- Il numero massimo di core di processore che possono essere assegnati a una singola VM è 768. Una macchina virtuale non può utilizzare più core CPU rispetto al numero di core di processore logico su una macchina fisica.
- Aggiunta a caldo della CPU. Se una VM ha 128 vCPU o meno di 128 vCPU, allora non è possibile utilizzare la funzione di aggiunta a caldo della CPU per questa VM e modificare la configurazione della CPU di una VM mentre una VM è nello stato di esecuzione.
Restrizioni CPU del sistema operativo . Se un sistema operativo ha un limite sul numero di processori e si assegnano più processori virtuali per una VM, i processori aggiuntivi non vengono identificati e utilizzati da un sistema operativo guest. I limiti possono essere causati dal design tecnico del sistema operativo e dalle restrizioni di licenza del sistema operativo. Nota che ci sono sistemi operativi con licenza per socket e per core CPU (ad esempio,Windows Server 2019 ). - Restrizioni CPU del sistema operativo. Se un sistema operativo ha un limite sul numero di processori e si assegnano più processori virtuali per una VM, i processori aggiuntivi non vengono identificati e utilizzati da un sistema operativo ospite. I limiti possono essere causati dal design tecnico del sistema operativo e dalle restrizioni di licenza del sistema operativo. Si noti che ci sono sistemi operativi che sono concessi in licenza per socket e per core CPU (ad esempio, Windows Server 2019).
Limiti di supporto CPU per alcuni sistemi operativi:
- Windows 10 Pro – 2 CPU
- Windows 10 Home – 1 CPU
- Windows 10 Workstation – 4 CPU
- Windows Server 2019 Standard/Datacenter – 64 CPU
- Windows XP Pro x64 – 2 CPU
- Windows 7 Pro/Ultimate/Enterprise – 2 CPU
- Windows Server 2003 Datacenter – 64 CPU
È possibile verificare i massimi di configurazione per la versione di vSphere utilizzata nell’ambiente sul sito Web di VMware.
Raccomandazioni di configurazione
Per le versioni più vecchie di vSphere, raccomandiamo di utilizzare i socket rispetto ai core nella configurazione della VM. Inizialmente, potresti non vedere una differenza significativa nei socket CPU o nei core CPU nella configurazione della VM per le prestazioni della VM. Tenere presenti alcune caratteristiche di configurazione che fanno la differenza. Ricordatevi di NUMA e vNUMA quando considerate di impostare più processori virtuali (socket) per una VM per ottenere prestazioni ottimali.
Se vNUMA non viene configurato automaticamente, riflettere la topologia NUMA del server fisico. Ecco alcuni consigli per le macchine virtuali in VMware vSphere 6.5 e versioni successive:
- Quando si definisce il numero di processori logici (vCPU) per una VM, si preferisce la configurazione core-per-socket. Continuare fino a quando il conteggio supera il numero di core CPU su un singolo nodo NUMA nel server ESXi. Utilizzare la stessa logica fino a quando non si supera la quantità di memoria disponibile su un singolo nodo NUMA del server fisico ESXi
- A volte, il numero di processori logici per la configurazione della VM è maggiore del numero di core CPU fisici su un singolo nodo NUMA, o la quantità di RAM è superiore alla quantità totale di memoria disponibile per un singolo nodo NUMA. Si consiglia di dividere il conteggio di processori logici (vCPU) tra il numero minimo di nodi NUMA per un’ottimale prestazione.
- Non impostare un numero dispari di vCPU se il conteggio di CPU o la quantità di memoria supera il numero di core CPU. Lo stesso vale nel caso in cui la memoria superi la quantità di memoria per un singolo nodo NUMA su un server fisico.
- Non creare una VM che abbia un numero di vCPU superiore al conteggio dei core del processore fisico sul tuo host fisico.
- Se non è possibile disabilitare vNUMA a causa dei tuoi requisiti, non abilitare la funzionalità vCPU Hot-Add.
Se un sistema operativo guest e altri software installati su una VM sono concessi in licenza sulla base del processore, configura una VM per utilizzare meno processori con più core CPU. Ad esempio, Windows Server 2012 R2 è concesso in licenza per socket, e Windows Server 2016 è concessa in licenza sulla base di core.
Se si utilizza sovraccarico della CPU nella configurazione delle tue macchine virtuali VMware, tieni presente questi valori:
1:1 a 3:1 – Non dovrebbero esserci problemi nell’esecuzione delle VM
- 3:1 a 5:1 – Si osserva una degradazione delle prestazioni
- 6:1 – Preparati per i problemi causati da una significativa degradazione delle prestazioni
- Lo sovraccarico della CPU con valori normali può essere utilizzato in ambienti di test e sviluppo senza rischi.
Configurazione delle VM su host ESXi
Prima, determina il numero di processori logici (Numero di CPU) del tuo host fisico che è necessario per una macchina virtuale per un corretto funzionamento con prestazioni sufficienti. Quindi definisci il numero di socket virtuali con processori (Numero di socket nel client vSphere) e il numero di core CPU (Core per socket) da impostare per una VM tenendo presente le raccomandazioni e le limitazioni precedenti. La tabella qui sotto può aiutarti a selezionare la configurazione necessaria.
Innanzitutto, determina il numero di processori logici (Numero di CPU) del tuo host fisico necessario per un macchina virtuale per un corretto funzionamento con sufficiente prestazione. Quindi definisci il numero di socket virtuali con processori (Numero di Socket nel Client vSphere) e il numero di core CPU (Core per Socket) che dovresti impostare per una VM tenendo conto delle precedenti raccomandazioni e limitazioni. La tabella sottostante può aiutarti a selezionare la configurazione necessaria.
Se hai bisogno di assegnare più di 8 processori logici per una VM, la logica rimane la stessa. Per calcolare il numero di processori logici nel Client vSphere, moltiplica il numero di socket per il numero di core. Ad esempio, se hai bisogno di configurare una VM per utilizzare 2 socket processore, ognuno con 2 core CPU, allora il numero totale di processori logici è 2*2=4. Significa che dovresti selezionare 4 CPU nelle opzioni di hardware virtuale della VM nel Client vSphere per applicare questa configurazione.
Configurazione dei Core per CPU nel Client vSphere
Spieghiamo come configurare le opzioni CPU per una VM in VMware vSphere Client. Inserisci l’indirizzo IP del tuo vCenter Server in un web browser e apri VMware vSphere Client. Nel navigatore, apri Hosts e Cluster e seleziona la VM necessaria che desideri configurare. Assicurati che la VM sia spenta per poter cambiare la configurazione CPU. Il processo di configurazione è identico in vSphere 6.x, 7.0 e 8.0.
- Fai clic con il pulsante destro del mouse sulla VM e, nel menu contestuale, premi Modifica Impostazioni per aprire le impostazioni della macchina virtuale.
- Espandi la sezione CPU nella scheda Hardware Virtuale della finestra Modifica Impostazioni.
- CPU. Fai clic sulla freccia rivolta verso il basso nella stringa CPU e seleziona il numero totale di processori logici necessari per questa macchina virtuale. In questo esempio, selezioniamo 4 processori logici per la macchina virtuale Ubuntu (blog-Ubuntu1).
- Core per Socket. In questa stringa, fai clic sulla freccia rivolta verso il basso e seleziona il numero di core necessari per ogni socket virtuale (processore).
- CPU Hot Plug. Se vuoi utilizzare questa funzionalità, seleziona la casella Abilita CPU Hot Add. Ricorda le limitazioni e i requisiti.
- Riserva. Seleziona l’allocazione minima garantita della velocità di clock della CPU (frequenza, MHz o GHz) per una macchina virtuale su un host o cluster ESXi.
- Limite. Seleziona la massima velocità di clock della CPU per un processore VM. Questa frequenza è la massima frequenza per una macchina virtuale, anche se questa VM è l’unica VM in esecuzione su un host o cluster ESXi con più risorse di processore libere. Il limite impostato è vero per tutti i processori virtuali di una VM. Se una VM ha 2 processori a core singolo e il limite è 1000 MHz, allora entrambi i processori virtuali funzionano con una velocità di clock totale di un milione di cicli al secondo (500 MHz per ogni core).
- Azioni. Questo parametro definisce la priorità del consumo di risorse da parte delle macchine virtuali (Basso, Normale, Alto, Personalizzato) su un host ESXi o pool di risorse. A differenza dei parametri Riserva e Limite, il parametro Azioni è applicato solo per una VM se vi è una mancanza di risorse CPU all’interno di un host ESXi, pool di risorse o cluster DRS.
Opzioni disponibili per il parametro Azioni:
- Basso– 500 azioni per processore virtuale
- Normale– 1000 azioni per processore virtuale
- Alto– 2000 azioni per processore virtuale
- Personalizzato– impostare un valore personalizzato
Più alto è il valore delle Azioni, maggiore è la quantità di risorse CPU assegnata a una VM all’interno di un host ESXi o di un pool di risorse.
- Virtualizzazione hardware. Seleziona questa casella per abilitare la virtualizzazione nidificata. Questa opzione è utile se vuoi eseguire una VM all’interno di una VM per scopi di test o educativi.
- Contatori delle prestazioni. Questa funzionalità viene utilizzata per consentire il debug e l’ottimizzazione di un’applicazione installata all’interno della macchina virtuale dopo aver misurato le prestazioni della CPU.
- Affinità di pianificazione. Questa opzione viene utilizzata per assegnare una VM a un processore specifico. Il valore inserito può essere simile a questo: “0, 2, 4-7”.
- I/O MMU. This feature allows VMs to have direct access to hardware input/output devices such as storage controllers, network cards, and graphic cards (rather than using emulated or paravirtualized devices). I/O MMU is also called Intel Virtualization Technology for Directed I/O (Intel VT-d) and AMD I/O Virtualization (AMD-V). I/O MMU is disabled by default. Using this option is deprecated in vSphere 7.0. If I/O MMU is enabled for a VM, the VM cannot be migrated with vMotion and is not compatible with snapshots, memory overcommit, suspended VM state, physical NIC sharing, and NSX network virtualization.
Se si utilizza un host ESXi autonomo e si utilizza VMware Host Client per configurare le VM in un browser web, il principio di configurazione è lo stesso del VMware vSphere Client.
Configurazione dei core per CPU in VMware Workstation
Se si è connessi a vCenter Server o a un host ESXi in VMware Workstation e si aprono le impostazioni VM di una VM vSphere, è possibile modificare la configurazione di base dei processori virtuali.
- Fare clic su VM > Impostazioni, selezionare la scheda Hardware e fare clic su Processori.
- Selezionare il numero di processori virtuali (socket) e il numero di core per processore.
Nella seguente schermata, si vede la configurazione del processore per la stessa VM Ubuntu che è stata configurata in precedenza in vSphere Client.
Il numero totale di core del processore (core logici dei processori fisici su un host ESXi o cluster) viene calcolato e visualizzato automaticamente di seguito. In confronto, nell’interfaccia del vSphere Client, si imposta il numero totale di core del processore (opzione CPU), si seleziona il numero di core per processore e quindi viene calcolato e visualizzato il numero di socket virtuali.
Configurazione dei processori VM in PowerCLI
Se preferisci utilizzare l’interfaccia a riga di comando per configurare i componenti di VMware vSphere, utilizza PowerCLI per modificare la configurazione della CPU delle VM. Scopriamo come modificare la configurazione della CPU della VM per una VM che è Ubuntu 19 in PowerCLI. I comandi sono utilizzati per le VM che sono spente.
- Per configurare una VM per l’uso di due processori virtuali a core singolo (vengono utilizzati due socket virtuali), utilizza il comando:
get-VM -name Ubuntu19 | set-VM -NumCpu 2
Inserisci un altro numero se vuoi impostare un numero diverso di processori (socket) per una VM.
- Nel seguente esempio, vedi come configurare una VM per l’uso di due processori virtuali a doppio core (vengono utilizzati 2 socket):
$VM=Get-VM -Name Ubuntu19
$VMSpec=New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{ "NumCoresPerSocket" = 2}
$VM.ExtensionData.ReconfigVM_Task($VMSpec)
$VM | Set-VM -NumCPU 2
- Una volta che una nuova configurazione CPU viene applicata alla macchina virtuale, questa configurazione viene salvata nel file di configurazione VMX della VM. Nel nostro caso, controlliamo il file Ubuntu19.vmx situato nella directory della VM sul datastore (/vmfs/volumes/datastore2/Ubuntu19/). Le righe con la nuova configurazione CPU si trovano alla fine del file VMX.
numvcpus = “2”
cpuid.coresPerSocket = “2”
- Se è necessario ridurre il numero di processori (socket) per una VM, utilizzare lo stesso comando mostrato in precedenza con una quantità inferiore. Ad esempio, per impostare un processore (socket) per una VM, utilizzare questo comando:
get-VM -name Ubuntu19 | set-VM -NumCpu 1
Il principale vantaggio nell’utilizzare PowerCLI è la possibilità di configurare più VM contemporaneamente. L’automazione delle attività è importante e conveniente se il numero di macchine virtuali da configurare è elevato. Utilizzare i cmdlet VMware e la sintassi di Microsoft PowerShell per creare script.
Conclusione
Le prestazioni delle applicazioni in esecuzione su una VM dipendono dalla corretta configurazione della CPU e della memoria. In VMware vSphere 6.5 e nelle versioni successive, impostare più core nella CPU per le macchine virtuali e utilizzare l’approccio dei core CPU per socket. Se si utilizzano versioni di vSphere precedenti alla versione 6.5, configurare il numero di socket senza aumentare il numero di core CPU per una VM a causa del diverso comportamento di vNUMA nelle versioni più recenti e più vecchie di vSphere. Tenere conto del modello di licenza del software che è necessario installare su una VM. Se il software è concesso in licenza per CPU, configurare più core per CPU nelle impostazioni della VM.
Quando si utilizzano macchine virtuali in VMware vSphere, non dimenticare di utilizzare gli strumenti di backup di VMware. Utilizzare NAKIVO Backup & Replication per eseguire il backup delle macchine virtuali, comprese le VM che hanno più core per CPU. Il backup regolare ti aiuta a proteggere i tuoi dati e a recuperare i dati in caso di disastro.
Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/