QEMU (singkatan dari "Quick Emulator") adalah sebuah perangkat lunak emulator dan virtualisasi perangkat keras sumber terbuka dan gratis. QEMU dapat meniru berbagai arsitektur komputer dan menjalankan sistem operasi tamu yang berbeda pada satu mesin fisik.
Sebagai mesin virtual yang di-hosting, QEMU mengemulasi prosesor mesin melalui terjemahan biner dinamis dan menyediakan serangkaian perangkat keras virtual. QEMU dapat menjalankan berbagai sistem operasi tamu, termasuk Linux, Windows, dan macOS. Selain itu, QEMU juga dapat digunakan bersama dengan KVM (Kernel-based Virtual Machine) untuk menjalankan mesin virtual dengan performa yang mendekati perangkat keras asli, dengan memanfaatkan ekstensi perangkat keras seperti Intel VT.
QEMU juga mendukung emulasi tingkat pengguna, yang memungkinkan aplikasi yang dikompilasi untuk satu arsitektur dijalankan pada arsitektur lainnya. [1]
Perizinan
QEMU dikembangkan oleh Fabrice Bellard dan merupakan perangkat lunak gratis, terutama berlisensi di bawah GNU General Public License (GPL untuk pendek). Berbagai bagian dirilis di bawah lisensi BSD, Lisensi Publik Umum GNU GNU (LGPL) atau lisensi lain yang kompatibel dengan GPL.[2]
Mode operasi
QEMU memiliki beberapa mode operasi yaitu:[3]
Emulasi mode pengguna Dalam mode ini, QEMU menjalankan program Linux atau Darwin / macOS tunggal yang dikompilasi untuk rangkaian instruksi yang berbeda. Panggilan sistem di-thunked untuk endianness dan untuk 32/64 bit mismatches. Kompilasi silang yang cepat dan cross-debugging adalah target utama untuk emulasi mode pengguna.
Emulasi sistem Dalam mode ini QEMU mengemulasi sistem komputer lengkap, termasuk periferal. Ini dapat digunakan untuk menyediakan hosting virtual dari beberapa komputer virtual pada satu komputer. QEMU dapat mem-boot banyak sistem operasi tamu, termasuk Linux, Solaris, Microsoft Windows, DOS, dan BSD;[4] mendukung beberapa set instruksi, termasuk x86, MIPS, 32-bit ARMv7, ARMv8, PowerPC, SPARC, ETRAX CRIS dan MicroBlaze.
KVM Hosting = Di sini QEMU berkaitan dengan pengaturan dan migrasi gambar KVM. Ini masih terlibat dalam persaingan perangkat keras, tetapi eksekusi tamu dilakukan oleh KVM seperti yang diminta oleh QEMU.
Xen Hosting QEMU hanya terlibat dalam persaingan perangkat keras; eksekusi tamu dilakukan dalam Xen dan benar-benar tersembunyi dari QEMU.
Fitur
QEMU dapat menyimpan dan memulihkan keadaan mesin virtual dengan semua program yang berjalan. Sistem operasi tamu tidak perlu menambal untuk dijalankan di QEMU.
QEMU mendukung persaingan berbagai arsitektur, termasuk:
Papan pengembangan ARM (Integrator / CP dan Serbaguna / PB)
Papan SH4 SHIX
PowerPC (PReP dan Power Macintosh)
ETRAX CRIS
MicroBlaze
RISC-V
Mesin virtual dapat berinteraksi dengan banyak jenis perangkat fisik host, termasuk hard disk pengguna, drive CD-ROM, kartu jaringan, antarmuka audio, dan perangkat USB. Perangkat USB dapat sepenuhnya diemulasi, atau perangkat USB host dapat digunakan, meskipun ini memerlukan hak istimewa administrator dan tidak berfungsi dengan semua perangkat.
Gambar disk virtual dapat disimpan dalam format khusus (qcow atau qcow2) yang hanya menggunakan ruang disk yang benar-benar digunakan oleh OS tamu. Dengan cara ini, disk 120 GB yang teremulasi dapat menempati hanya beberapa ratus megabyte pada host. Format QCOW2 juga memungkinkan pembuatan gambar overlay yang merekam perbedaan dari file gambar dasar yang lain (tidak dimodifikasi). Ini memberikan kemungkinan untuk mengembalikan isi disk yang ditiru ke keadaan sebelumnya. Sebagai contoh, gambar dasar dapat menyimpan instalasi baru dari sistem operasi yang diketahui berfungsi, dan gambar overlay digunakan. Jika sistem tamu menjadi tidak dapat digunakan (melalui serangan virus, penghancuran sistem yang tidak disengaja, dll.), Pengguna dapat menghapus overlay dan merekonstruksi versi disk image yang diemulasikan sebelumnya.
QEMU dapat meniru kartu jaringan (model yang berbeda) yang berbagi konektivitas sistem host dengan melakukan terjemahan alamat jaringan, secara efektif memungkinkan tamu untuk menggunakan jaringan yang sama sebagai tuan rumah. Kartu jaringan virtual juga dapat terhubung ke kartu jaringan contoh lain QEMU atau ke antarmuka TAP lokal. Konektivitas jaringan juga dapat dicapai dengan menjembatani antarmuka TUN / TAP yang digunakan oleh QEMU dengan antarmuka Ethernet non-virtual pada OS host menggunakan fitur bridging OS host.
QEMU mengintegrasikan beberapa layanan untuk memungkinkan sistem host dan tamu untuk berkomunikasi; misalnya, server SMB terintegrasi dan pengalihan port jaringan (untuk memungkinkan koneksi masuk ke mesin virtual). Itu juga dapat mem-boot kernel Linux tanpa bootloader.
QEMU tidak bergantung pada kehadiran metode output grafis pada sistem host. Sebaliknya, dapat memungkinkan seseorang untuk mengakses layar OS tamu melalui server VNC yang terintegrasi. Ia juga dapat menggunakan saluran serial yang ditiru, tanpa layar apa pun, dengan sistem operasi yang berlaku.
Mensimulasikan beberapa CPU menjalankan SMP dimungkinkan.
QEMU tidak memerlukan hak administratif untuk dijalankan, kecuali modul kernel tambahan untuk meningkatkan kecepatan digunakan (seperti KQEMU), atau ketika beberapa mode dari model konektivitas jaringannya digunakan.
Tiny Code Generator
The Tiny Code Generator (TCG) bertujuan untuk menghapus kekurangan mengandalkan versi tertentu dari GCC atau kompilator, melainkan menggabungkan compiler (generator kode) ke dalam tugas-tugas lain yang dilakukan oleh QEMU pada waktu proses. Oleh karena itu, seluruh tugas penerjemahan terdiri dari dua bagian: blok kode target (TB) yang ditulis ulang dalam ops TCG - sejenis notasi perantara mesin-independen, dan selanjutnya notasi ini dikompilasi untuk arsitektur host oleh TCG. Optimalisasi pengabaian dilakukan di antara mereka.
TCG membutuhkan kode khusus yang ditulis untuk mendukung setiap arsitektur yang dijalankannya. Ini juga mengharuskan terjemahan instruksi target ditulis ulang untuk memanfaatkan ops TCG, bukan ops dingen yang sebelumnya digunakan.
Dimulai dengan QEMU Versi 0.10.0, kapal TCG dengan rilis stabil QEMU.[6]
Akselerator
KQEMU adalah modul kernel Linux, juga ditulis oleh Fabrice Bellard, yang terutama mempercepat emulasi tamu x86 atau x86-64 pada platform dengan arsitektur CPU yang sama. Ini bekerja dengan menjalankan kode mode pengguna (dan secara opsional beberapa kode kernel) secara langsung pada CPU komputer host, dan dengan menggunakan prosesor dan emulasi perifer hanya untuk mode kernel dan kode real-mode. KQEMU dapat mengeksekusi kode dari banyak OS tamu bahkan jika CPU host tidak mendukung virtualisasi hardware-assisted. KQEMU awalnya adalah produk sumber tertutup yang tersedia secara gratis, tetapi mulai dari versi 1.3.0pre10,[7] itu diberikan lisensi di bawah Lisensi Publik Umum GNU. Versi QEMU dimulai dengan 0.12.0 (per Agustus 2009) mendukung memori besar yang membuat mereka tidak kompatibel dengan KQEMU.[8] Rilis QEMU yang lebih baru telah sepenuhnya menghapus dukungan untuk KQEMU.
QVM86 adalah pengganti drop-in berlisensi GNU GPLv2 untuk KQEMU sumber tertutup. Para pengembang QVM86 berhenti pembangunannya pada Januari 2007.
Mesin Virtual berbasis Kernel (KVM) sebagian besar telah diambil alih sebagai solusi virtualisasi hardware-assisted berbasis Linux untuk digunakan dengan QEMU di tengah kurangnya dukungan untuk KQEMU dan QVM86.
Intel Hardware Accelerated Execution Manager (HAXM) adalah alternatif open-source[9] untuk KVM untuk virtualisasi hardware-assisted berbasis x86 pada Windows dan macOS. Pada 2013 Intel kebanyakan meminta penggunaannya dengan QEMU untuk pengembangan Android.[10] Dimulai dengan versi 2.9.0, QEMU resmi termasuk dukungan untuk HAXM.
macOS Universal Disk Image Format (.dmg) - Hanya-baca
Bochs - Hanya Baca
Linux cloop - Hanya Baca
Parallels disk image (.hdd, .hds) - Read-only
QEMU copy-on-write (.qcow2, .qed, .qcow, .cow)
VirtualBox Virtual Disk Image (.vdi)
Virtual PC Virtual Hard Disk (.vhd)
VFAT Virtual
VMware Virtual Machine Disk (.vmdk)
Gambar mentah (.img) yang berisi isi sektor-oleh-sektor dari disk
Gambar CD / DVD (.iso) yang berisi konten sektor-oleh-sektor dari disk optik (misalnya booting OS hidup [12])
Emulasi yang didukung perangkat keras
Prosesor Loongson-3 MIPS yang kompatibel menambahkan 200 instruksi baru untuk membantu QEMU menerjemahkan instruksi x86; instruksi-instruksi baru itu menurunkan overhead mengeksekusi instruksi gaya x86 / CISC dalam pipa MIPS. Dengan peningkatan tambahan di QEMU oleh Chinese Academy of Sciences, Loongson-3 mencapai rata-rata 70% kinerja mengeksekusi binari asli saat menjalankan biner x86 dari sembilan tolak ukur.[13]
Emulasi paralel
Solusi virtualisasi yang menggunakan QEMU dapat menjalankan beberapa CPU virtual secara paralel. Untuk emulasi-emulasi mode pengguna, peta QEMU meniru untaian untuk menghosting untaian. Untuk emulasi sistem penuh, QEMU mampu menjalankan thread host untuk setiap CPU virtual yang teremulasi (vCPU). Ini tergantung pada tamu yang telah diperbarui untuk mendukung emulasi sistem paralel, saat ini ARM, Alpha, HP-PA, PowerPC, RISC-V, dan s390x. Jika tidak, satu utas digunakan untuk meniru semua CPUS virtual (vCPUS) yang mengeksekusi setiap vCPU dengan cara round-robin.
Integrasi
VirtualBox
VirtualBox = VirtualBox, dirilis pada bulan Januari 2007, menggunakan beberapa perangkat keras virtual QEMU, dan memiliki built-in dynamic recompiler berdasarkan QEMU. Seperti halnya KQEMU, VirtualBox menjalankan hampir semua kode tamu secara native pada host melalui VMM (Virtual Machine Manager) dan menggunakan recompiler hanya sebagai mekanisme fallback - misalnya, ketika kode guest dijalankan dalam mode real. [14] Selain itu, VirtualBox melakukan banyak analisis kode dan menambal menggunakan disassembler built-in untuk meminimalkan rekompilasi. VirtualBox gratis dan open-source (tersedia di bawah GPL), kecuali untuk fitur-fitur tertentu.
Xen-HVM = Xen, monitor mesin virtual, dapat dijalankan dalam mode HVM (hardware virtual machine), menggunakan ekstensi virtualisasi x86 perangkat keras Intel VT-x atau AMD-V dan ekstensi virtualisasi Cortex-A7 dan Cortex-A15.[14] Ini berarti bahwa alih-alih perangkat paravirtualized, satu set nyata dari perangkat keras virtual terkena domU untuk menggunakan driver perangkat nyata untuk diajak bicara.
QEMU mencakup beberapa komponen: emulator CPU, perangkat yang diemulasi, perangkat generik, deskripsi mesin, antarmuka pengguna, dan pengawakutu. Perangkat yang diemulasi dan perangkat generik dalam QEMU membuat model perangkatnya untuk virtualisasi I / O.[15] Mereka terdiri dari IDE PIIX3 (dengan beberapa kemampuan PIIX4 yang belum sempurna), Cirrus Logic atau video emulasi VGA polos, emulasi jaringan RTL8139 atau E1000, dan dukungan ACPI.[16] Dukungan APIC disediakan oleh Xen.
Xen-HVM memiliki emulasi perangkat berdasarkan proyek QEMU untuk menyediakan virtualisasi I / O ke VM. Perangkat keras ditiru melalui "daemon model perangkat" QEMU yang berjalan sebagai backend di dom0. Tidak seperti mode menjalankan QEMU lainnya (terjemahan dinamis atau KVM), CPU virtual benar-benar dikelola ke hypervisor, yang mengurus menghentikan mereka sementara QEMU meniru akses I / O yang dipetakan memori.
KVM = KVM (Kernel-based Virtual Machine) adalah modul kernel FreeBSD dan Linux yang memungkinkan akses program ruang pengguna ke fitur virtualisasi perangkat keras dari berbagai prosesor, dengan QEMU yang mampu menawarkan virtualisasi untuk tamu x86, PowerPC, dan S / 390. Ketika arsitektur target sama dengan arsitektur host, QEMU dapat menggunakan fitur khusus KVM, seperti akselerasi.
Win4Lin Pro Desktop= Pada awal tahun 2005, Win4Lin memperkenalkan Win4Lin Pro Desktop, berdasarkan versi 'tuned' QEMU dan KQEMU dan host versi NT Windows. Pada Juni 2006,[17] Win4Lin merilis Win4Lin Virtual Desktop Server berdasarkan basis kode yang sama. Win4Lin Virtual Desktop Server melayani sesi Microsoft Windows ke thin client dari server Linux.
Pada bulan September 2006, Win4Lin mengumumkan perubahan nama perusahaan menjadi Jembatan Virtual dengan merilis Win4BSD Pro Desktop, port produk ke FreeBSD dan PC-BSD. Dukungan Solaris diikuti pada Mei 2007 dengan merilis Win4Solaris Pro Desktop dan Win4Solaris Virtual Desktop Server.[18]
SerialICE= SerialICE adalah perangkat debugging firmware berbasis QEMU yang menjalankan firmware sistem di dalam QEMU saat mengakses perangkat keras nyata melalui koneksi serial ke sistem host. Ini dapat digunakan sebagai pengganti yang murah untuk perangkat keras ICE.[19]
WinUAE= Emulator WinUAE Amiga diperkenalkan pada versi 3.0.0 dukungan untuk papan CyberStorm PPC dan Blizzard 603e menggunakan QEMU PPC inti.[20]
^"HAXM goes open source". QEMU developers. 2017-11-17. Diakses tanggal 2017-01-14. HAXM is now open source
^"Intel Hardware Accelerated Execution Manager". Intel. 2013-11-27. Diakses tanggal 2014-05-12. The Intel Hardware Accelerated Execution Manager (IntelĀ® HAXM) is a hardware-assisted virtualization engine (hypervisor) that uses Intel Virtualization Technology (IntelĀ® VT) to speed up Android app emulation on a host machine.