Kısa cevap

vCPU, bir sanal makineye sunulan mantıksal işlemcidir. Fiziksel bir çekirdeğin sahipliği değil, hypervisor zamanlayıcısının fiziksel işlemci üzerinde planladığı bir çalışma bağlamıdır. "4 vCPU" tanımlamak, sanal makineye aynı anda dört iş parçacığı çalıştırma hakkı verir; dört çekirdeği ona ayırmaz.

Neden bu ayrım önemli?#

Kapasite planlamasında en sık yapılan hata, vCPU sayısını fiziksel çekirdek sayısıyla birebir eşleştirmektir. Bu varsayım iki yönde de yanlış sonuç üretir:

  • Elinizdeki kapasiteyi gereğinden küçük görürsünüz ve gereksiz donanım alırsınız.
  • Ya da tam tersine, bir sanal makineye "nasılsa boşta duruyor" diyerek gereğinden fazla vCPU verir ve o makinenin performansını düşürürsünüz.

İkincisi sezgiye aykırı olduğu için özellikle dikkat ister. Nedenini anlamak için zamanlayıcının ne yaptığına bakmak gerekir.

Hypervisor işlemciyi nasıl paylaştırır?#

Fiziksel sunucuda hypervisor, kullanılabilir mantıksal işlemcileri (SMT/Hyper-Threading açıksa çekirdek başına iki iş parçacığı) bir havuz olarak görür. Her sanal makinenin her bir vCPU'su, çalışması gerektiğinde bu havuzdan bir mantıksal işlemci üzerine yerleştirilir.

Bu yerleştirme kalıcı değildir. Bir vCPU çalışmaya hazır olduğunda:

  1. Zamanlayıcı uygun bir mantıksal işlemci arar.
  2. Uygun işlemci yoksa vCPU sıraya girer.
  3. Sırada geçen süre, sanal makine içinden görünmez; makine yalnızca "yavaş" çalıştığını hisseder.

Fazla vCPU neden yavaşlatır?#

Çok vCPU'lu bir sanal makineyi zamanlamak, az vCPU'lu bir makineyi zamanlamaktan daha zordur. Çünkü çok iş parçacıklı bir konuk işletim sistemi, vCPU'larının birbirine yakın zamanlarda ilerlediğini varsayar. Bir vCPU çok geride kalırsa, konuk içindeki kilit ve senkronizasyon mekanizmaları bozulur.

Hypervisor bunu engellemek için vCPU'ların ilerleme farkını (skew) sınırlar. Modern ESXi sürümleri bu işi katı bir "hepsi aynı anda çalışsın" kuralıyla değil, gevşek co-scheduling ile yapar: vCPU'lar aynı anda çalışmak zorunda değildir, ancak aralarındaki fark belirli bir eşiği aşarsa geride kalanlara öncelik verilir.

Sonuç şudur: sanal makine ne kadar genişse, zamanlayıcının onu rahatça yerleştirebilmesi için o kadar çok boş mantıksal işlemciye aynı anda ihtiyaç duyulur. Yoğun bir host'ta bu, bekleme süresinin artması demektir.

NUMA sınırları#

Çok soketli sunucularda bellek, işlemciye eşit uzaklıkta değildir. Her soketin kendine daha yakın (yerel) belleği vardır; diğer soketin belleğine erişim daha yavaştır. Buna NUMA (Non-Uniform Memory Access) denir.

Bir sanal makine tek bir NUMA düğümüne sığdığında, hypervisor onu o düğüme yerleştirir ve bellek erişimi yerel kalır. Makine bir düğümden genişse, bellek erişiminin bir kısmı uzak düğüme gitmek zorunda kalır.

Aynı host üzerinde iki farklı boyutlandırma yaklaşımı
YaklaşımTek NUMA düğümüne sığan VMDüğümden geniş VM
Bellek erişimiAğırlıklı olarak yerelBir bölümü uzak düğümde
Zamanlama kolaylığıDaha kolay yerleşirDaha fazla boş işlemci gerektirir
Konuğa sunulan topolojiTek düğümvNUMA ile birden fazla düğüm

Tablo yatay olarak kaydırılabilir.

vSphere, belirli bir vCPU sayısının üzerindeki sanal makinelere konuk işletim sisteminin de NUMA yapısını görebilmesi için sanal NUMA (vNUMA) topolojisi sunar. Bu eşik yapılandırılabilir; varsayılan davranış ve ayar adı sürüme göre değişebildiği için kullandığınız sürümün dokümantasyonundan doğrulayın.

Pratikte nasıl boyutlandırmalı?#

vCPU boyutlandırma yaklaşımı

  1. Uygulamanın gerçekten kaç iş parçacığı kullandığını öğrenin. Üreticinin önerisi çoğu zaman "ne kadar çok o kadar iyi" değildir.
  2. Küçük başlayın. 2 veya 4 vCPU ile başlayıp ölçüme göre büyütmek, baştan 16 vCPU verip sorunu sonradan aramaktan daha iyidir.
  3. Yük altında ready time ve uygulama yanıt süresini birlikte izleyin.
  4. Sanal makineyi mümkün olduğunca tek NUMA düğümüne sığdırın.
  5. Büyütme kararını ölçüme dayandırın; "ihtiyaç olur" varsayımına değil.

Sık karşılaşılan yanlış anlamalar#

İkinci yaygın yanlış anlama, vCPU sayısı ile lisanslama arasındaki ilişkidir. Bazı yazılımlar sanal makinedeki vCPU sayısına, bazıları ise altındaki fiziksel çekirdek sayısına göre lisanslanır. Boyutlandırma kararını vermeden önce ilgili ürünün lisans metnini kontrol edin; bu, teknik olmayan ama pahalı bir sürprizdir.

Önemli noktalar

  • vCPU, fiziksel bir çekirdeğin sahipliği değil, zamanlanan bir çalışma bağlamıdır.
  • Fazla vCPU, kullanılamıyorsa performansı artırmaz; zamanlama maliyetini artırır.
  • Ready time, sanal makinenin kendi yükünü değil host üzerindeki rekabeti gösterir.
  • Sanal makineyi mümkün olduğunca tek NUMA düğümüne sığdırmak bellek erişimini hızlandırır.
  • Boyutlandırma kararı ölçüme dayanmalıdır; varsayıma değil.