Prinsip umum pengoperasian QEMU-KVM

gambar

Pemahaman saya saat ini:

1) KVM


KVM (Mesin Virtual berbasis Kernel) - hypervisor (VMM - Virtual Machine Manager), beroperasi sebagai modul pada OS Linux. Hypervisor diperlukan untuk menjalankan beberapa perangkat lunak dalam lingkungan (virtual) yang tidak ada dan pada saat yang sama, menyembunyikan dari perangkat lunak ini perangkat keras fisik nyata tempat perangkat lunak ini bekerja. Hypervisor bertindak sebagai "strip" antara perangkat keras fisik (host) dan OS virtual (tamu).

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

KVM sangat cepat, tetapi itu saja tidak cukup untuk menjalankan OS virtual, karena ini membutuhkan emulasi I / O. Untuk I / O (prosesor, drive, jaringan, video, PCI, USB, port serial, dll.) KVM menggunakan QEMU.

2) QEMU


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

Ini berfungsi seperti ini:

Instruksi / kode biner (misalnya, ARM) dikonversi menjadi kode platform-independen menengah menggunakan konverter TCG (Tiny Code Generator), dan kemudian kode biner independen platform ini dikonversi ke instruksi / kode target (misalnya, x86).

ARM -> middleware -> x86

Bahkan, Anda dapat menjalankan mesin virtual pada QEMU pada host mana pun, bahkan dengan model prosesor lama yang tidak mendukung Intel VT-x (Teknologi Virtualisasi Intel) / AMD SVM (AMD Secure Virtual Machine). Namun, dalam kasus ini, ini akan bekerja sangat lambat, karena fakta bahwa biner harus dikompilasi ulang dua kali menggunakan TCG (TCG adalah kompiler Just-in-Time).

Yaitu QEMU sendiri adalah mega cool, tetapi kerjanya sangat lambat.

3) Cincin perlindungan


gambar

Kode program biner pada prosesor tidak berfungsi begitu saja, tetapi terletak di tingkat yang berbeda (Cincin perlindungan) dengan berbagai tingkat akses ke data, dari yang paling istimewa (Cincin 0), hingga yang paling terbatas, diatur secara berlebihan, dan "dengan kacang yang dikencangkan" (Cincin 3). )

Sistem operasi (OS kernel) berjalan pada Dering 0 (mode kernel) dan dapat melakukan apa saja dengan data dan perangkat apa pun. Aplikasi pengguna beroperasi pada level Ring 3 (mode pengguna) dan tidak memiliki hak untuk melakukan apa pun yang mereka inginkan, tetapi sebaliknya setiap kali harus meminta akses untuk melakukan operasi (dengan cara ini, aplikasi pengguna hanya memiliki akses ke data mereka sendiri dan tidak dapat "Masuk ke" kotak pasir orang lain "). Cincin 1 dan 2 dimaksudkan untuk digunakan oleh pengemudi.

Sebelum penemuan Intel VT-x / AMD SVM, hypervisor bekerja pada Ring 0, dan tamu bekerja pada Ring 1. Karena Ring 1 tidak memiliki hak yang cukup untuk operasi normal OS, maka dengan setiap panggilan istimewa dari sistem tamu, hypervisor harus memodifikasi panggilan ini dengan cepat dan jalankan di Ring 0 (sesuatu seperti QEMU lakukan). Yaitu kode biner tamu TIDAK dijalankan langsung pada prosesor, dan setiap kali on the fly ada beberapa modifikasi menengah.

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

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

Yaitu sebagai hasilnya:

  • host berjalan di Ring 0
  • tamu bekerja di Ring 0
  • hypervisor berjalan di Ring -1

4) QEMU-KVM


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

Maka dari itu QEMU-KVM (atau KVM-QEMU) :)

KREDIT
Gambar untuk menarik perhatian
Picture Protection berdering

PS Teks dari artikel ini awalnya diterbitkan di saluran Telegram @RU_Voip sebagai jawaban untuk pertanyaan salah satu peserta saluran.

Tuliskan di komentar di tempat-tempat yang saya tidak mengerti topik dengan benar atau jika ada sesuatu untuk melengkapi.

Terima kasih

Source: https://habr.com/ru/post/id466549/


All Articles