Prinsip operasi umum QEMU-KVM

Prinsip operasi umum QEMU-KVM

Pemahaman saya saat ini:

1) KVM

KVM (Mesin Virtual berbasis Kernel) adalah hypervisor (VMM – Manajer Mesin Virtual) yang berjalan sebagai modul di OS Linux. Hypervisor diperlukan untuk menjalankan beberapa perangkat lunak di lingkungan yang tidak ada (virtual) dan pada saat yang sama menyembunyikan dari perangkat lunak ini perangkat keras fisik sebenarnya yang menjalankan perangkat lunak ini. Hypervisor bertindak sebagai β€œpengatur jarak” antara perangkat keras fisik (host) dan OS virtual (tamu).

Karena KVM adalah modul standar kernel Linux, ia menerima semua perlengkapan yang diperlukan dari kernel (manajemen memori, penjadwal, dll.). Dan karenanya, pada akhirnya, semua manfaat ini diberikan kepada para tamu (karena para tamu bekerja pada hypervisor yang berjalan di/di kernel OS Linux).

KVM sangat cepat, tapi itu saja tidak cukup untuk menjalankan OS virtual, karena... Ini memerlukan emulasi I/O. Untuk I/O (CPU, disk, jaringan, video, PCI, USB, port serial, dll.) KVM menggunakan QEMU.

2) KEMU

QEMU (Quick Emulator) adalah emulator untuk berbagai perangkat yang memungkinkan Anda menjalankan sistem operasi yang dirancang untuk satu arsitektur di arsitektur lain (misalnya, ARM -> x86). Selain prosesor, QEMU mengemulasi berbagai perangkat periferal: kartu jaringan, HDD, kartu video, PCI, USB, dll.

Ini bekerja seperti ini:

Instruksi/kode biner (misalnya, ARM) diubah menjadi kode perantara yang tidak bergantung pada platform menggunakan konverter TCG (Tiny Code Generator) dan kemudian kode biner yang tidak bergantung pada platform ini diubah menjadi instruksi/kode target (misalnya, x86).

ARM –> kode_perantara –> x86

Pada dasarnya, Anda dapat menjalankan mesin virtual di QEMU di host mana pun, bahkan dengan model prosesor lama yang tidak mendukung Intel VT-x (Intel Virtualization Technology)/AMD SVM (AMD Secure Virtual Machine). Namun, dalam kasus ini, ini akan bekerja sangat lambat, karena fakta bahwa kode biner yang dieksekusi perlu dikompilasi ulang dua kali dengan cepat, menggunakan TCG (TCG adalah kompiler Just-in-Time).

Itu. QEMU sendiri sangat keren, tetapi bekerja sangat lambat.

3) Cincin pelindung

Prinsip operasi umum QEMU-KVM

Kode program biner pada prosesor bekerja karena suatu alasan, tetapi terletak pada level yang berbeda (cincin / Cincin perlindungan) dengan tingkat akses data yang berbeda, dari yang paling istimewa (Ring 0), hingga yang paling terbatas, teregulasi, dan β€œdengan mur yang dikencangkan ” (Dering 3).

Sistem operasi (kernel OS) berjalan pada Ring 0 (mode kernel) dan dapat melakukan apapun yang diinginkan dengan data dan perangkat apa pun. Aplikasi pengguna beroperasi pada level Dering 3 (mode pengguna) dan tidak diperbolehkan melakukan apa pun yang mereka inginkan, melainkan harus meminta akses setiap kali melakukan operasi tertentu (dengan demikian, aplikasi pengguna hanya memiliki akses ke datanya sendiri dan tidak dapat β€œmendapatkan ke dalam” kotak pasir orang lain). Dering 1 dan 2 dimaksudkan untuk digunakan oleh pengemudi.

Sebelum penemuan Intel VT-x / AMD SVM, hypervisor berjalan di Ring 0, dan guest berjalan di Ring 1. Karena Ring 1 tidak memiliki hak yang cukup untuk pengoperasian normal OS, dengan setiap panggilan istimewa dari sistem tamu, maka hypervisor harus mengubah panggilan ini dengan cepat dan menjalankannya pada Dering 0 (seperti yang dilakukan QEMU). Itu. biner tamu TIDAK dieksekusi langsung pada prosesor, dan setiap kali melalui beberapa modifikasi perantara dengan cepat.

Overheadnya signifikan dan ini merupakan masalah besar, dan kemudian produsen prosesor, secara independen satu sama lain, merilis serangkaian instruksi tambahan (Intel VT-x / AMD SVM) yang memungkinkan eksekusi kode OS tamu SECARA LANGSUNG pada prosesor host (melewati langkah perantara yang mahal, seperti yang terjadi sebelumnya).

Dengan munculnya Intel VT-x / AMD SVM, Ring level -1 baru khusus (minus satu) telah dibuat. Dan sekarang hypervisor berjalan di atasnya, dan para tamu berjalan di Ring 0 dan mendapatkan akses istimewa ke CPU.

Itu. pada akhirnya:

  • tuan rumah berjalan di Dering 0
  • tamu bekerja di Dering 0
  • hypervisor berjalan di Ring -1

4) QEMU-KVM

KVM memberi tamu akses ke Ring 0 dan menggunakan QEMU untuk meniru I/O (prosesor, disk, jaringan, video, PCI, USB, port serial, dll. yang β€œdilihat” dan digunakan oleh tamu).

Oleh karena itu QEMU-KVM (atau KVM-QEMU) :)

KREDIT
Gambar untuk menarik perhatian
Gambar cincin Perlindungan

PS Teks artikel ini pertama kali diterbitkan di saluran Telegram @RU_Voip sebagai jawaban atas pertanyaan dari salah satu peserta saluran.

Tulis di komentar jika saya kurang memahami topiknya dengan benar atau jika ada yang ingin ditambahkan.

Terima kasih!

Sumber: www.habr.com

Tambah komentar