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

Synopsis

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

Explication

Je vais prendre comme exemple un Cluster de deux ESXi, si on parle en pourcentage on ne dépasse pas les 10

0%, 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

RAM

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

CPU

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)

ForEach($clustername in Get-Cluster){write-host;write-host $clustername -ForegroundColor Yellow;$vmhosts=Get-Cluster $clustername|Get-VMHost;$vms=Get-Cluster $clustername|Get-VM|where {$_.PowerState -eq "PoweredOn"};$Output=@();$Output1=@();$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)

$getcluster=Get-Cluster;ForEach($clustername in $getcluster){ write-host;write-host $clustername -ForegroundColor Yellow;$vmhosts=Get-Cluster $clustername|Get-VMHost;$Output=@();$Output1=@();$totalhostram=0;$totalvram=0;$totalratio=0;ForEach ($vmhost in $vmhosts){$ratio=$null;$hostvram=0;$vms = Get-Cluster $clustername | 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}

Mathieu

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

S’abonner
Notification pour
guest

0 Commentaires
Commentaires en ligne
Afficher tous les commentaires