Şehirlerarası yolcu taşımacılığı yapan bir otobüs firmasını gözünüzün önüne getirin. Otobüsün toplam 40 adet standart koltuğu vardır. Ancak firmanın bilet satış algoritması kâr hırsıyla gözünü karartır ve aynı sefere tam 300 kişiye koltuk numaralı bilet keser (Overbooking / Çifte Rezervasyon). Yolcular otobüse bindiğinde koridorlar, koltuk araları, bagaj bölmeleri insanla dolar. İnsanlar birbirinin omzuna basmakta, nefes almak için sırayla pencereyi açmaktadır. Ağırlıktan dolayı otobüsün şasisi yere sürtünür; ilk dik yokuşa geldiğinde motor hararet yapar ve saatte 10 kilometre hıza kadar düşer. Yolcular isyan ettiğinde ise muavin mikrofonu alır ve yüzsüzce şunu anons eder: "Sayın yolcularımız, otobüsümüzde hiçbir arıza yoktur. Yokuş çok dik olduğu ve sizler de kişisel olarak çok ağır olduğunuz için araç yavaşlamıştır. Lütfen bavullarınızı camdan aşağı atınız!" Bu bir toplu taşıma hizmeti değil; fizik kurallarını ve insan onurunu hiçe sayan bir dolandırıcılık modelidir.
Sanal sunucu (VPS/VDS) pazarında "vCPU Overbooking (Sanal Çekirdek Aşırı Rezervasyonu)" tam olarak bu 40 kişilik otobüse 300 yolcu bindirme sahtekarlığıdır.
Siz faturanızı öder, "8 vCPU, 16 GB RAM" paketini satın alırsınız. Kağıt üzerinde 8 çekirdekli dev bir canavarınız vardır. Ancak terminali açıp basit bir veritabanı sorgusu attığınızda, sistemin kilitlendiğini ve işletim sisteminizin %st (CPU Steal) batağında boğulduğunu görürsünüz.
vCPU Nedir? Fiziksel Çekirdek ile Sanal İş Parçacığı Ayrımı
Sanallaştırma dünyasında (KVM, QEMU, VMware ESXi, Proxmox) bir sanal sunucuya atanan vCPU (Virtual CPU), fiziksel bir işlemci çekirdeği değildir!
Bir vCPU, fiziksel işlemcinin işletim sistemi zamanlayıcısı (Kernel Scheduler) tarafından çalıştırılan sıradan bir iş parçacığıdır (thread / task).
Fiziksel sunucunun (Host Node) 16 çekirdekli (32 Thread) bir AMD EPYC veya Intel Xeon işlemcisi olduğunu varsayalım:
- Profesyonel Oran (1:1 veya 1:2): 32 fiziksel iş parçacığına toplamda en fazla 32 ila 64 vCPU atanır. Her sanal sunucu gerçek işlemci zamanını adilce ve beklemeden alır.
- Overbooking Bataklığı (1:10 veya 1:20): Sağlayıcı aynı 32 iş parçacığının üzerine toplamda 500 vCPU tanımlar ve satar!
[FİZİKSEL HOST DÜĞÜMÜ: 32 Fiziksel Thread]
│
▼ (Hipervizör Zamanlayıcısı: KVM / CFS Scheduler)
┌───────────────┼───────────────┬───────────────┐
▼ ▼ ▼ ▼
[Sanal Makine 1] [Sanal Makine 2] [...] [SİZİN SUNUCUNUZ (VM 48)]
(vCPU: 4) (vCPU: 8) (vCPU: 8)
Mining Yapıyor Dizi Yayını WordPress / E-Ticaret
Bu ortamda 50 farklı sanal sunucu aynı milisaniyede işlemciye talimat göndermek ister. Ancak fiziksel çekirdek sayısı 32'dir!
Hipervizör zamanlayıcısı ne yapar? Zamanı mikrosaniyelik dilimlere (time slices) böler ve herkesi kuyruğa sokar.
CPU Steal (%st): İşlemcinizin Çalınma Oranı
Linux işletim sisteminde terminali açıp top veya htop yazdığınızda en üstteki CPU istatistik satırında gizemli harfler görürsünüz:
us (user), sy (system), id (idle), wa (iowait)... ve satırın en sonunda: st (steal).
st parametresi, sanal makinenizin şu feryadıdır:
"Ben çalışmaya hazırım, çalıştırmak istediğim PHP kodum ve MySQL sorgum var; ancak alttaki hipervizör beni durdurdu ve benim işlemci hakkımı komşu sanal makineye verdi!"
top - 14:22:08 up 3 days, 1:12, 1 user, load average: 12.45, 8.12, 4.30
%Cpu(s): 3.2 us, 1.1 sy, 0.0 ni, 15.4 id, 2.1 wa, 0.0 hi, 0.1 si, 78.1 st 🔴Ekranda gördüğünüz 78.1 st, şu korkunç gerçeği haykırır:
- Satın aldığınız 8 vCPU gücünün %78'i komşularınız tarafından çalınmaktadır!
- Sizin sunucunuz 1 saniyenin yalnızca 220 milisaniyesinde işlem yapabilmekte, kalan 780 milisaniyesinde hipervizör kapısında bekletilmektedir!
İşte bu yüzden 8 çekirdekli sunucunuzda basit bir WordPress sayfası 15 saniyede açılır; load average 12'ye fırlar ve sistem felç olur.
Sahte "Load Average" Yükselişi: Bekleyen Kuyruklar
Birçok sistem yöneticisi sunucunun load average değerinin 10-15 olduğunu görünce "Siteme saldırı var" veya "Kodlarımda sonsuz döngü var" sanır.
Oysa Linux'ta Load Average sadece çalışan işleri değil; çalışmak için CPU sırası bekleyen (Uninterruptible Sleep / R State) iş parçacıklarının sayısını da ölçer.
CPU Steal %80 olduğunda, 10 farklı PHP işlemi işlemciye girmek için sırada bekler. Kod hafif olsa bile kuyruk uzar; sistem çökmüş gibi görünür. Gerçekte kodunuzda hiçbir sorun yoktur; sorun, otobüsün koridorunda sıkışıp kalmış olmanızdır.
"Sunucunuzda Yoğunluk Var" Kandırmacası
Durumu fark eden müşteri sağlayıcıya yazar:
"Sunucumda %85 CPU Steal var, işlemcimi kullanamıyorum, hipervizörünüz aşırı yüklü!"
Merdiven altı sağlayıcının destek personeli durumu saptırmak için klasik taktiği uygular:
"Sayın müşterimiz, sunucunuzun Load Average değeri 14 görünmektedir. Web siteniz aşırı trafik almakta ve kaynak limitlerini zorlamaktadır. Lütfen eklentilerinizi devre dışı bırakıp tekrar deneyiniz."
Müşteri mühendislikten anlamıyorsa suçluluk psikolojisine girer: "Acaba hangi eklenti bozdu?" diyerek günlerce kendi kodunu kurcalar.
Oysa yapılması gereken tek şey şudur: Sunucuda hiçbir web sitesi çalıştırmasanız bile, bomboş bir Linux terminalinde basit bir döngü çalıştırın:
# Boş bir CPU stres testi:
dd if=/dev/zero of=/dev/nullEğer tek bir dd komutunda bile CPU Steal %30'un üzerine çıkıyorsa; o sunucu bir çöplüktür, komşuların gürültüsünden arınması imkansızdır.
Kurtuluş Yolu: Dedicated vCPU ve CPU Pinning
Gerçek ve profesyonel bir altyapıda overbooking bataklığına düşmemenin yolları bellidir:
1. Dedicated vCPU (CPU Pinning / Passthrough):
Profesyonel bulut sağlayıcılarında (AWS EC2 c5/c6 serisi, DigitalOcean Dedicated Droplets, Hetzner Dedicated vCPU):
- Hipervizör, fiziksel bir çekirdeği doğrudan ve münhasıran sizin sanal makinenize kilitler (Core Pinning).
- O çekirdeği sizden başka hiçbir sanal makine kullanamaz.
- CPU Steal oranı her zaman %0.0 seviyesindedir.
[Dedicated vCPU Mimarisi]
Fiziksel Çekirdek 4 ─── (Kilitli / Pinned) ───► Yalnızca SİZİN Sanal Makineniz!
(Komşu ne yaparsa yapsın, sizin çekirdeğinize dokunamaz!)
2. Paylaşımlı Paketlerde Tolerans Sınırı:
Paylaşımlı (Shared vCPU) bir paket kullanıyorsanız bile, sağlıklı bir veri merkezinde kabul edilebilir maksimum CPU Steal oranı %3 ile %5 arasındadır. %10'u aşan ve saatlerce süren her steal oranı, sağlayıcının açgözlülüğünün ve aşırı satış yaptığının açık delilidir.
Sonuç
40 kişilik otobüse 300 bilet satan firma taşımacılık yapmıyor, insan hayatıyla kumar oynuyordur; 32 thread işlemciye 500 vCPU tanımlayan sağlayıcı da bulut hizmeti vermiyor, müşterinin parasını gasp ediyordur.
Sanal sunucu kiralarken sadece "kaç çekirdek" olduğuna bakmayın; o çekirdeklerin gerçekten size mi ait olduğunu, yoksa 50 komşuyla paylaşılan hayali birer serap mı olduğunu sorgulayın. Terminalinizde top yazın; ekrandaki %st değerine bakın. Eğer işlemciniz çalınıyorsa o otobüsten derhal inin; çünkü o araç asla menzile ulaşamayacaktır.