Perbedaan antara KVM dan QEMU


138

Saya telah membaca tentang KVMdan Qemuselama beberapa waktu. Sampai sekarang saya memiliki pemahaman yang jelas tentang apa yang mereka lakukan.

KVM mendukung virtualisasi perangkat keras untuk memberikan kinerja mendekati asli ke sistem Operasi Tamu. Di sisi lain QEmu mengemulasi sistem operasi target.

Yang saya bingung adalah pada level apa keduanya berkoordinasi. Suka

  1. Siapa yang mengelola pembagian RAM dan / atau memori?
  2. Siapa yang menjadwalkan operasi I / O?

Jawaban:


194

Qemu :

QEmu adalah perangkat lunak yang lengkap dan mandiri. Anda menggunakannya untuk meniru mesin, sangat fleksibel dan portabel. Terutama ini bekerja oleh 'recompiler' khusus yang mengubah kode biner yang ditulis untuk prosesor yang diberikan menjadi yang lain (katakanlah, untuk menjalankan kode MIPS pada mac PPC, atau ARM di PC x86).

Untuk meniru lebih dari sekadar prosesor, Qemu menyertakan daftar panjang emulator periferal: disk, jaringan, VGA, PCI, USB, port serial / paralel, dll.

KQemu :

Dalam kasus khusus di mana kedua sumber dan target adalah arsitektur yang sama (seperti kasus umum x86 pada x86), ia masih harus mengurai kode untuk menghapus 'instruksi istimewa' dan menggantinya dengan sakelar konteks. Untuk membuatnya seefisien mungkin di Linux x86, ada modul kernel bernama KQemu yang menangani ini.

Menjadi modul kernel, KQemu mampu mengeksekusi sebagian besar kode tidak berubah, menggantikan hanya instruksi ring0-only level terendah. Dalam hal itu, userspace Qemu masih mengalokasikan semua RAM untuk mesin yang ditiru, dan memuat kode. Perbedaannya adalah bahwa alih-alih mengkompilasi ulang kode, ia memanggil KQemu untuk memindai / menambal / menjalankannya. Semua emulasi perangkat keras periferal dilakukan dalam Qemu.

Ini jauh lebih cepat daripada Qemu biasa karena sebagian besar kode tidak berubah, tetapi masih harus mengubah kode ring0 (sebagian besar kode di kernel VM), sehingga kinerja masih menderita.

KVM :

KVM adalah beberapa hal: pertama adalah modul kernel Linux — sekarang termasuk dalam arus utama — yang mengubah prosesor menjadi keadaan 'tamu' baru. Status tamu memiliki rangkaian status dering sendiri, tetapi instruksi ring0 yang istimewa jatuh kembali ke kode hypervisor. Karena ini adalah mode eksekusi prosesor yang baru, kode tidak perlu dimodifikasi dengan cara apa pun.

Terlepas dari pengalihan status prosesor, modul kernel juga menangani beberapa bagian emulasi tingkat rendah seperti register MMU (digunakan untuk menangani VM) dan beberapa bagian dari perangkat keras emulasi PCI.

Kedua, KVM adalah cabang dari Qemu yang dapat dieksekusi. Kedua tim bekerja aktif untuk menjaga perbedaan minimal, dan ada kemajuan dalam menguranginya. Akhirnya, tujuannya adalah bahwa Qemu harus bekerja di mana saja, dan jika modul kernel KVM tersedia, itu bisa digunakan secara otomatis. Tetapi untuk masa yang akan datang, tim Qemu berfokus pada emulasi perangkat keras dan portabilitas, sementara orang-orang KVM fokus pada modul kernel (kadang-kadang memindahkan sebagian kecil dari emulasi di sana, jika itu meningkatkan kinerja), dan berinteraksi dengan sisa kode userspace.

Eksekusi kvm-qemu berfungsi seperti Qemu normal: mengalokasikan RAM, memuat kode, dan alih-alih mengkompilasi ulang, atau memanggil KQemu, itu menumbuhkan utas (ini penting). Utas memanggil modul kernel KVM untuk beralih ke mode tamu dan melanjutkan untuk mengeksekusi kode VM. Pada instruksi khusus, ia beralih kembali ke modul kernel KVM, yang, jika perlu, memberi sinyal utas Qemu untuk menangani sebagian besar emulasi perangkat keras.

Salah satu hal yang menyenangkan dari arsitektur ini adalah bahwa kode tamu ditiru dalam posix thread yang dapat Anda kelola dengan alat Linux normal. Jika Anda menginginkan VM dengan 2 atau 4 core, kvm-qemu membuat 2 atau 4 utas, masing-masing dari mereka memanggil modul kernel KVM untuk mulai menjalankan. Konkurensi — jika Anda memiliki cukup inti nyata — atau penjadwalan — jika tidak — dikelola oleh penjadwal Linux normal, menjaga kode tetap kecil dan kejutan terbatas.


3
Dan bagi mereka yang seperti saya tidak memiliki CPU dengan dukungan VT, berita buruk (yah, jika itu bisa disebut «berita») - KQEMU tidak lagi didukung di Ubuntu . KVM tidak bekerja dengan CPU tanpa dukungan itu.
Hi-Angel

100

Ketika bekerja bersama, KVM melakukan arbitrase akses ke CPU dan memori, dan QEMU mengemulasi sumber daya perangkat keras (hard disk, video, USB, dll.). Saat bekerja sendiri, QEMU mengemulasi CPU dan perangkat keras.


9
@ Javier menjawab secara terperinci dan seharusnya yang diterima tentu saja, tetapi jawaban Anda berhasil memberi saya dalam beberapa kalimat persis apa yang perlu saya ketahui, jadi +1 dan terima kasih.
Bill The Ape

-2

QEMU lebih lambat dan KVM ada untuk membantu QEMU mencapai kecepatan perangkat keras yang sangat cepat untuk memberikan kinerja terbaik bagi sistem. QEMU adalah hypervisor / Emulator.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.