![]() | ![]() |
![]() |
| ![]() |
| |||||||||||||
Hardverska virtuelizacija u okviru Linux kernela
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?
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Ć |
| |||||||||||||||
![]()
|
![]() | |
![]() | ![]() |
Home / Novi broj | Arhiva • Opšte teme | Internet | Test drive | Test run | PD kutak | CeDeteka | WWW vodič • Svet igara Svet kompjutera Copyright © 1984-2018. Politika a.d. • Redakcija | Kontakt | Saradnja | Oglasi | Pretplata • Help • English | |
SKWeb 3.22 |