Pertanyaan Perbedaan antara KVM dan QEMU


Saya telah membaca tentang KVM dan Qemu untuk beberapa waktu. Sampai sekarang saya memiliki pemahaman yang jelas tentang apa yang mereka lakukan.

KVM mendukung virtualisasi perangkat keras untuk menyediakan kinerja asli dekat ke sistem operasi Guest. Di sisi lain QEmu mengemulasi sistem operasi target.

Yang membuat saya bingung adalah pada tingkat apa kedua koordinasi ini. Seperti

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

111
2017-12-03 08:42






Jawaban:


Qemu:

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

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

KQemu:

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

Menjadi modul kernel, KQemu mampu mengeksekusi sebagian besar kode tidak berubah, menggantikan hanya instruksi ring0-level terendah. Dalam hal ini, userspace Qemu masih mengalokasikan semua RAM untuk mesin yang diemulasi, dan memuat kode. Perbedaannya adalah bahwa alih-alih mengkompilasi ulang kode, ia memanggil KQemu untuk memindai / menambal / menjalankannya. Semua emulasi perangkat keras periferal dilakukan di 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 'negara tamu' baru. Negara tamu memiliki kumpulan negara cincinnya sendiri, tetapi instruksi ring0 istimewa jatuh kembali ke kode hypervisor. Karena ini adalah mode eksekusi prosesor baru, kode tersebut tidak harus dimodifikasi dengan cara apa pun.

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

Kedua, KVM adalah garpu dari Qemu yang dapat dieksekusi. Kedua tim bekerja secara aktif untuk menjaga perbedaan minimal, dan ada kemajuan dalam menguranginya. Akhirnya, tujuannya adalah agar Qemu dapat berfungsi di mana saja, dan jika modul kernel KVM tersedia, itu bisa digunakan secara otomatis. Tetapi untuk masa mendatang, tim Qemu berfokus pada emulasi perangkat keras dan portabilitas, sementara orang-orang KVM fokus pada modul kernel (kadang-kadang memindahkan bagian 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, ia memunculkan sebuah utas (ini penting). Thread memanggil modul kernel KVM untuk beralih ke mode tamu dan melanjutkan untuk menjalankan kode VM. Pada instruksi istimewa, ia beralih kembali ke modul kernel KVM, yang, jika perlu, memberi sinyal pada rangkaian Qemu untuk menangani sebagian besar emulasi perangkat keras.

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


153
2017-12-03 14:40



Dan untuk thouse 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 berfungsi dengan CPU tanpa dukungan itu. - Hi-Angel


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


76
2017-12-03 08:46



Jawaban @ Javier adalah detail dan harus diterima, tentu saja, tetapi jawaban Anda berhasil memberi saya beberapa kalimat persis apa yang perlu saya ketahui, jadi +1 dan terima kasih. - Bill The Ape


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


-1
2017-11-14 10:58