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.

Popüler İçerikler