Prinsip operasi am QEMU-KVM

Prinsip operasi am QEMU-KVM

Pemahaman saya sekarang:

1) KVM

KVM (Mesin Maya berasaskan Kernel) ialah hypervisor (VMM – Pengurus Mesin Maya) yang berjalan sebagai modul pada OS Linux. Hipervisor diperlukan untuk menjalankan beberapa perisian dalam persekitaran yang tidak wujud (maya) dan pada masa yang sama menyembunyikan daripada perisian ini perkakasan fizikal sebenar di mana perisian ini berjalan. Hipervisor bertindak sebagai "spacer" antara perkakasan fizikal (hos) dan OS maya (tetamu).

Memandangkan KVM ialah modul standard kernel Linux, ia menerima semua barangan yang diperlukan daripada kernel (pengurusan memori, penjadual, dll.). Dan sewajarnya, pada akhirnya, semua faedah ini diberikan kepada tetamu (memandangkan tetamu bekerja pada hypervisor yang berjalan pada/dalam kernel OS Linux).

KVM sangat pantas, tetapi dengan sendirinya ia tidak mencukupi untuk menjalankan OS maya, kerana... Ini memerlukan emulasi I/O. Untuk I/O (CPU, cakera, rangkaian, video, PCI, USB, port bersiri, dll.) KVM menggunakan QEMU.

2) QEMU

QEMU (Quick Emulator) ialah emulator untuk pelbagai peranti yang membolehkan anda menjalankan sistem pengendalian yang direka untuk satu seni bina pada yang lain (contohnya, ARM -> x86). Sebagai tambahan kepada pemproses, QEMU meniru pelbagai peranti persisian: kad rangkaian, HDD, kad video, PCI, USB, dll.

Ia berfungsi seperti ini:

Arahan/kod binari (contohnya, ARM) ditukar kepada kod bebas platform perantaraan menggunakan penukar TCG (Tiny Code Generator) dan kemudian kod binari bebas platform ini ditukar kepada arahan/kod sasaran (contohnya, x86).

ARM -> kod_perantaraan -> x86

Pada asasnya, anda boleh menjalankan mesin maya pada QEMU pada mana-mana hos, walaupun dengan model pemproses lama yang tidak menyokong Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Walau bagaimanapun, dalam kes ini, ia akan berfungsi dengan sangat perlahan, disebabkan hakikat bahawa kod binari pelaksana perlu disusun semula dengan cepat dua kali, menggunakan TCG (TCG ialah pengkompil Just-in-Time).

Itu. QEMU sendiri sangat hebat, tetapi ia berfungsi dengan sangat perlahan.

3) Cincin perlindungan

Prinsip operasi am QEMU-KVM

Kod program binari pada pemproses berfungsi atas sebab tertentu, tetapi terletak pada tahap yang berbeza (cincin / Cincin perlindungan) dengan tahap akses data yang berbeza, daripada yang paling istimewa (Ring 0), kepada yang paling terhad, dikawal dan "dengan kacang diketatkan ” (Cincin 3).

Sistem pengendalian (kernel OS) berjalan pada Ring 0 (mod kernel) dan boleh melakukan apa sahaja yang dikehendaki dengan mana-mana data dan peranti. Aplikasi pengguna beroperasi pada tahap Ring 3 (mod pengguna) dan tidak dibenarkan melakukan apa sahaja yang mereka mahu, sebaliknya mesti meminta akses setiap kali untuk melaksanakan operasi tertentu (oleh itu, aplikasi pengguna hanya mempunyai akses kepada data mereka sendiri dan tidak boleh "mendapatkan ke dalam” kotak pasir orang lain). Cincin 1 dan 2 bertujuan untuk digunakan oleh pemandu.

Sebelum penciptaan Intel VT-x / AMD SVM, hypervisor dijalankan pada Ring 0, dan tetamu berlari pada Ring 1. Memandangkan Ring 1 tidak mempunyai hak yang mencukupi untuk operasi biasa OS, dengan setiap panggilan istimewa daripada sistem tetamu, hypervisor terpaksa mengubah suai panggilan ini dengan cepat dan melaksanakannya pada Ring 0 (sama seperti yang dilakukan QEMU). Itu. binari tetamu TIDAK telah dilaksanakan secara langsung pada pemproses, dan setiap kali melalui beberapa pengubahsuaian perantaraan dengan cepat.

Overhed adalah penting dan ini merupakan masalah besar, dan kemudian pengeluar pemproses, secara berasingan antara satu sama lain, mengeluarkan set arahan lanjutan (Intel VT-x / AMD SVM) yang membenarkan melaksanakan kod OS tetamu SECARA LANGSUNG pada pemproses hos (memintas sebarang langkah perantaraan yang mahal, seperti yang berlaku sebelum ini).

Dengan kemunculan Intel VT-x / AMD SVM, tahap Ring baharu khas -1 (tolak satu) telah dicipta. Dan kini hypervisor berjalan padanya, dan tetamu berjalan pada Ring 0 dan mendapat akses istimewa kepada CPU.

Itu. akhirnya:

  • hos berjalan pada Ring 0
  • tetamu bekerja di Ring 0
  • hypervisor berjalan pada Ring -1

4) QEMU-KVM

KVM memberikan tetamu akses kepada Dering 0 dan menggunakan QEMU untuk meniru I/O (pemproses, cakera, rangkaian, video, PCI, USB, port bersiri, dsb. yang tetamu "lihat" dan bekerja dengannya).

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

KREDIT
Gambar untuk menarik perhatian
Gambar cincin Perlindungan

P.S. Teks artikel ini pada asalnya diterbitkan dalam saluran Telegram @RU_Voip sebagai jawapan kepada soalan salah seorang peserta saluran.

Tulis dalam komen di mana saya tidak faham topik dengan betul atau jika ada apa-apa untuk ditambah.

Thank you!

Sumber: www.habr.com

Tambah komen