Soru KVM ve QEMU arasındaki fark


Hakkında okuyorum KVM ve Qemu belli bir süre için. Şu andan itibaren ne yaptıkları konusunda net bir anlayışa sahibim.

KVM, Konuk İşletim sistemlerine yakın yerel performans sağlamak için donanım sanallaştırmayı destekler. Diğer taraftan QEmu, hedef işletim sistemini öykünür.

Kafam karıştıran şey bu iki koordinatın seviyesi. Sevmek

  1. RAM ve / veya hafızanın paylaşımını kim yönetiyor?
  2. G / Ç işlemlerini kim planlar?

112
2017-12-03 08:42


Menşei




Cevaplar:


qemu:

QEmu, kendi başına eksiksiz ve bağımsız bir yazılımdır. Makineleri taklit etmek için kullanıyorsunuz, çok esnek ve taşınabilir. Esas olarak, belirli bir işlemci için yazılmış ikili kodu başka bir taneye dönüştüren özel bir 'yeniden derleyici' ile çalışır (örneğin, bir PPC macunda MIPS kodunu veya bir x86 PC'de ARM'yi çalıştırmak için).

Sadece işlemciden daha fazlasını taklit etmek için, Qemu, uzun bir periferik emülatör listesi içerir: disk, ağ, VGA, PCI, USB, seri / paralel portlar, vb.

kqemu:

Hem kaynak hem de hedefin aynı mimariye sahip olduğu özel durumda (x86'da x86'daki genel durum gibi), hala 'ayrıcalıklı talimatları' kaldırmak ve bunları içerik anahtarlarıyla değiştirmek için kodu ayrıştırmak zorundadır. X86 Linux üzerinde olabildiğince verimli hale getirmek için, bunu işleyen KQemu adlı bir çekirdek modülü var.

Bir çekirdek modülü olan KQemu, çoğu kodu yalnızca en düşük seviyedeki ring0-only komutlarının yerine değiştirerek, çoğu kodu değiştiremez. Bu durumda, Qemu kullanıcı alanı, taklit edilen makine için hala tüm RAM'i ayırır ve kodu yükler. Fark, kodu yeniden derlemek yerine KQemu’yu taramak / yama / yürütmek için çağırır. Tüm periferik donanım emülasyonu Qemu'da yapılır.

Bu, Qemu'dan çok daha hızlıdır çünkü çoğu kod değişmez, ancak hala ring0 kodunu (VM'nin çekirdeğindeki kodun çoğunu) dönüştürmek zorundadır, bu yüzden performans hala çekicidir.

KVM:

KVM bir kaç şeydir: birincisi, artık ana hatta yer alan ve işlemciyi yeni bir 'misafir' haline getiren bir Linux çekirdek modülüdür. Konuk durumunun kendi halka durumları vardır, ancak ayrıcalıklı ring0 talimatları hiper yönetici koduna geri döner. Yeni bir işlemci yürütme modu olduğundan, kodun herhangi bir şekilde değiştirilmesi gerekmez.

İşlemci durumunun değiştirilmesinden başka, çekirdek modülü ayrıca, MMU kayıtlarının (VM'nin üstesinden gelmek için kullanılan) ve PCI öykünmüş donanımının bazı kısımları gibi emülasyonun birkaç düşük seviyeli bölümünü de ele alır.

İkincisi, KVM Qemu yürütülebilir dosyasının bir çataldır. Her iki takım da farklılıkları en az düzeyde tutmak için aktif olarak çalışır ve bunu azaltmada bazı ilerlemeler vardır. Sonunda amaç, Qemu'nun herhangi bir yerde çalışması gerektiğidir ve eğer bir KVM çekirdek modülü mevcutsa, otomatik olarak kullanılabilir. Ancak, öngörülebilir bir gelecekte, Qemu ekibi donanım öykünmesi ve taşınabilirliği üzerinde odaklanırken, KVM, çekirdek modülüne odaklanır (bazen öykünmenin küçük bölümlerini, performansı artırırsa) ve kullanıcı alanı kodunun geri kalanıyla arabirim oluşturur.

Kvm-qemu çalıştırılabilirliği normal Qemu gibi çalışır: RAM'i ayırır, kodu yükler ve yeniden derlemek yerine veya KQemu'yu çağırmak bir iş parçacığı oluşturur (bu önemlidir). İş parçacığı, KVM çekirdek modülünü konuk moduna geçirir ve VM kodunu yürütmeye devam eder. Ayrıcalıklı bir talimatta, gerektiğinde, donanım emülasyonunun çoğunu işlemek için Qemu parçasını işaret eden KVM çekirdek modülüne geri döner.

Bu mimarinin güzel şeylerinden biri, konuk kodunun normal Linux araçlarıyla yönetebileceğiniz bir posix ipliği içinde taklit edilmesidir. 2 veya 4 çekirdeğe sahip bir VM istiyorsanız, kvm-qemu 2 veya 4 iş parçacığı oluşturur, her biri yürütme işlemini başlatmak için KVM çekirdek modülünü çağırır. Eşzamanlılık - yeterli gerçek çekirdeğe sahipseniz - veya zamanlama - eğer değilse - normal Linux zamanlayıcısı tarafından yönetiliyorsa, kod küçük ve sürprizleri sınırlı tutuyor.


155
2017-12-03 14:40



Ve benim için VT desteği ile CPU'm yok, kötü haber (eğer buna “haber” denilebilirse) - KQEMU artık Ubuntu'da desteklenmiyor. KVM bu destek olmadan CPU ile çalışmıyor. - Hi-Angel


Birlikte çalışırken, KVM CPU'ya ve belleğe erişim hakkına sahiptir ve QEMU donanım kaynaklarını (sabit disk, video, USB vb.) Öykünür. Tek başına çalışırken, QEMU hem CPU hem de donanımı öykünür.


76
2017-12-03 08:46



@ Javier'in cevabı ayrıntılı ve kabul edilen bir ders olmalı, ama cevabınız bana tam olarak bilmem gereken birkaç cümle vermeyi başardı, bu yüzden +1 ve teşekkürler. - Bill The Ape


QEMU daha yavaştır ve KVM, sistem için en iyi performansı sağlamak için QEMU'ya çok hızlı bir donanım hızı sağlamak için yardımcı olur. QEMU hipervizör / Emulator.


-1
2017-11-14 10:58