Qemu :
QEmu, kendine ait eksiksiz ve bağımsız bir yazılımdır. Makineleri taklit etmek için kullanıyorsunuz, çok esnek ve taşınabilir. Temel olarak, belirli bir işlemci için yazılan ikili kodu bir başkasına dönüştüren özel bir 'yeniden derleyici' ile çalışır (örneğin, bir PPC mac'ta MIPS kodunu veya bir x86 PC'de ARM çalıştırmak için).
İşlemciden daha fazlasını taklit etmek için, Qemu uzun bir çevresel emülatör listesi içerir: disk, ağ, VGA, PCI, USB, seri / paralel bağlantı noktaları vb.
KQemu :
Hem kaynağın hem de hedefin aynı mimariye sahip olduğu özel durumda (x86'daki x86'nın genel durumu gibi), 'ayrıcalıklı talimatları' kaldırmak ve bunları bağlam anahtarları ile değiştirmek için yine de kodu ayrıştırmak zorundadır. X86 Linux'ta mümkün olduğunca verimli hale getirmek için, bunu yapan KQemu adlı bir çekirdek modülü var.
Bir çekirdek modülü olan KQemu, yalnızca en düşük seviyedeki ring0 komutları yerine, çoğu kodu değiştirmeden çalıştırabilir. Bu durumda, kullanıcı alanı Qemu öykünmüş makine için tüm RAM'i hala ayırır ve kodu yükler. Aradaki fark, kodu tekrar derlemek yerine, tarama / yama / çalıştırma için KQemu'yu çağırmasıdır. Tüm çevresel donanım emülasyonu Qemu'da yapılır.
Bu, düz Qemu'dan çok daha hızlıdır, çünkü çoğu kod değişmez, ancak yine de ring0 kodunu (VM çekirdeğindeki kodun çoğunu) dönüştürmek zorunda kalır, bu nedenle performans yine de düşüktür.
KVM :
KVM birkaç şey: İlk önce işlemciyi yeni bir 'konuk' durumuna geçiren bir Linux çekirdek modülü. Konuk devletin kendi çalma durumları vardır, ancak ayrıcalıklı çalma0 talimatları hipervizör koduna geri döner. Yeni bir işlemci yürütme modu olduğundan, kodun hiçbir şekilde değiştirilmesi gerekmez.
İşlemci durum anahtarlamasının yanı sıra, çekirdek modül, MMU kayıtları (VM işlemek için kullanılır) ve PCI öykünmüş donanımın bazı parçaları gibi öykünmenin birkaç düşük seviyeli bölümünü de kullanır.
İkincisi, KVM, Qemu çalıştırılabilir bir çatal. Her iki takım da farklılıkları minimumda tutmak için aktif olarak çalışıyor ve azaltmada bazı ilerlemeler var. Sonunda amaç, Qemu'nun herhangi bir yerde çalışması gerektiğidir ve eğer bir KVM çekirdek modülü varsa, otomatik olarak kullanılabilir. Ancak öngörülebilir gelecek için, Qemu ekibi donanım emülasyonuna ve taşınabilirliğine odaklanırken, KVM milleti çekirdek modülüne (bazen öykünmeyi küçük hale getirirse performansı arttırırsa) ve kullanıcı alanı kodunun geri kalanıyla etkileşime odaklanır.
Kvm-qemu çalıştırılabilir normal Qemu gibi çalışır: RAM ayırır, kodu yükler ve yeniden derlemek yerine veya KQemu'yu çağırmak yerine, bir iş parçacığı ortaya çıkar (bu önemlidir). Iş parçacığı konuk moduna geçmek için KVM çekirdek modülünü çağırır ve VM kodunu yürütmek için devam eder. Ayrıcalıklı bir talimatta, gerekirse, donanım emülasyonunun çoğunu işlemek için Qemu ipliğine işaret eden KVM çekirdek modülüne geri döner.
Bu mimarinin en güzel yanlarından biri, konuk kodunun normal Linux araçlarıyla yönetebileceğiniz bir posix iş parçacığında öykünmesidir. 2 veya 4 çekirdekli bir VM istiyorsanız, kvm-qemu 2 veya 4 iş parçacığı oluşturur, her biri yürütmeye başlamak için KVM çekirdek modülünü çağırır. Eşzamanlılık - eğer yeterli gerçek çekirdeğiniz varsa veya zamanlama - eğer değilse - normal Linux zamanlayıcısı tarafından yönetilir, kodu küçük tutar ve sürprizleri sınırlar.