Донецкий техникум промышленной автоматики

Дізнайтеся про віртуальній машині ядра Linux (KVM)

  1. Віртуалізація та пара-віртуалізація
  2. Як працює віртуалізація
  3. Малюнок 1. Уровневая модель віртуалізації
  4. гипервизор KVM
  5. KVM
  6. Малюнок 2. Компоненти віртуалізації з KVM
  7. Інсталяція нової гостьової системи
  8. Використання KVM
  9. Лістинг 1. Фрагмент програми для тестування KVM гипервизора
  10. резюме
  11. Ресурси для скачування

Дізнайтеся про архітектуру і переваги KVM

Віртуалізація - це концепція, яка була популярна останнім часом. Коротко - це процес, який полягає в тому, щоб взяти щось і зробити його схожим на щось інше. Застосування цієї концепції до комп'ютерної системи дозволяє різним користувачам бачити одну систему по-різному (наприклад, один і той же комп'ютер працює як під Linux, так і під Microsoft® Windows® одночасно). Це зазвичай називається повною виртуализацией (full virtualization).

У цій статті я говорю KVM, коли маю на увазі Kernel Virtual Machine і kvm, коли маю на увазі утиліту-гипервизор (використовувану для запуску віртуальної машини).

Віртуалізація може також бути більш складною, такою що одиночний комп'ютер може виглядати як множинна архітектура (для одного користувача він буде стандартною платформою x86, для іншого - платформою IBM Power PC®). Ця форма віртуалізації відома як емуляція апаратури (hardware emulation).

Більш проста форма віртуалізації - це віртуалізація операційної системи, в результаті якої одиночний комп'ютер працює з декількома операційними системами одного типу. Цей тип віртуалізації просто ізолює деякі додатки на окремій операційній системі (що означає, що всі повинні використовувати один і той же тип і версію операційної системи). Для отримання додаткової інформації зверніться до ресурсів .

Віртуалізація та пара-віртуалізація

Два основних підходи до віртуалізації - це повна віртуалізація (full virtualization) і пара-віртуалізація (para-virtualization). При повній віртуалізації існує прошарок між віртуалізіруемой операційною системою і апаратурою як спосіб здійснення арбітражу доступу. Цей прошарок називається гіпервізор або монітор віртуальної машини (VMM). Пара-віртуалізація подібна до виртуализацией, але гипервизор працює в більш узгодженому режимі. Це відбувається тому, що кожна гостьова операційна система поінформована про те, що вона працює віртуально, тому кожна з них працює спільно з гіпервізором, для того щоб віртуалізувати базову апаратуру.

Приклади повної віртуалізації - це комерційна реалізація віртуалізації VMware, а також операційна система комерційної IBM System z9 Virtual Machine (z / VM) для комп'ютерів IBM zSeriesВ®. Пара-віртуалізація підтримується Xen і User-Mode-Linux (UML). KVM також розглядається як реалізація повної віртуалізації, але я поясню це пізніше.

Як працює віртуалізація

Давайте почнемо з короткого обговорення віртуалізації і її складових елементів. В основі реалізації віртуалізації лежить машина, яку треба віртуалізувати. Ця машина може підтримувати або не підтримувати віртуалізацію, у другому випадку потрібна підтримка на наступному рівні, званому гипервизор. Гипервизор (або VMM) служить як якась абстракція між апаратною платформою і операційною системою. У деяких випадках гипервизор є операційною системою; в цьому випадку він називається базова операційна система, як показано на малюнку 1 .

Малюнок 1. Уровневая модель віртуалізації
Дізнайтеся про архітектуру і переваги KVM   Віртуалізація - це концепція, яка була популярна останнім часом

Над гіпервізором знаходяться гостьові операційні системи, також звані віртуальними машинами (VM). Ці віртуальні машини представляють собою ізольовані операційні системи, які розглядають базову апаратуру як належить їм. Але насправді гипервизор створює у них цю ілюзію.

Переваги віртуалізаційних платформи настільки великі, що виробники процесорів внесли зміни в кристал, щоб безпосередньо підтримувати віртуалізацію. Це дозволяє процесору підтримувати гипервизор безпосередньо - інакше ніж гостьову операційну систему. До того ж до стану процесора (регістри і т.д.), які управляються по-різному для VMM і VM, процесор підтримує віртуалізацію введення / виведення і переривань. За додатковою інформацією зверніться до ресурсів .

Сьогодні проблема здійснення віртуалізації полягає в тому, що не вся апаратура правильно підтримує віртуалізацію. Більш старі x86 процесори видають різні результати для певних команд в залежності від домену виконання. Це створює проблему, так як гипервизор повинен працювати тільки в найбільш захищеному домені. З цієї причини такі рішення віртуалізації як VMware попередньо сканують код, який слід виконувати, для того щоб замінити існуючі команди пастками, з тим щоб гипервизор міг виконувати їх належним чином. Xen, що підтримує кооперативний метод віртуалізації, не вимагає модифікацій, оскільки гостьова система поінформована про те, що вона працює віртуально і відповідним чином модифікована. KVM просто ігнорує цю проблему і постулює, що якщо ви хочете віртуалізації, то ви повинні працювати на новітньому обладнанні.

Спочатку це здається злегка незграбним, але, беручи до уваги те, що новітні сучасні машини (такі як Intel® VT і AMD SVM) підтримують віртуалізацію, не так вже й довго залишилося чекати того часу, коли це буде нормою, а не винятком. За додатковою інформацією про процесорах, які підтримують віртуалізацію, зверніться до ресурсів і вставці Підтримка віртуалізації процесором .

гипервизор KVM

Беручи до уваги тимчасову шкалу віртуалізаційних техніки, KVM можна вважати відносною новинкою. В даний час існують деякі діючі open source методи, такі як Xen, Bochs, UML, Linux-VServer і coLinux, але KVM отримав дивно широке висвітлення в пресі. Далі, KVM насправді сам по собі не є повною віртуалізаційних схемою, але є шматок більшого технічного рішення.

Підхід, який використовує KVM, полягає в тому, щоб перетворити ядро ​​Linux в гипервизор простий завантаженням модуля ядра. Модуль ядра експортує пристрій, який називається / dev / kvm, яке робить можливим гостьовий режим ядра (до того ж до звичайних режимів ядра і користувачів). З dev / kvm VM має свій власний адресний простір, окреме від адресного простору ядра або будь-яких інших працюючих VM. Пристрої в дереві пристроїв (/ dev) є загальними для всіх призначених для користувача процесів. Але / dev / kvm відрізняється тим, що кожен процес, який його відкриває, бачить іншу карту (для підтримки ізоляції віртуальних машин).

Ви можете знайти исходники KVM в ./linux/drivers/kvm (в V2.6.20 і наступних). Ця директорія містить вихідні файли для KVM, а також файли підтримки процесора для розширень Intel і AMD.

KVM просто перетворює ядро ​​Linux в гипервизор (коли ви інсталюєте модуль ядра kvm). Так як гипервизор є стандартним ядром Linux, він отримує переваги від змін в стандартному ядрі (підтримка пам'яті, планувальник і т.д.). Оптимізація цих компонент Linux (таких як новий O (1) планувальник в ядрі 2.6) дає переваги як Гіпервізор (базова операційна система), так і гостьовою операційною системою Linux. Але KVM - не перша машина, яка робить це. UML вже раніше трансформував ядро ​​Linux в гипервизор. З ядром, що працює як гипервизор, ви можете потім запускати інші операційні системи, такі як інші ядра Linux або Windows.

KVM

Коли KVM інстальований, ви можете запустити операційну систему в просторі користувачів. Кожна гостьова операційна система являє собою окремий процес базової операційної системи (або гипервизора). малюнок 2 показує схему віртуалізації з KVM. В основі лежить апаратна платформа, яка здатна до віртуалізації (в даний час це Intel VT або AMD-SVM процесор). На «голої» апаратурі працює гипервизор (ядро Linux з модулем KVM). Цей гипервизор виглядає точно також як стандартне ядро ​​Linux, на якому ви можете запускати інші програми. Але це ядро ​​може також підтримувати гостьові операційні системи, завантажені з допомогою утиліти kvm. В кінцевому рахунку гостьова операційна система може підтримувати ті ж самі додатки, що і базова операційна система.

Малюнок 2. Компоненти віртуалізації з KVM

Згадаймо, що KVM є частиною вирішення проблеми віртуалізації. Процесор підтримує віртуалізацію (здатність віртуалізувати процесор для безлічі операційних систем). Пам'ять віртуалізується за допомогою kvm (який буде обговорюватися в наступному розділі). І нарешті, система введення / виведення віртуалізується за допомогою злегка модифікованого процесу QEMU (копія якого виконується з кожним процесом гостьовий операційної системи).

KVM вводить новий режим процесів в Linux в існуюче ядро ​​і призначені для користувача режими. Новий режим називається guest і, як підказує його ім'я, використовується для виконання кодів гостьовий операційної системи (або, принаймні, деяких з них). Згадаймо, що режим ядра являє собою привілейований режим виконання кодів, в той час як для користувача режим не є привілейованим (програми, що працюють поза ядра). Тому режими виконання визначаються для різних цілей, в залежності від того, що виконується і з якою метою. Режим guest існує для виконання кодів гостьовий операційної системи, але тільки для кодів, які не є в / в. В рамках режиму guest існують два стандартних режиму, для того щоб гостьова операційна система працювала в режимі guest, але підтримувала стандартні режими: режим ядра і призначений для користувача режим, для свого ядра і додатків простору користувачів. Призначений для користувача режим гостьової операційної системи існує для того, щоб виконувати операції введення / виводу, які управляються незалежно.

Рятувальна операція введення / виводу з гостьової операційної системи забезпечується QEMU. QEMU - це віртуалізаційних платформа, яка дозволяє віртуалізувати все обладнання PC (включаючи диски, графічні адаптери, мережеві пристрої). Будь-які запити введення / виведення, які робить гостьова операційна система, перехоплюються і направляються в призначений для користувача режим для емуляції за допомогою процесу QEMU.

KVM забезпечує віртуалізацію пам'яті за допомогою / dev / kvm. Кожна гостьова операційна система має свій власний адресний простір, яке встановлюється, коли створюється гостьова система. Фізична пам'ять, яка призначається для гостьової операційної системи, є в дійсності віртуальної пам'яттю процесу. Набір тіньових таблиць підтримується для перетворення з гостьових фізичних адрес в реальні фізичні адреси. Процесор також підтримує процес перетворення пам'яті, передаючи управління Гіпервізор (базовому ядру), коли є звернення до нерозподіленого адресою пам'яті.

Інсталяція нової гостьової системи

Інсталяція нової гостьової операційної системи забезпечується утилітою, званої kvm. Ця утиліта працює з модулем kvm, використовуючи / dev / kvm для завантаження гостьової системи, об'єднує її з віртуальним диском (звичайний файл базової операційної системи) і потім завантажує її.

Контроль забезпечується набором ioctl-викликів, які працюють з пристроєм / dev / kvm. Коли файл пристрою відкривається вперше, створюється новий VM об'єкт, який асоціюється з віртуальним процесором. Після цього ви можете використовувати ряд ioctl-викликів для створення віртуального CPU, перевірки версії kvm, створення області пам'яті і потім запуску віртуального CPU. Ви це робите, використовуючи команду kvm. Я розгляну команду kvm і дам приклади деяких підтримуваних викликів в наступному розділі.

Використання KVM

Використовувати KVM насправді дуже просто, якщо ваша апаратура її підтримує. Вам потрібен процесор, який підтримує віртуалізацію: ви можете дізнатися, чи підтримує ваша система віртуалізацію, подивившись в / proc / cpuinfo. Цей файл вказує, чи підтримуються розширення vmx (Intel) або svm (AMD).

Далі вам необхідно ядро ​​Linux з підтримкою KVM. Ви можете це зробити в конфігурації ядра за допомогою Device Drivers> Virtualization. Ви також повинні включити підтримку процесора для вашого обладнання. У вас повинні бути додатки kvm і qemu. За додатковою інформацією зверніться до ресурсів .

Після того як у вас є завантажене ядро ​​з підтримкою віртуалізації, наступним кроком буде створення образу диска для гостьової операційної системи. Зробіть це, використовуючи qeumu-img, як показано нижче. Зверніть увагу на те, що розмір образу 4 ГБ, але при використанні copy-on-write формату QEMU (qcow), файл буде збільшуватися настільки, наскільки необхідно, замість того щоб займати все 4 ГБ.

$ Qemu-img create -f qcow vm-disk.img 4G

Після створення віртуального диска завантажте на нього гостьову операційну систему. У наступному прикладі передбачається, що гостьова операційна система знаходиться на CD-ROM. Крім створення віртуального диска c ISO-образом CD-ROM, ви повинні завантажити цей образ, після того як він зроблений.

$ Kvm -no-acpi -m 384 -cdrom guestos.iso -hda vm-disk.img -boot d

Арі КИВІТ написав ряд тестових програм для тестування KVM, для яких не потрібна повна модель пристрою. Наступний фрагмент коду (from kvm-12 / user / main.c) дає високорівнева огляд запуску VM (дивіться лістинг 1 ). Контроль забезпечується через ioctl ядра (зокрема, в файлі. / Linux-2.6.20 / drivers / kvm / kvm_main.c).

Виклик kvm_init відкриває пристрій / dev / kvm, перевіряє номери версій (експортовані модулем ядра KVM), потім розміщує контекстні об'єкти KVM і заміщає деякі функції зовнішнього виклику. Функція kvm_create встановлює і відображає дві області пам'яті і потім створює віртуальний CPU (VCPU) з ioctl (KVM_CREATE_VCPU).

Потім функція load_file завантажує образ в адресний простір для даної VM, яка потім запускається викликом kvm_run (використовуючи ioctl KVM_RUN). Цей простий процес ілюструє, як ви можете запустити нову гостьову операційну систему за допомогою KVM.

Лістинг 1. Фрагмент програми для тестування KVM гипервизора

int main () {void * vm_mem; kvm = kvm_init (& test_callbacks, 0); if (! kvm) {fprintf (stderr, "kvm_init failed \ n"); return 1; } If (kvm_create (kvm, 128 * 1024 * 1024, & vm_mem) <0) {kvm_finalize (kvm); fprintf (stderr, "kvm_create failed \ n"); return 1; } If (ac> 1) if (strcmp (av [1], "-32")! = 0) load_file (vm_mem + 0xf0000, av [1]); else enter_32 (kvm); if (ac> 2) load_file (vm_mem + 0x100000, av [2]); kvm_show_regs (kvm, 0); kvm_run (kvm, 0); return 0; }

резюме

KVM є цікаве рішення проблеми віртуалізації, а оскільки вона виявилася першою всередині ядра, легко припустити, що незабаром вона буде робити успіхи в віртуалізації серверів. Останнім часом інші методи конкурують за проникнення в ядро ​​(такі як UML і Xen), але оскільки KVM вимагає так мало змін і змогла трансформувати стандартне ядро ​​в гипервизор, абсолютно зрозуміло, чому вибір був зроблений на її користь.

Інша перевага KVM полягає в тому, що оскільки вона сама є частиною ядра, вона може скористатися перевагами від розвитку і оптимізації ядра. Це свідчить про перспективність цього підходу в порівнянні з іншими незалежними реалізаціями гипервизора. Два основних недоліки KVM полягають у тому, що вона вимагає новітніх здатних до віртуалізації процесорів і запуску процесу QEMU в просторі користувача для забезпечення віртуалізації введення / виведення. Але так чи інакше KVM вже в ядрі, що є величезним стрибком вперед у порівнянні з існуючими рішеннями.

Ресурси для скачування

Схожі теми

  • Оригінал цієї статті на developerWorks.
  • Існує безліч способів здійснення віртуалізації, і ви можете дізнатися більше зі статті " Віртуальний Linux ".
  • Деякі компанії, включаючи IBM , Intel і AMD , Створюють апаратуру для віртуалізації. Ви можете подивитися їх сайти для отримання додаткової інформації.
  • Для отримання останніх новин про KVM зверніться до KVM wiki , Який надається Qumranet .
  • Незважаючи на те, що KVM з'явилася зовсім недавно, ви можете знайти кілька статей, в яких досліджується її продуктивність в різних областях. Дві цікаві статті надані Phoronix і KernelNewbies .
  • Ще одна цікава стаття в KernelNewbies виробляє порівняння методів віртуалізації (Включаючи KVM).
  • Планувальник V2.6 Linux був створений Інго Молнаром (Ingo Molnar), щоб домогтися O (1) диспетчеризації. Ви можете прочитати про це за розкладом в статті " Усередині планувальника Linux (Inside the Linux scheduler) ".
  • Метод кооперативної віртуалізації coLinux дозволить вам запускати Linux під Windows.
  • QEMU являє собою open source-емулятор процесора, який забезпечує можливості віртуалізації обладнання PC для KVM.
  • Щоб завантажити необхідні додатки для KVM, зверніться до Debian .
  • В розділі Linux сайту developerWorks знайдіть більше ресурсів для розробників Linux.
  • За допомогою пробного програмного забезпечення IBM , Доступного для завантаження прямо з developerWorks, створіть вашу наступну розробку на Linux.

Підпишіть мене на повідомлення до коментарів