KVM (BİL461-ÖDEV1)
ÖDEV-1
KERNEL-BASED VIRTUAL
MACHINE(KVM)
Sanallaştırma, birçok kuruluşun daha esnek, kolay
yönetilebilir ve az maliyetli alt yapılar sağlayabilmek amacıyla üzerinde
çalışmalar yaptığı ve bir kaynağı birden fazla alt işleme bölerek daha verimli
hale getirmeye dayanan bir sistemdir. Son yıllarda sanallaştırma üzerine
yapılan çalışmalar hız kazanmış ve x86 mimarisi için de uygulanmaya
başlamıştır.
x86 mimarisi ile tasarlanmış işlemciler, 8 ya da daha fazla
çekirdek içererek multi-threading sağlamaları, büyük belleğe sahip sistemleri
desteklemeleri, yüksek hızlı işlemci bağlantısı gibi özellikler sayesinde
güvenilirlik(reliability),
uygunluk(availability) ve kullanışlılık(serviceability) özelliklerini
sağlarlar. Bunlar, önceleri yalnızca ana bilgisayarlarda ve high end Unix
sistemlerde bulunan özellikler iken şu anda soketler aracılığıyla x86
sistemleri de bu özellikleri sağlayabilecek şekilde geliştirilmiştir. Böylece
kurumların daha az masraflı olan bu sistemleri tercih etmeye başlamalarının ne
kadar mantıklı olduğunu görebiliyoruz.
x86 mimarisinde işlemlerin güvenli bir şekilde
yürütülebilmesi için kullanıcı uygulamaları ve işletim sistemi uygulamaları
arasında ayrım sağlayan bir yapı geliştirilmiştir. Kod Yetki Düzeyi(Code
Privilege Level ) adı verilen bu yapı kodun çalıştığı yetki seviyesini gösteren
2 bitlik bir değerdir. Seviyeler ring0, ring1, ring2 ve ring3 olmak üzere 4’e
ayrılır. En yetkili olan ring0 seviyesidir ve işletim sistemi bu seviyede
çalışır. En az yetkiye sahip olan ring3 seviyesinde ise kullanıcı uygulamaları
çalışır. Çoğu işletim sisteminde yalnızca ring0 ve ring3 seviyeleri kullanılır.
Bu çalışma sistemi göz önüne alındığında Kod Yetki Düzeyi
modelinin sanal makinelerin çalışması sırasında bazı sorunlar meydana
getireceği görülebilmektedir. Sanal makineler ring3 düzeyinde çalışmaktadır,
ancak bu sanal makineler kendi üzerlerinde kurulu olan bir işletim sistemi ile
çalışırlar ve işletim sistemlerinin çalışmasının normalde ring3 yerine ring0
düzeyinde olması gerekir. İşletim sistemi tarafından yapılan işlem çağrılarının
ring3 düzeyinde yapılması uygun değildir. Bu durumda da büyük bir sorun ortaya
çıkmış olur.
Bu sorunu çözmek için “Ring Compression ” adı verilen ve
sanal makine üzerinde çalışan işletim sisteminin yetki seviyesini değiştirmeyi
sağlayan bir yöntem düşünülmüştür. Ancak bu yöntem ile gereken başarım
sağlanamayınca daha etkili teknikler üzerinde çalışılmıştır.
Sanal makinenin doğrudan işlemci üzerinde çalışması üzerine
kurulu bir yöntemde, yetkilendirilmiş buyruklar ortaya çıktığında işlemci
tarafından yakalanır ve bu buyruklar hypervisor(VMware gibi) tarafından ele
alınır. Ancak bu şekilde yakalanamayan bazı buyruklardan dolayı işletim sistemi
gerçekte ring3’te çalışıyor olduğunu anlayabilir. Bu durumda “Binary
Translation” adı verilen çevrimle hypervisor, sanal makine belleğini tarayarak
bu buyruklar çalışmadan önce tespit eder ve bu kodları uygun şekilde tekrar
yazar. Böylece işletim sistemi bu durumun farkına varmadan normal şekilde
çalışır.
“Paravirtualization” adı verilen bir başka yöntemde ise sanal
makine üzerinde çalışan işletim sistemi bunun farkındadır ve ayrıcalıklı
buyrukları hypervisor’a yapılan çağrımlar ile değiştirerek hypervisor ile
birlikte uyumlu bir şekilde çalışabilir. Bu yöntem işletim sisteminin bunu
sağlayacak şekilde uygulanmasıyla kullanılabilir hale gelir. Linux üzerinde
gereken değişiklikler yapılarak bu yöntemin uygulanabilmesi sağlanmıştır.
Xen Hypervisor, Domain0(Dom0) adı verilen ve donanıma
doğrudan erişimi olan bir sanal makine yükler. Bu sanal makineler gerekli değişiklikler
yapılmış bir Linux kernel içerir ve Xen Hypervisor’ı ile iletişim kurar. Bu
modelde dom0 üzerindeki kernel ring1 üzerinde çalışır.
Yazılım ile sağlanan bu sanallaştırmalar dışında işlemci
üzerinde yapılabilecek donanımsal sanallaştırmalar da geliştirilmiştir. Bu
yöntemde işlemci, host mode ya da guest mode olarak 2 farklı şekilde
çalışabilir. Hypervisor, işlemcinin guest mode ile çalışmasını sağlayarak
kontrolü ele alır. Sanal makine üzerindeki işletim sistemi belleğe doğrudan
erişemeyeceği için hypervisor tarafından sanal bir bellek sağlanır. Bu bellek
genellikle hypervisor’ın içerdiği sayfa tabloları ile implement edilir.
Kernel-based Virtual Machine(KVM) bütün bu gelişmeler temel
alınarak, Linux kernel için geliştirilmiş bir sanallaştırma altyapısıdır.
Donanımsal sanallaştırma ve hypervisor üzerinde yapılmış çalışmalar göz önünde
bulundurularak sanallaştırma konusunda rahat bir şekilde başarım sağlanmıştır.
KVM mimarisinde sanal makine normal bir Linux işlemi gibi implement edildiği
için, KVM bütün Linux kernel özelliklerinden yararlanabilmektedir.
KVM güvenlik için Linux güvenlik modelini kullanmaktadır.
Linux kernel, SELinux(Security Enhanced Linux) projesini içerir. SELinux
sayesinde Linux kernel üzerinde sıkı bir kaynak izolasyonu sağlanabilir.
KVM ayrıca Linux’un sıradan Linux işlemleri için sağladığı gelişmiş
bellek özelliklerinden de faydalanır. İşlemci üzerindeki sanallaştırma
özelliklerini destekler.
Linux tarafından desteklenen bütün donanım KVM tarafından
kullanılabilir. KVM depolama için Linux tarafından kullanılabilen bütün
depolama alanını güvenli bir şekilde kullanabilir.
KVM, çalışmakta olan bir sanal makinenin fiziksel sunucular
arasında herhangi bir kesinti olmadan taşınmasını sağlayan Live Migration
özelliğini destekler.
KVM, Linux, Windows, OpenBSD, FreeBSD, OpenSolaris, Solaris
x86, MS DOS gibi birçok guest işletim sistemini destekler.
KVM hibrit sanallaştırmayı destekler. Bu sayede guest işletim
sistemine, sanal makine için optimize edilmiş bir I/O arayüzü sağlayarak yüksek
hızda I/O performansı sunan sanallaştırılmış sürücüler yüklenebilir.
Desteklenen bu özellikler sayesinde Linux kernel, sanal
makine üzerinde çalışan uygulamalarda gecikmeyi azaltır ve hız kazandırır. Bir
araya gelen bu özellikler sayesinde iyi performans sağlanması konusunda iç
açıcı sonuçlar elde edilebildiği görülmektedir.
Kazanımlar
Ödev için gerekli bilgiyi sağlayan metni okumadan önce sanallaştırma ve KVM hakkında bir
fikre sahip olmadığım için bütün bu yazdıklarım benim için önemli bir kazanım
olmuştur. Sanallaştırma sayesinde sağlanan kolaylıkları biliyor olmamın her
zaman işime yarayacağını düşünüyorum çünkü daha az maliyete neden olacak bir
sistemle aynı anda birçok birbirinden bağımsız uygulamayı kullanabilmenin nasıl
sağlanabileceğinin bilinmesi her zaman için kurumlar ve kişiler açısından büyük
bir avantajdır. Sanallaştırmanın getirdiği imkanlar göz önünde bulundurularak tasarlanan
KVM’i düşünecek olursak da belki de başka teknolojiler için de benzer bir model
temel alınarak iyi sonuçlar ortaya çıkabileceği fikrini edindim.