Kısa cevap

Hypervisor — Türkçede hipervizör olarak da yazılır — bir fiziksel sunucunun işlemci, bellek, disk ve ağ kaynaklarını birden fazla sanal makine arasında paylaştıran ve bu makineleri birbirinden yalıtan yazılım katmanıdır. Sanal makineler donanıma doğrudan değil, hypervisor'ın sunduğu sanal donanım üzerinden erişir.

Hypervisor ne yapar?#

Bir sunucuda yalnızca tek bir işletim sistemi çalıştığında, o işletim sistemi donanımın tamamının sahibidir: belleğin tamamını görür, diskleri doğrudan yönetir, ağ kartına doğrudan erişir.

Hypervisor bu tabloyu değiştirir. Donanımla işletim sistemleri arasına girer ve dört temel işi üstlenir:

  • Bölüştürme. Fiziksel kaynakları sanal makinelere paylaştırır.
  • Yalıtım. Bir sanal makine, diğerinin belleğini okuyamaz veya onu çökertemez.
  • Soyutlama. Konuk işletim sistemine gerçek donanımın değil, standart bir sanal donanımın sunulmasını sağlar.
  • Zamanlama. Hangi sanal makinenin ne zaman işlemci kullanacağına karar verir.

Soyutlama neyi kolaylaştırır?#

Sanal donanımın standart olması, pratikte en çok fark edilen faydadır. Bir sanal makineyi bir sunucudan alıp tamamen farklı marka ve modeldeki başka bir sunucuya taşıdığınızda, konuk işletim sistemi aynı sanal ağ kartını ve aynı sanal disk denetleyicisini görmeye devam eder. Sürücü uyumsuzluğu sorunu ortadan kalkar.

Aynı soyutlama; anlık görüntü (snapshot) alma, sanal makineyi çalışırken başka bir host'a taşıma ve şablondan yeni makine oluşturma gibi özelliklerin de temelidir.

Yalıtım ne kadar güçlüdür?#

Modern işlemciler sanallaştırmayı donanım seviyesinde destekler (Intel VT-x, AMD-V ve bellek tarafında EPT/NPT gibi genişletmeler). Hypervisor bu desteği kullanarak her sanal makineye kendi bellek adres alanını verir ve ayrıcalıklı komutları denetler.

Kaynaklar gerçekten bölünür mü?#

Hayır — ve bu, konuyu yeni öğrenenlerin en çok yanıldığı noktadır. Hypervisor kaynakları fiziksel olarak parçalara ayırıp her birini bir makineye kilitlemez. Bunun yerine zaman ve talep üzerinden paylaştırır:

  • İşlemci zamanı, çalışmaya hazır sanal işlemciler arasında sırayla dağıtılır.
  • Bellek, sanal makineye tanımlanır ama gerçekte kullanıldığı ölçüde ayrılır.
  • Disk alanı, seçilen sağlama biçimine göre önceden veya kullanıldıkça ayrılabilir.

Bu yaklaşım, toplamda fiziksel kapasiteden daha fazla kaynak tanımlanmasına (overcommitment) izin verir. Doğru kullanıldığında verimlilik sağlar, yanlış kullanıldığında performans sorunu üretir.

Hypervisor türleri#

Hypervisor'lar donanımla ilişkilerine göre iki ana başlıkta incelenir: doğrudan donanım üzerinde çalışanlar (Type 1) ve bir işletim sistemi üzerinde uygulama olarak çalışanlar (Type 2). Aradaki fark yalnızca kurulum biçimi değil; performans, yalıtım ve kullanım senaryosu da değişir.

Hypervisor ile konteyner arasındaki fark nedir?#

İkisi de tek fiziksel makinede birden fazla iş yükü çalıştırır, ama neyi çoğalttıkları farklıdır.

Sanal makine ve konteyner karşılaştırması
ÖlçütSanal makineKonteyner
Çekirdek (kernel)Her makinenin kendi çekirdeği varHost çekirdeği paylaşılır
Yalıtım sınırıHypervisor ve donanım desteğiÇekirdek içi isim alanları
Başlama süresiSaniyeler–dakikaSaniyenin altı
Farklı işletim sistemiÇalıştırılabilirHost çekirdeğiyle uyumlu olmalı
Birim başına yükTam işletim sistemi kadarYalnızca uygulama ve bağımlılıkları

Tablo yatay olarak kaydırılabilir.

Buradan çıkan pratik sonuç şudur: konteyner daha hafiftir ama yalıtımı çekirdek düzeyindedir; sanal makine daha ağırdır ama yalıtım sınırı daha aşağıda, donanım desteğiyle kurulur.

Bu yüzden farklı güven düzeyindeki iş yükleri ayrıştırılırken genellikle sanal makine sınırı tercih edilir. Uygulamada iki yaklaşım birbirinin alternatifi olarak değil, katmanlı biçimde kullanılır — konteynerler sanal makineler içinde çalışır.

Hypervisor belleği nasıl paylaştırır?#

Bellek, işlemciden farklı davranır: işlemci zamanı bölünüp sıraya alınabilir, ama bir sanal makinenin kullandığı bellek o an fiziksel olarak bir yerde durmak zorundadır.

Hypervisor'lar bu yüzden belleği geri kazanmak için kademeli yöntemler kullanır. Genel sıra şöyledir:

Bellek baskısı arttıkça

  1. Paylaşım — birden fazla makinede birebir aynı olan bellek sayfaları tek kopyada tutulur.
  2. Balonlama (ballooning) — konuk işletim sistemine bir sürücü aracılığıyla bellek talebi bildirilir; konuk kendi içinde en az ihtiyaç duyduğu sayfaları serbest bırakır.
  3. Sıkıştırma — geri verilecek sayfalar diske yazılmak yerine sıkıştırılıp bellekte tutulur.
  4. Diske takas (swap) — son adım. Performansı en çok düşüren yöntem budur.

Sıralamanın kendisi mesajı veriyor: hypervisor diske takasa mümkün olduğunca geç başvurur. Bir ortamda takas görülüyorsa bu, bellek planlamasının yeniden gözden geçirilmesi gereken bir işaretidir.

Hypervisor içinde hypervisor çalışır mı?#

Çalışır; buna iç içe sanallaştırma (nested virtualization) denir. Bir sanal makinenin içinde ikinci bir hypervisor kurulur ve o da kendi sanal makinelerini çalıştırır.

Kullanım alanı belirlidir: eğitim ve laboratuvar ortamları, sürüm yükseltmelerinin denenmesi, test otomasyonu. Bunun için host'un donanım sanallaştırma yeteneğinin konuk makineye açılması gerekir.

Üretim iş yükleri için tercih edilmez. Her katman ek bir yönlendirme maliyeti getirir ve bazı üreticiler iç içe yapılandırmayı destek kapsamına almaz.

Hypervisor güncellenirken sanal makineler ne olur?#

Tek host varsa güncelleme bir kesinti demektir: hypervisor yeniden başlatılırken üzerindeki bütün makineler durur.

Cluster yapısında ise durum değişir. Yaygın yöntem, host'u bakım kipine almak ve üzerindeki makineleri çalışırken diğer host'lara taşımaktır — vMotion tam olarak bunun için vardır. Host boşaldıktan sonra güncellenir, yeniden başlatılır ve tekrar kullanıma alınır. Sonra sıra bir sonraki host'a gelir.

Bu, tek bir host'un kaybını tolere edecek kadar boş kapasite bırakmanın neden önemli olduğunu da açıklar: aynı boş kapasite hem arıza hem planlı bakım için kullanılır.

Önemli noktalar

  • Hypervisor, donanım ile işletim sistemleri arasında duran ve kaynakları paylaştıran katmandır.
  • Sanal makineler standart sanal donanım gördüğü için farklı fiziksel sunucular arasında taşınabilir.
  • Yalıtım donanım desteğiyle güçlendirilir ancak hypervisor'ın güncel tutulması gerekir.
  • Kaynaklar fiziksel olarak bölünmez; zaman ve talep üzerinden paylaştırılır.