Lors de la configuration des paramètres du processeur pour une nouvelle machine virtuelle, plusieurs concepts clés doivent être compris : comment calculer le nombre de cœurs par CPU et de CPU par socket, et comment ces paramètres affectent la vitesse des machines virtuelles. En outre, il est important de comprendre si la limitation du nombre de processeurs et l’augmentation du nombre de cœurs de CPU ou l’obtention de plusieurs processeurs avec moins de cœurs améliorent les performances de la machine virtuelle.
Poursuivez votre lecture pour en apprendre davantage sur ces concepts et les principes de base de la configuration du CPU pour les machines virtuelles sur les hôtes ESXi.
Terminologie
Commençons par les définitions des termes utilisés lors de la configuration des paramètres du CPU pour les machines virtuelles. Ces termes aideront à comprendre le principe de fonctionnement et à éviter toute confusion quant au nombre de cœurs par CPU, aux CPU par socket et au nombre de cœurs de CPU par rapport à la vitesse.
Socket de 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.
Processeur 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.
Lorsque la fréquence des processeurs s’est rapprochée de la barrière thermique, les fabricants ont modifié l’architecture des processeurs et ont commencé à produire des processeurs avec plusieurs cœurs CPU. Pour éviter toute confusion entre les processeurs physiques et les processeurs logiques ou les cœurs de processeur, certains vendeurs désignent le processeur physique par le terme « socket ».
Cœur de 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.
L’hyperthreading
L’hyper-threading est une technologie développée par les ingénieurs d’Intel pour apporter le calcul parallèle aux processeurs qui ont un seul cœur de processeur. Le début de l’hyper-threading remonte à 2002 lorsque le processeur Pentium 4 HT a été lancé et positionné pour les ordinateurs de bureau. Un système d’exploitation détecte un processeur mononucléaire avec hyper-threading comme un processeur avec deux cœurs logiques (pas physiques). De même, un processeur quadricœur avec hyper-threading apparaît à un OS comme un processeur avec 8 cœurs. Plus il y a de threads exécutés sur chaque cœur, plus de tâches peuvent être effectuées en parallèle.
Les processeurs Intel modernes ont à la fois plusieurs cœurs et l’hyper-threading. L’hyper-threading est généralement activé par défaut et peut être activé ou désactivé dans le BIOS. Le multithreading simultané d’AMD (SMT) est l’équivalent de l’hyper-threading pour les processeurs 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.
Surengagement du CPU
Le surengagement du CPU est la provision de plus de processeurs logiques (cœurs de CPU de l’hôte physique) aux VM que le nombre total de processeurs logiques disponibles sur l’hôte physique. Le surengagement du CPU permet une flexibilité et une efficacité accrues dans l’utilisation des ressources mais peut entraîner une dégradation des performances si la demande totale dépasse la capacité CPU physique disponible.
NUMA
NUMA (accès mémoire non uniforme) est une conception de mémoire informatique utilisée dans les ordinateurs multiprocesseurs. L’idée est de fournir une mémoire séparée pour chaque processeur (contrairement à UMA, où tous les processeurs accèdent à une mémoire partagée via un bus). En même temps, un processeur peut accéder à la mémoire qui appartient à d’autres processeurs en utilisant un bus partagé (tous les processeurs accèdent à toute la mémoire de l’ordinateur). Un CPU a l’avantage de performance d’accéder à sa propre mémoire locale plus rapidement que toute autre mémoire sur un ordinateur multiprocesseur.
Ces architectures de base sont mélangées dans les ordinateurs multiprocesseurs modernes. Les processeurs sont regroupés sur un package de CPU multicœur ou un nœud. Les processeurs qui appartiennent au même nœud partagent l’accès aux modules de mémoire comme avec l’architecture UMA. De plus, les processeurs peuvent accéder à la mémoire du nœud distant via un interconnect partagé. Les processeurs le font pour l’architecture NUMA mais avec des performances plus lentes. Cet accès à la mémoire est effectué via le CPU qui possède cette mémoire plutôt que directement.
Les nœuds NUMA sont des couples CPU/Mémoire composés d’un socket CPU et des modules de mémoire les plus proches. NUMA est généralement configuré dans le BIOS en tant que mode interleaved ou paramètre de mémoire intercalée.
Exemple: Un hôte ESXi a deux sockets (deux CPUs) et 256 Go de RAM. Chaque CPU a 6 cœurs de processeur. Ce serveur contient deux nœuds NUMA. Chaque nœud NUMA a 1 socket CPU (un CPU), 6 cœurs et 128 Go de RAM.
ESXi essaie toujours d’allouer la mémoire pour une VM à partir d’un nœud NUMA native (d’origine). Un nœud d’origine peut être changé automatiquement s’il y a des changements dans les charges des VM et les charges du serveur ESXi.
vNUMA
NUMA virtuel (vNUMA) est l’analogie de NUMA pour les machines virtuelles VMware. Un vNUMA consomme des ressources matérielles de plus d’un nœud NUMA physique pour fournir des performances optimales. La technologie vNUMA expose la topologie NUMA à un système d’exploitation invité. En conséquence, le système d’exploitation invité est conscient de la topologie NUMA sous-jacente pour une utilisation la plus efficace. La version matérielle virtuelle d’une VM doit être 8 ou supérieure pour utiliser vNUMA.
La gestion de vNUMA a été significativement améliorée dans VMware vSphere 6.5, et cette fonctionnalité n’est plus contrôlée par la valeur des cœurs de CPU par socket dans la configuration de la VM. Par défaut, vNUMA est activé pour les VM qui ont plus de 8 processeurs logiques (vCPUs). Vous pouvez activer vNUMA manuellement pour une VM en éditant le fichier de configuration VMX de la VM et en ajoutant la ligne numa.vcpu.min=X, où X est le nombre de vCPUs pour la machine virtuelle.
Calcul du Nombre de Cœurs
Calculons le nombre de cœurs de CPU physiques, de cœurs de CPU logiques et d’autres paramètres sur un serveur.
- Le nombre total de cœurs de CPU physiques sur une machine hôte est calculé avec la formule :
(Le nombre de sockets de processeur) x (Le nombre de cœurs/proc) = Le nombre de cœurs de processeur physiques
Seuls les sockets de processeur avec des processeurs installés doivent être pris en compte.
- Si l’hyper-threading est pris en charge, calculez le nombre de cœurs de processeur logiques en utilisant la formule :
(Le nombre de cœurs de processeur physique) x (2 threads / processeur physique) = le nombre de processeurs logiques
-
Enfin, utilisez une formule unique pour calculer les ressources de processeur disponibles qui peuvent être attribuées aux VM :
(Sockets de CPU) x (Cœurs de CPU) x (threads)
Par exemple, si vous avez un serveur avec deux processeurs, chacun ayant 4 cœurs et prenant en charge l’hyper-threading, alors le nombre total de processeurs logiques pouvant être attribués aux VM est :
2(CPUs) x 4(cœurs) x 2(HT) = 16 processeurs logiques
Un processeur logique peut être attribué en tant que processeur ou cœur de CPU pour une VM dans les paramètres de VM.
En ce qui concerne les machines virtuelles, en raison des fonctionnalités d’émulation matérielle, elles peuvent utiliser plusieurs processeurs et cœurs de CPU dans leur configuration pour fonctionner. Un cœur de CPU physique peut être configuré en tant que CPU virtuel ou cœur de CPU virtuel pour une VM.
- Le total des cycles d’horloge disponibles pour une VM est calculé comme suit :
(Le nombre de sockets logiques) x (La vitesse d’horloge du CPU)
Si vous configurez une machine virtuelle pour utiliser 2 vCPU avec 2 cœurs lorsque vous avez un processeur physique dont la fréquence est de 3,0 GHz, alors la fréquence totale est de 2x2x3=12 GHz. Si la surallocation de CPU est utilisée sur un hôte ESXi, la fréquence disponible pour une machine virtuelle peut être inférieure au calcul si les machines virtuelles effectuent des tâches intensives en CPU.
Limitations pour les cœurs de CPU par socket
Les limitations de CPU/core dans vSphere 7.0 Update 1 et vSphere 8.0 sont énumérées ci-dessous.
- Le nombre maximal de sockets de processeur virtuel attribués à une machine virtuelle est de 768. Si vous souhaitez attribuer plus de 768 processeurs virtuels, configurez une machine virtuelle pour utiliser des processeurs multicores.
- Le nombre maximal de cœurs de processeur pouvant être attribués à une seule machine virtuelle est de 768. Une machine virtuelle ne peut pas utiliser plus de cœurs de CPU que le nombre de cœurs de processeur logiques sur une machine physique.
- Extension de CPU à chaud. Si une machine virtuelle a 128 vCPU ou moins de 128 vCPU, alors vous ne pouvez pas utiliser la fonction d’ajout de CPU à chaud pour cette machine virtuelle et modifier la configuration de CPU d’une machine virtuelle alors qu’une machine virtuelle est dans l’état d’exécution.
Restrictions de CPU du système d’exploitation . Si un système d’exploitation a une limite sur le nombre de processeurs, et que vous attribuez plus de processeurs virtuels à une machine virtuelle, les processeurs supplémentaires ne sont pas identifiés et utilisés par un système d’exploitation invité. Les limites peuvent être causées par la conception technique du système d’exploitation et les restrictions de licence du système d’exploitation. Notez qu’il existe des systèmes d’exploitation qui sont autorisés par socket et par cœur de CPU (par exemple,Windows Server 2019 ). - Restrictions de l’OS sur les processeurs. Si un système d’exploitation a une limite sur le nombre de processeurs, et que vous attribuez plus de processeurs virtuels à une VM, les processeurs supplémentaires ne sont pas identifiés et utilisés par un OS hôte. Les limites peuvent être causées par la conception technique de l’OS et les restrictions de licence de l’OS. Notez qu’il existe des systèmes d’exploitation qui sont licenciés par socke et par cœur de processeur (par exemple, Windows Server 2019).
Limites de support du processeur pour certains systèmes d’exploitation:
- Windows 10 Pro – 2 processeurs
- Windows 10 Home – 1 processeur
- Windows 10 Workstation – 4 processeurs
- Windows Server 2019 Standard/Datacenter – 64 processeurs
- Windows XP Pro x64 – 2 processeurs
- Windows 7 Pro/Ultimate/Enterprise – 2 processeurs
- Windows Server 2003 Datacenter – 64 processeurs
Vous pouvez consulter les maximums de configuration pour la version vSphere utilisée dans votre environnement sur le site Web de VMware.
Recommandations de configuration
Pour les anciennes versions de vSphere, nous recommandons d’utiliser des socke plutôt que des cœurs dans la configuration de la VM. Au début, vous pourriez ne pas voir une différence significative entre les socke de processeur ou les cœurs de processeur dans la configuration de la VM pour les performances de la VM. Soyez conscient de certaines fonctionnalités de configuration qui font la différence. N’oubliez pas NUMA et vNUMA lorsque vous envisagez de définir plusieurs processeurs virtuels (socke) pour une VM afin d’obtenir des performances optimales.
Si vNUMA n’est pas configuré automatiquement, reflétez la topologie NUMA du serveur physique. Voici quelques recommandations pour les VMs dans VMware vSphere 6.5 et ultérieur :
- Lorsque vous définissez le nombre de processeurs logiques (vCPUs) pour une VM, privilégiez la configuration cœurs-par-socket. Continuez jusqu’à ce que le nombre dépasse le nombre de cœurs CPU sur un seul nœud NUMA sur le serveur ESXi. Utilisez la même logique jusqu’à ce que vous dépassiez la quantité de mémoire disponible sur un seul nœud NUMA de votre serveur ESXi physique
- Parfois, le nombre de processeurs logiques pour votre configuration de VM est supérieur au nombre de cœurs de processeur physique sur un seul nœud NUMA, ou la quantité de RAM est supérieure à la quantité totale de mémoire disponible pour un seul nœud NUMA. Considérez de diviser le nombre de processeurs logiques (vCPUs) sur le nombre minimal de nœuds NUMA pour un rendement optimal.
- Ne définissez pas un nombre impair de vCPUs si le nombre de processeurs ou la quantité de mémoire dépasse le nombre de cœurs de processeur. La même chose s’applique en cas de dépassement de la quantité de mémoire pour un seul nœud NUMA sur un serveur physique.
- Ne créez pas une VM qui a un nombre de vCPUs supérieur au nombre de cœurs de processeur physique sur votre hôte physique.
- Si vous ne pouvez pas désactiver vNUMA en raison de vos exigences, n’activez pas la fonctionnalité vCPU Hot-Add.
Si un système d’exploitation invité et d’autres logiciels installés sur une VM sont sous licence sur une base par processeur, configurez une VM pour utiliser moins de processeurs avec plus de cœurs CPU. Par exemple, Windows Server 2012 R2 est sous licence par socket, et Windows Server 2016 est sous licence sur une base par cœur.
Si vous utilisez la surallocation CPU dans la configuration de vos machines virtuelles VMware, gardez à l’esprit ces valeurs :
1:1 à 3:1 – Il ne devrait y avoir aucun problème pour exécuter des VM
- 3:1 à 5:1 – Une dégradation des performances est observée
- 6:1 – Préparez-vous à des problèmes causés par une dégradation significative des performances
- La surallocation CPU avec des valeurs normales peut être utilisée dans des environnements de test et de développement sans risques.
Configuration des VM sur les hôtes ESXi
Tout d’abord, déterminez le nombre de processeurs logiques (Nombre de CPUs) de votre hôte physique nécessaire pour une machine virtuelle pour un fonctionnement correct avec des performances suffisantes. Ensuite, définissez le nombre de sockets virtuels avec processeurs (Nombre de Sockets dans le client vSphere) et le nombre de cœurs CPU (Cœurs par Socket) que vous devez définir pour une VM en gardant à l’esprit les recommandations et limitations précédentes. Le tableau ci-dessous peut vous aider à sélectionner la configuration nécessaire.
Premièrement, déterminez le nombre de processeurs logiques (nombre de CPU) de votre hôte physique nécessaire pour un système virtuel pour un fonctionnement correct avec une performance suffisante. Ensuite, définissez le nombre de sockets virtuels avec processeurs (nombre de sockets dans le client vSphere) et le nombre de cœurs de processeur (cœurs par socket) que vous devez définir pour une VM en gardant à l’esprit les recommandations et limitations précédentes. Le tableau ci-dessous peut vous aider à sélectionner la configuration nécessaire.
Si vous avez besoin d’attribuer plus de 8 processeurs logiques pour une VM, la logique reste la même. Pour calculer le nombre de processeurs logiques dans le client vSphere, multipliez le nombre de sockets par le nombre de cœurs. Par exemple, si vous devez configurer une VM pour utiliser 2 sockets processeur, chacun ayant 2 cœurs de processeur, alors le nombre total de processeurs logiques est de 2*2=4. Cela signifie que vous devriez sélectionner 4 CPU dans les options matérielles virtuelles de la VM dans le client vSphere pour appliquer cette configuration.
Configuration des cœurs par CPU dans le client vSphere
Expliquons comment configurer les options CPU pour une VM dans VMware vSphere Client. Entrez l’adresse IP de votre serveur vCenter dans un navigateur Web et ouvrez VMware vSphere Client. Dans le navigateur, ouvrez hôtes et clusters et sélectionnez la machine virtuelle souhaitée que vous souhaitez configurer. Assurez-vous que la VM est éteinte pour pouvoir modifier la configuration CPU. Le processus de configuration est identique dans vSphere 6.x, 7.0 et 8.0.
- Faites un clic droit sur la VM et, dans le menu contextuel, cliquez sur Modifier les paramètres pour ouvrir les paramètres de la machine virtuelle.
- Développez la section Processeur dans l’onglet Matériel Virtuel de la fenêtre Modifier les Paramètres.
- Processeur. Cliquez sur le menu déroulant dans la chaîne Processeur et sélectionnez le nombre total de processeurs logiques nécessaires pour cette VM. Dans cet exemple, nous sélectionnons 4 processeurs logiques pour la VM Ubuntu (blog-Ubuntu1).
- Cœurs par Socket. Dans cette chaîne, cliquez sur le menu déroulant et sélectionnez le nombre de cœurs nécessaires pour chaque socket virtuel (processeur).
- Hot Plug CPU. Si vous souhaitez utiliser cette fonctionnalité, sélectionnez la case à cocher Activer l’ajout de CPU en cours d’exécution. N’oubliez pas les limitations et exigences.
- Réservation. Sélectionnez l’allocation minimale garantie de la vitesse de l’horloge du processeur (fréquence, MHz ou GHz) pour une machine virtuelle sur un hôte ESXi ou un cluster.
- Limite. Sélectionnez la vitesse maximale de l’horloge du processeur pour un processeur VM. Cette fréquence est la fréquence maximale pour une machine virtuelle, même si cette VM est la seule VM en cours d’exécution sur l’hôte ESXi ou le cluster avec davantage de ressources de processeur libres. La limite définie est vraie pour tous les processeurs virtuels d’une VM. Si une VM a 2 processeurs monocœur, et que la limite est de 1000 MHz, alors les deux processeurs virtuels fonctionnent avec une vitesse d’horloge totale d’un million de cycles par seconde (500 MHz pour chaque cœur).
- Actions. Ce paramètre définit la priorité de consommation des ressources par les machines virtuelles (Faible, Normale, Élevée, Personnalisée) sur un hôte ESXi ou un pool de ressources. Contrairement aux paramètres Réservation et Limite , le paramètre Actions est appliqué à une VM uniquement s’il y a un manque de ressources CPU dans un hôte ESXi, un pool de ressources ou un cluster DRS.
Options disponibles pour le paramètre Actions :
- Faible – 500 actions par processeur virtuel
- Normale – 1000 actions par processeur virtuel
- Élevée – 2000 actions par processeur virtuel
- Personnalisée – définir une valeur personnalisée
Plus la valeur des Actions est élevée, plus la quantité de ressources CPU provisionnée pour une VM dans un hôte ESXi ou un pool de ressources est élevée.
- Virtualisation matérielle. Cochez cette case pour activer la virtualisation imbriquée. Cette option est utile si vous souhaitez exécuter une VM à l’intérieur d’une VM à des fins de test ou éducatives.
- Compteurs de performances. Cette fonctionnalité est utilisée pour permettre à une application installée dans la machine virtuelle d’être déboguée et optimisée après la mesure des performances du CPU.
- Affinité d’ordonnancement. Cette option est utilisée pour attribuer une VM à un processeur spécifique. La valeur entrée peut être comme ceci: “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.
Si vous utilisez un hôte ESXi autonome et utilisez VMware Host Client pour configurer des VM dans un navigateur Web, le principe de configuration est le même que pour VMware vSphere Client.
Configuration des cœurs par CPU dans VMware Workstation
Si vous vous connectez à un serveur vCenter ou à un hôte ESXi dans VMware Workstation et ouvrez les paramètres VM d’une VM vSphere, vous pouvez modifier la configuration de base des processeurs virtuels.
- Cliquez sur VM > Paramètres, sélectionnez l’onglet Matériel , et cliquez sur Processeurs.
- Sélectionnez le nombre de processeurs virtuels (sockets) et le nombre de cœurs par processeur.
Dans la capture d’écran suivante, vous voyez la configuration du processeur pour la même VM Ubuntu qui a été configurée précédemment dans vSphere Client.
Le nombre total de cœurs de processeur (cœurs logiques des processeurs physiques sur un hôte ESXi ou un cluster) est calculé et affiché automatiquement en dessous. En comparaison, dans l’interface de vSphere Client, vous définissez le nombre total de cœurs de processeur (l’option CPUs), sélectionnez le nombre de cœurs par processeur, puis le nombre de sockets virtuels est calculé et affiché.
Configuration des processeurs VM dans PowerCLI
Si vous préférez utiliser l’interface en ligne de commande pour configurer les composants de VMware vSphere, utilisez PowerCLI pour modifier la configuration du CPU des VMs. Découvrons comment modifier la configuration du CPU pour une VM qui est Ubuntu 19 dans PowerCLI. Les commandes sont utilisées pour les VMs qui sont éteintes.
- Pour configurer une VM pour qu’elle utilise deux processeurs virtuels monocœur (deux sockets virtuels sont utilisés), utilisez la commande :
get-VM -name Ubuntu19 | set-VM -NumCpu 2
Entrez un autre numéro si vous souhaitez définir un autre nombre de processeurs (sockets) pour une VM.
- Dans l’exemple suivant, vous voyez comment configurer une VM pour qu’elle utilise deux processeurs virtuels double-cœur (2 sockets sont utilisés) :
$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
- Une fois qu’une nouvelle configuration de CPU est appliquée à la machine virtuelle, cette configuration est enregistrée dans le fichier de configuration VMX de la VM. Dans notre cas, nous vérifions le fichier Ubuntu19.vmx situé dans le répertoire de la VM sur le datastore (/vmfs/volumes/datastore2/Ubuntu19/). Les lignes avec la nouvelle configuration CPU sont situées à la fin du fichier VMX.
numvcpus = « 2 »
cpuid.coresPerSocket = « 2 »
- Si vous avez besoin de réduire le nombre de processeurs (sockets) pour une VM, utilisez la même commande que celle indiquée précédemment avec une quantité moindre. Par exemple, pour définir un processeur (socket) pour une VM, utilisez cette commande :
get-VM -name Ubuntu19 | set-VM -NumCpu 1
Le principal avantage de l’utilisation de PowerCLI est la capacité à configurer plusieurs VM en vrac. L’automatisation des tâches est importante et pratique si le nombre de machines virtuelles à configurer est élevé. Utilisez les cmdlets VMware et la syntaxe de Microsoft PowerShell pour créer des scripts.
Conclusion
Les performances des applications s’exécutant sur une machine virtuelle dépendent de la configuration correcte du processeur et de la mémoire. Dans VMware vSphere 6.5 et les versions ultérieures, configurez davantage de cœurs dans le CPU pour les machines virtuelles et utilisez l’approche des cœurs CPU par socket. Si vous utilisez des versions de vSphere antérieures à vSphere 6.5, configurez le nombre de sockets sans augmenter le nombre de cœurs CPU pour une VM en raison du comportement différent de vNUMA dans les versions de vSphere plus récentes et plus anciennes. Prenez en compte le modèle de licence du logiciel que vous devez installer sur une machine virtuelle. Si le logiciel est sous licence par CPU, configurez plus de cœurs par CPU dans les paramètres de la VM.
Lors de l’utilisation de machines virtuelles dans VMware vSphere, n’oubliez pas d’utiliser les outils de sauvegarde VMware. Utilisez NAKIVO Backup & Replication pour sauvegarder vos machines virtuelles, y compris les VM ayant plusieurs cœurs par CPU. Les sauvegardes régulières vous aident à protéger vos données et à les récupérer en cas de sinistre.
Source:
https://www.nakivo.com/blog/the-number-of-cores-per-cpu-in-a-virtual-machine/