VMware PowerCLI – Script de vérification de Contention / Overcommit

Dans une infrastructure VMware, il est utile de savoir le ratio d’Overcommitting du CPU et de la RAM, de base il n’y a pas de moyen rapide de le savoir (Sans compter ESXTOP). C’est là que PowerCLI entre en jeu, grâce à un petit script je vais vous fournir le moyen de le vérifier.

Tout d’abord qu’est-ce que l’Overcommitting, en faisant simple c’est le fait d’utiliser des ressources en excès, assigner plus de vCPU ou de RAM aux machines virtuelles que l’ESXi n’en possède, on dit alors qu’il y a Contention.

Je vous invite à en apprendre un peu plus via les post sur la gestion de CPU/RAM :

VMware – Les mécanismes de gestion du CPU
VMware – Les mécanismes de gestion de la RAM

Je vais prendre comme exemple un Cluster de deux ESXi, si on parle en pourcentage on ne dépasse pas les 100%, on peut ainsi se dire qu’il n’y a pas de contention … et bien non, il ne faut pas confondre pourcentage d’utilisation et contention.

pourcentage_esxi

Si j’utilise le script d’overcommit RAM, je me retrouve avec environ 1:1, c’est-à-dire que toute la RAM physique de mes ESXi est assignée (Granted). Dans cette logique on devrait être à 100% d’utilisation, mais non car la RAM n’est pas utilisée (Consumed), tout ça grâce aux différents mécanismes VMware qui permettent de récupérer de la RAM et donc de permettre cet overcomitting.

Pas de problème pour la RAM, on peut charger et mettre sous contention en monitorant bien sûr pour n’utiliser que TPS voir le Balooning et éviter le Swapping entre autre.

overcommit_ram

Host RAM / VM RAM

Maintenant si j’utilise le script d’overcommit CPU, c’est une autre histoire … les CPU ne sont pas non plus à 100%, mais on se retrouve avec un ratio de contention de 5:1, les VM utilisent donc 5 fois plus de vCPU qu’il n’y a de pCPU.

Avec ce niveau de contention, attendez-vous à avoir de graves problèmes de performance, le scheduler se retrouvera noyé sous les demandes de pCPU et vous aurez du CPU Ready à coup sûr…

overcommit_cpu

CPU Hardware / CPU Virtuel

Au final il faut se dire qu’on ne manage pas une infrastructure VMware comme un PC, je ne dis pas que le pourcentage d’utilisation ne sert à rien mais qu’il ne faut pas seulement se fier à cette valeur, d’ailleurs si vous commencez à monter à 50% d’utilisation CPU, vérifier votre contention et la charge de vos VM (Esxtop sera votre ami…)

Script CPU (OneLiner)

param($vmhosts="*");$Cluster_Name="Nom_du_Cluster";$vmhosts=Get-Cluster $Cluster_Name|Get-VMHost;$vms=Get-Cluster $Cluster_Name|Get-VM|where {$_.PowerState -eq "PoweredOn"};[email protected]();[email protected]();$totalvcpus=0;$totalhostthreads=0;$totalratio=0;ForEach($vmhost in $vmhosts){$vcpus=0;$ratio=$null;$ht=$vmhost.HyperThreadingActive;if($ht -eq "True"){$Multiple="0.75"}else{$Multiple="1"};$hostthreads=$vmhost.extensiondata.hardware.cpuinfo.numcputhreads*$Multiple;$vms|Where-Object{$_.vmhost -like $vmhost}|ForEach{$vcpus+=$_.numcpu};if($vcpus -ne "0"){$ratio= "{0:N1}" -f ($vcpus/$hostthreads)};$hvalue=New-Object psobject;$hvalue|Add-Member -MemberType Noteproperty "Hostname" -value $vmhost.name;$hvalue|Add-Member -MemberType Noteproperty "pCPU" -Value $hostthreads;$hvalue|Add-Member -MemberType Noteproperty "vCPU" -Value $vcpus;$hvalue|Add-Member -MemberType Noteproperty "Ratio" -Value $ratio;$Output+=$hvalue;$totalhostthreads += $hostthreads;$totalvcpus += $vcpus;$totalratio="{0:N1}" –f ($totalvcpus/$totalhostthreads)};$cvalue=New-Object psobject;$cvalue|Add-Member -MemberType Noteproperty "Hostname" -value "Cluster";$cvalue|Add-Member -MemberType Noteproperty "pCPU" -Value $totalhostthreads;$cvalue|Add-Member -MemberType Noteproperty "vCPUs" -Value $totalvcpus;$cvalue|Add-Member -MemberType Noteproperty "Ratio" -Value $totalratio;$Output1 += $cvalue;$Output|ft -autosize;$Output1|ft -autosize

Script RAM (OneLiner)

param($vmhosts="*");$Cluster_Name="Nom_du_Cluster";$vmhosts=Get-Cluster $Cluster_Name|Get-VMHost;[email protected]();[email protected]();$totalhostram=0;$totalvram=0;$totalratio=0;ForEach ($vmhost in $vmhosts){$ratio=$null;$hostvram=0;$vms = Get-Cluster $Cluster_Name | Get-VMHost $vmhost | Get-VM | where {$_.PowerState -eq "PoweredOn"};ForEach ($vm in $vms){$vram=0;$vram = $vm.MemoryGB;$hostvram += $vram};$totalvram += $hostvram;$hostram="{0:N0}" -f ($vmhost.memorytotalGB);$ratio = "{0:N1}" -f ($hostvram/$hostram);$hvalue= New-Object psobject;$hvalue| Add-Member -MemberType Noteproperty "Hostname" -value $vmhost.name;$hvalue| Add-Member -MemberType Noteproperty "hRAM" -Value $hostram;$hvalue| Add-Member -MemberType Noteproperty "vRAM" -Value $hostvram;$hvalue| Add-Member -MemberType Noteproperty "Ratio" -Value $ratio;$Output+=$hvalue;$totalhostram += $hostram};$totalratio = "{0:N1}" -f ($totalvram/$totalhostram);$cvalue= New-Object psobject;$cvalue| Add-Member -MemberType Noteproperty "Hostname" -value "Cluster";$cvalue| Add-Member -MemberType Noteproperty "hRAM" -Value $totalhostram;$cvalue| Add-Member -MemberType Noteproperty "vRam" -Value $totalvram;$cvalue| Add-Member -MemberType Noteproperty "Ratio" -Value $totalratio;$Output1+=$cvalue;$Output|ft -autosize;$Output1|ft -autosize


...BofBienTrès BienTop ! (Soit le premier à voter)
Loading...

Mathieu

Je suis actuellement Ingénieur Système spécialisé dans le design d'environnements cloud virtualisés. Adepte des technologies de VMware, Nutanix, Citrix ou Microsoft je propose à travers ce blog diverses astuces de troubleshooting.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *