LAKI PINGVINI<>
112015<><>

KVM i Qemu

Hardverska virtuelizacija u okviru Linux kernela

Kada se govori o virtuelizaciji pod Linuxom, gotovo neizostavna tehnologija je KVM (Kernel-based Virtual Machine), originalno nastala kao projekat pod pokroviteljstvom kompanije Red Hat. KVM je realizovan u formi kernelskog modula i sastavni je deo Linux kernela od verzije 2.6.20 (februar 2007). Za KVM se ne može jasno reći ni da predstavlja hipervizor tipa jedan (bare-metal), niti tipa dva (koji se izvršava kao aplikacija iznad operativnog sistema). Sa jedne strane, KVM proširuje Linux kernel i dodaje mu virtuelizacione mogućnosti, čime se sam Linux može tretirati kao bare-metal hipervizor. Sa druge strane, Linux je samostalni operativni sistem na čiju funkcionalnost se KVM ortogonalno naslanja, pa se uslovno može reći da se KVM izvršava „iznad” glavnog operativnog sistema (mada i dalje u njegovom okviru), koristeći već implementirane sistemske funkcije u nedostatku sopstvenih. Donekle se može povući paralela sa hipervizorom Hyper-V u okviru Windows Servera, s tim što se radi o drugačijoj implementaciji koja prevazilazi obim ovog teksta.

Problemi virtuelizacije

Arhitektura x86 procesora tradicionalno je nepogodna za virtuelizaciju iz više razloga. Prvobitno nisu postojale nikakve hardverske ekstenzije koje bi u tome pomogle, jer nije bilo planirano da se x86 koristi u takvom okruženju. Na ovoj arhitekturi, procesorske instrukcije se ne ponašaju isto u različitom kontekstu privilegija: iz bezbednosnih razloga, neke su omogućene samo u supervizorskom režimu rezervisanom za operativni sistem (takozvanom „ring 0”) i ne mogu se koristiti u manje privilegovanim režimima u kojima se izvršavaju korisnički programi. Presretanja ovakvih instrukcija i njihovo emuliranje koristeći instrukcije dostupne u manje privilegovanim režimima rezultuju velikim brzinskim penalima (ova metoda se u mnogim hipervizorima može sresti kao „softversko binarno prevođenje”). To se može sanirati takozvanom paravirtuelizacijom, ali iziskuje modifikaciju „gostujućeg” operativnog sistema koji će se izvršavati u virtuelnoj mašini. Problem nastaje kod vlasničkih operativnih sistema čiji kôd nije otvoren, a autori nisu voljni za dodatan angažman radi podrške za paravirtuelizaciju. Naposletku, CISC priroda x86 arhitekture (veliki skup instrukcija) dodatno komplikuje zamenu instrukcija.

KVM, gde i kako?

Pored x86, KVM je sada implementiran i u kernelima za arhitekture S390, PowerPC, IA64 i ARM64 (na odgovarajućim modelima procesora). Ključna stvar za funkcionisanje KVM-a je postojanje hardverske asistencije za virtuelizaciju u samom procesoru! Kod Intela, ove hardverske ekstenzije zovu se VT-x, a kod AMD-a to je AMD-V. Umesto naziva konkretne implementacije često se koristi uopšteni naziv HVM (Hardware Virtual Machine) kojim se kaže da procesor sadrži proširenje x86 skupa instrukcija namenjeno poboljšanju virtuelizacionih performansi. Iako procesor može sadržati HVM ekstenzije, na pojedinim matičnim pločama ovu mogućnost treba uključiti u podešavanjima BIOS-a. U toku rada Linux sistema, možete proveriti da li postoji i da li je uključena podrška za hardverski asistiranu virtuelizaciju izdavanjem komande

grep -E ’vmx|svm’ /proc/cpuinfo

ili u slučaju da je KVM već instaliran

kvm-ok

HVM ekstenzije suštinski omogućavaju izvršavanje najprivilegovanijih „ring 0” instrukcija u „gostujućem” kontekstu, izolovanom iz bezbednosnih razloga (kako se ne bi narušila stabilnost glavnog operativnog sistema). Ovim je izbegnuta potreba da se „ring 0” instrukcije (koje operativni sistem u gostujućoj virtuelnoj mašini pokušava da izvrši, jer „ne zna” da radi u virtuelizovanim uslovima) presreću i menjaju instrukcijama dostupnim u neprivilegovanom režimu. To kao konačnu posledicu ima drastično ubrzavanje rada virtuelnih mašina.

QEMU i KVM

KVM modul ne vrši emulaciju periferijskog hardvera jedne virtuelne mašine. Ono što KVM obezbeđuje virtuelizatorskim programima jeste drajverski fajl /dev/kvm kojim se pristupa HVM ekstenzijama. Uobičajeno korišćenje KVM-a je u tesnoj vezi sa programom Qemu-kvm. To je nekada bio „fork” QEMU-a, klasičnog emulatora koji se može koristiti i za kompletno hardversko emuliranje ne-x86 arhitektura kao što je ARM. Podrška koja je u međuvremenu razvijena u okviru Qemu-kvm, pre nekoliko godina je migrirana i u glavni projekat QEMU.

Qemu-kvm obezbeđuje kreiranje i podešavanje virtuelne mašine i ulazno-izlaznih uređaja, zatim izvršavanje gostujućeg programskog koda preko kernelskog modula KVM, kao i pomoćne radnje poput migracije virtuelnih mašina i slično. Instalacija se najlakše obavlja iz repozitorijuma Linux distribucije, gde je paket najčešće zaveden pod imenom kvm ili qemu-kvm.

Svakoj pokrenutoj virtuelnoj mašini odgovara jedna instanca procesa Qemu-kvm. Sa stanovišta Linux kernela i njegovog memorijskog upravljača, Qemu-kvm izgleda i ponaša se kao bilo koji drugi proces. Inicijalno, Qemu-kvm otvara drajverski fajl /dev/kvm i preko specijalnih poziva nad ovim fajlom (koristeći sistemski poziv ioctl) šalje signal za kreiranje konteksta virtuelne mašine sa određenim brojem virtuelnih procesora. Potom se pokreće glavna petlja u kojoj Qemu-kvm signalizira kernelskom modulu KVM da izvrši zadate gostujuće instrukcije na virtuelnom procesoru, što predstavlja samo deo posla. Kada gostujući sistem i njegov softver pokušaju da pristupe registrima periferija, ili da zaustave virtuelni procesor do sledećeg interapta (instrukcija halt), KVM vraća kontrolu procesu Qemu-kvm, koji u toj pauzi može emulirati funkcionalnost određene periferije kojoj je sistem pokušao da pristupi (na primer, grafičke kartice ili hard-diska), ili prosto sačekati sledeći interapt u gostujućem sistemu. Ne zaboravimo, Qemu-kvm mora da emulira sve periferije koje virtuelna mašina koristi, tako da KVM predstavlja samo mehanizam za korišćenje virtuelizacionih hardverskih ekstenzija u procesoru, ali veliki deo posla tokom upravljanja i opsluživanja virtuelne mašine leži na programu Qemu-kvm.

Na Linuxu postoji pomoćni skup alatki za lakše upravljanje Qemu-kvm virtuelizatorom, poznat pod imenom libvirt. Radi se o kolekciji softvera koja obezbeđuje alternativni način za upravljanje lokalnim i udaljenim virtuelnim mašinama preko više vrsta virtuelizatora (podržani su i Xen, VMware, VirtualBox i drugi), uključujući upravljanje virtuelizovanim hardverom kao što je skladišteni prostor i mrežni interfejs. Drugačije rečeno, u ovako pojednostavljenom opisu, libvirt predstavlja front-end, dok Qemu-kvm (a ispod njega KVM modul u kernelu) predstavlja back-end sistema. Deo kolekcije libvirt predstavljaju: API biblioteka, servis (daemon) libvirtd i aplikacija virsh za korišćenje iz komandne linije. Na ovaj način, korisnik, osim direktne upotrebe alata specifičnog za konkretan hipervizor (npr. pozivajući Qemu-kvm sa odgovarajućim parametrima iz komandne linije), takođe može indirektno upravljati virtuelnim mašinama koristeći virsh. Za još lakšu upotrebu, postoje i GUI programi (Virt-manager, Virt-clone, Virt-viewer), čime se donekle prevazilazi inicijalno komplikovanije kreiranje i podešavanje u poređenju sa drugim popularnim virtuelizatorima koji podrazumevano nude GUI menadžment.

Ivan TODOROVIĆ

 
KVM i Qemu
Šta mislite o ovom tekstu?
oStorybook 4.10
KPhotoAlbum 4.6.2
QMPlay2 15.10.03

Adresa:
www .linux -kvm .org
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera