Objavljeno: 24.12.2005 05:00 | Avtor: Gorazd Golob | Monitor December 2005

Xen 2.0

Xen ali, daljše, Xen virtual machine monitor je nastal kot del projekta XenoServers na angleški univerzi Cambridge. Pri projektu XenoServe je Xen osnovni gradnik za izgradnjo distribuiranega računskega omrežja. Je eden izmed delov tega projekta, ki so resnično zaživeli in dobili dobršen del podpore odprtokodne skupnosti, zelo pa ga podpira tudi bolj komercialna sfera.

Navidezno več ali eden

Podjetje XenSource uživa podporo večjih IT podjetij - Novell/Suse, IBM in HP, katerih interes je seveda stabilnejša in učinkovitejša virtualizacija na strojni opremi x86 in x86_64. Procesorji iz tega rodu seveda niso zadnja postaja. Podpora Itaniumu je skoraj že končana, poteka pa še razvoj za procesorje ARM in PowerPC.

V zadnjem času prihajajo pozivi s strani podjetja RedHat, naj se Xen čim prej vključi v linuxovsko jedro. Po besedah vzdrževalca trenutne različice jedra 2.6, Andrewa Mortona, je to načrtovano že nekaj časa in vključitev xenovske kode v glavno drevo jedra lahko pričakujemo v prihajajočih mesecih. Trenutna različica Xena pa je že vključena v novejše različice distribucije Suse in posledično tudi v jedro te distribucije.

Prihajajoča različica 3.0 naj še ne bi podpirala novih dodatkov procesorjev Intel z imenom Intel VT-x in AMDjevih Pacifica, temveč so načrtovani za prihodnost. Ti dodatni nabori v procesorjih bodo zagotavljali boljšo virtualizacijo strojne opreme, kar je bilo do zdaj na strojni opremi x86 in x86_64 neznanka.

V eni prejšnjih številk smo se že dotaknili virtualizacije na operacijskem sistem GNU/Linux ob pomoči načina UML ali User Mode Linux. Ker ta način ne omogoča popolne virtualizacije za resnejšo uporabo, je Xen precej boljša izbira, ki je bolje načrtovana za natančno te namene in še več. Trenutna različica Xen 2.0 omogoča marsikaj, kar ponujajo dosedanji komercialni izdelki, ali pa se primerja s funkcionalnostjo, omogočeno znotraj določenih sodobnih operacijskih sistemov, kot je npr. Solaris s svojimi conami. Z različico Xen 2.0 je mogoče zaganjati linuxovska jedra različic 2.4, 2.6, FreeBSD in NetBSD. Za ljubitelje eksotike pa je v pripravi prirejeni operacijski sistem Plan9.

Xen se naloži kot osnovni upraviteljski sistem s prirejenim jedrom in operacijskih sistemom GNU/Linux. Znotraj tega upravljamo druge gostujoče operacijske sisteme. Pri Xenu se moramo zavedati, da ne gre za klasično virtualizacijo, kot to počnejo komercialni izdelki, kot sta VMware ali Microsoftov VirtualPC. Ti navadno programsko posnemajo strojno opremo in gostujoči operacijski sistem tako nima popolnega stika s strojno opremo. Pri Xenu gre za tako imenovano paravirtualizacijo, kjer gostujoči operacijski sistem komunicira skoraj neposredno s strojno opremo. V tem načinu je izkoristek zelo blizu 99 % in virtualizacija skoraj ne prinaša zmanjšanja zmogljivosti. Bodoči uporabnik se seveda mora zavedati, da se pri slabo načrtovani souporabi strojne opreme lahko vse skupaj klavrno konča, če gre za aplikacije z intenzivno vhodno-izhodno akivnostjo, kjer nastanejo ozka grla na ravni zunanjih pomnilniških enot.

Priprava na namestitev

Predpogoj za namestitev je računalnik z enim ali več procesorji tipa x86 ali novejših 64-bitnih različic, ki jih ponujata podjetji Intel in AMD. Tu lahko opozorim na lastno slabo izkušnjo: ko sem poizkušal Xen namestiti v sistemu s procesorjem podjetja Via, je bil zagon jedra Xen nemogoč. Procesor sicer ima oznako "686", nima pa nabora ukazov CMOV. Trenutni procesorji (M10000 in novejši) podjetja Via pa so popolnoma podprti in delujejo enakovredno svojim bolj segrevajočim se bratom konkurenčnih podjetij.

Za preizkus osnovnega delovanja bo dovolj računalnik z 256 MB delovnega pomnilnika in nekaj diska, ki bo gostoval še kak sistem poleg gostiteljskega. Če bi se kdo želel zelo na hitro spoznati z delovanjem Xena, je morda najboljša izbira kar brezplačna različica distribucije Suse, vendar članek ne pokriva te tematike. Ko ste namestili svojo priljubljeno distribucijo Linuxa (lahko je tudi vaša obstoječa namestitev) na razdelek diska, se lahko lotite dela. Sveže nameščeni sistem bo rabil kot gostiteljski in upravljavski sistem za druge gostujoče sisteme v računalniku. Jedro tega sistema bo nadomeščeno s xenovskim jedrom in prirejenim linuxovskim jedrom.

S spletne strani www.xensource.com/downloads si prenesemo poljubno distribucijo paketa. Na voljo so binarni in paketi z izvirno kodo. Članek opisuje namestitev paketa z izvirno kodo. Pri binarnem paketu imamo nekoliko bolj zvezane roke glede sprememb jedra.

Paket xen-2.0.7-src.tgz razpakiramo v imenik /usr/src. Najprej preverimo, ali imamo v sistemu vse potrebne knjižnice in programe za delovanje. Potrebni so iproute2, bridge-utils in Twisted (tega zelo enostavno namestimo iz razpakiranega imenika xen-2.0.7 z ukazom make install-twisted - pogoj je seveda dostop do medmrežja). Za izgradnjo paketov bomo jasno potrebovali prevajalnik gcc, paket binutil, make in še razvojno različico knjižnic curl, zlib ter razvojni paket vsaj za python 2.2. Vsa pripradajoča dokumentacija je v Latexu - za uporabo le-te je zaželen nameščen Tex, a ni pogoj za uporabo.

Opozoriti še velja, da se Xen lahko naloži samo ob pomoči zagonskega nalagalnika GRUB, Lilo in drugi niso podprti. Če vaša distribucija ne uporablja GRUBa, še ne vrzite puške v koruzo, saj je zamenjava obstoječega zagonskega nalagalnika z GRUBom več kot enostavna. Za prenos paketa in navodila za namestitev se napotite na www.gnu.org/software/grub/.

V sistemu je priporočljivo imeti izvirno kodo linuxovskega jedra, ki bo uporabljeno za prirejeno jedro gostiteljskega in gostujočih sistemov. Različica 2.0.7 potrebuje jedro 2.6.11, nestabilna 3.0 pa je prirejena trenutno za delo z jedrom 2.6.12.

Zdaj je v sistemu vse potrebno za začetek prevajanja kode. Kot superuporabnik v mapi /usr/src/xen-2.0.7 zaženemo ukaz

# make world

Ta ukaz zažene prav vse stopnje prevajanja - xenovsko jedro, upraviteljska orodja, prilagodi linuxovsko jedro (ki smo ga postavili v paketu v /usr/src ali ga pretoči sam iz datotečnega strežnika ftp.kernel.org) in prevede jedro za gostiteljski sistem - tega Xen imenuje "Domain 0" ali "domena 0" ali kar "XenLinux" - ter jedro za gostujoči neprivilegirani sistem. Slednji je manjši, saj nima gonilnikov za delo s strojno opremo. Prevajanje na procesorju s hitrostjo okoli 3 Ghz bo vzelo le nekaj minut. Ko se zgornji ukaz izvede brez napak, smo pripravljeni za namestitev:

# make install

Ukaz izvede namestitev upraviteljskih orodij v mape /usr/sbin in druge ter kopiranje jeder in dodatnih datotek v mapo /boot/. V datoteko grub.conf oziroma menu.lst (navadno je le simbolična povezava na /etc, ena od teh pa je fizično v mapi /boot/grub) moramo dodati nov vnos, ki ima parametre in pot do novega jedra:

title Xen

kernel /boot/xen-2.0.gz dom0_mem=65536

module /boot/vmlinuz-2.6-xen0 root=/dev/hda1ro console=tty0

S prvim parametrom določimo pot do jedra xen, drugi določi količino delovnega pomnilnika za domeno 0 oz. XenLinux. Parameter module pove jedru Xen, katero linuxovsko jedro se bo uporabljalo za gostiteljski sistem, na kateri napravi je korenski imenik sistema, kako naj ga priklopi (pozneje se dostop "ro" spremeni v "rw" - v določenem delu inita), in, za konec, katero vhodno-izhodno enoto naj uporabi za konzolo. Tu je seveda mogoče določiti tudi zaporedni vmesnik (za kar je treba še prilagoditi zaporedno konzolo v datoteki inittab). Pred vnovičnim zagonom je treba še deaktivirati tls (Thread Local Storage) z ukazom

# mv /lib/tls /lib/tls.disabled

Tako smo pripravljeni na vnovični zagon sistema z novim jedrom. Večini uporabnikov se bo sistem zagnal brezhibno. Tistim pa, ki bi želeli jedro še nastaviti po svoje, je namenjen naslednji del članka.

Jedro se ne naloži!

Vrli razvijalci Xena so kar posplošili konfiguracijo jedra za gostiteljski sistem. Tako seveda sploh ni nujno, da bo ta način popolnoma ustrezal vsej širni populaciji s še tako eksotično strojno opremo. Treba bo izvesti nekaj prilagoditev konfiguracije jedra, pregledati, ali so vključeni gonilniki za našo strojno opremo, in podobno. Prekaljeni mački, kar zadeva konfiguracijo jedra, boste pomanjkljivosti hitro našli, drugi pa boste potrebovali nekaj sreče. Gostiteljski sistem naložimo s starim jedrom in se napotimo v mapo /usr/src/xen-2.0.7/linux-2.6.11-xen0. Tu smo dolžni dati dodatno obrazložitev - zadnji znak v tem nizu je lahko 0 ali U. 0 pomeni drevo izvirne kode jedra za domeno 0, U pa za neprivilegirano jedro oz. tisto, ki ga uporabljajo gostujoči sistemi.

V prej omenjeni mapi - /usr/src/xen-2.0.7/linux-2.6.11-xen0 zaženemo ukaz za konfiguracijo jedra:

# make ARCH=xen menuconfig (ali kakšno drugo varianto - xconfig ali samo config)

nato sledi novo prevajanje:

# make ARCH=xen

in

# make ARCH=xen install

Ta bo prekopiral potrebne datoteke jedra v mapo /boot z istimi imeni. Za tem smo pripravljeni na nov poizkus vnovičnega zagona z novim jedrom. Kot rečeno, ta napotek ne pride v poštev samo v primeru neuspešnega zagona jedra, temveč tudi, če želimo jedru dodati nove zmogljivosti, kot je npr. ocfs2 ali drbd, ki lahko zelo pomagajo pri skupnih diskovnih poljih gostujočih operacijskih sistemov.

Dodajmo še kakšen navidezni sistem

Izhodišče za ta del je uspešno naloženo jedro Xen in jedro domene 0. Pripravljeni smo za nalaganje navideznih sistemov oziroma domen. Za poenostavljeno namestitev novega sistema si pripravimo dodaten prostor na disku - pripravimo si dodatni razdelek ali datotečni sistem v datoteki. Če imamo dovolj prostora za nov razdelek, se velja odločiti za to možnost, če pa to ni mogoče, si z orodjem dd pripravimo prazno datoteko primerne velikosti in v njej ustvarimo datotečni sistem:

# dd if=/dev/zero of=fs.img bs=1k count=1000000 (za velikost 1gb)

# mkfs.ext3 fs.img

Datoteko priklopimo k datotečnemu sistemu z ukazom:

# mount fs.img /mnt/poljubno_mesto -o loop

ali pa po podobnem postopku pripravimo prazni razdelek na disku in ga sformatiramo.

Sem lahko prekopiramo vitalne mape našega gostiteljskega sistema ali pa vanj razpakiramo kakšno že pripravljeno distribucijo. Možna je tudi namestitev operacijskega sistema v novo nastali razdelek. Po uporabi disk oziroma datoteko z datotečnim sistemom odklopimo iz datotečnega sistema.

Ko je novi sistem pripravljen, se lahko lotimo konfiguracije in končno zagona. Predpogoj je še zagon servisa xend, ki upravlja neprivilegirane domene:

# xend start

Sledi priprava datoteke xm, v kateri opišemo navidezni sistem (lahko jo prepišemo iz katerega od primerov v /etc/xen). Po dokumentaciji projekta Xen naj datoteka vsebuje vsaj te parametre:

# novsistem

# pot do neprivilegiranega jedra

kernel = "/boot/vmlinuz-2.6-xenU"

# velikost delovnega pomnilnika v MB

memory = 64

# ime sistema - ne sme vsebovati presledkov

name = "novsistem"

# število omrežnih vmesnikov

nics = 1

# pot do diska - sestavljena iz treh parametrov -

# poti na strani gostitelja file:/pot/do/fs.img ali če gre za fizični pogon phy:/dev/hda3,

# poti na strani gostujočega sistema

# način dostopa do tega sistema

disk = ['file:/pot/do/fs.img,hda1.w']

# kje je korenski imenik tega sistema

root = "/dev/hda1 ro"

Dodatnih parametrov je še več in zadevajo predvsem konfiguracije omrežja in razporejanje računskega časa med domenami. Med zanimivejšimi velja omeniti parameter cpu, s katerim lahko pri večprocesorskih računalnikih določimo, na katerem procesorju se bo virtualni sistem izvajal. Po zgoraj navedenih parametrih se pričakuje, da bo naslov ip omrežnega vmesnika gostujočega sistema nastavljen v njem samem. Ker Xenova omrežna podpora deluje na ravni omrežnega mostu, mora biti naslov ip znotraj omrežja gostiteljskega sistema.

Narejeno opisno datoteko navideznega sistema oziroma domeno uporabimo z ukazom:

# xm create /etc/xen/novsistem -c

Parameter -c pove, naj se konzola nove domene prikaže na obstoječem terminalu. To seveda ni nujno, saj imamo lahko do konzole gostujočega sistema vedno dostop z ukazom:

# xm console novsistem

ali pa:

# xencons localhost <številka vrat>

kjer številko vrat izvemo z ukazom:

# xm list

Številka vrat je v bistvu oznaka vrat tcp, ki so na voljo v krajevnem gostiteljevem omrežnem vmesniku.

Kot smo lahko ugotovili, nam program xm ponuja upravljanje domen. V članku ne bomo omenjali vseh, vendar lahko s pregledom navodil ugotovimo, da je mogoče izvajati prav vse, od ustavljanja, uspavanja in shranjevanja pomnilnika deluče domene do njenega vnovičnega zagona iz ustavljenega stanja, kjer sistema ni treba na sveže nalagati. Xen 2.0 prinaša programu xm ukaz "migrate", kjer je mogoče stanje domene migrirati iz enega gostiteljskega sistema v drugega v nekaj stotisočinkah sekunde. Predpogoj za tako delovanje sistema je seveda diskovno polje obeh gostiteljev.

S tem lahko sklenemo strogo tehnični del članka, saj se potrebe in pričakovanja, ki jih imamo v zvezi s Xenom, od tu naprej zelo razlikujejo.

Namesto konca

Tistim, ki ste vešči uporabe orodij in programja za virtualizacijo, se je najverjetneje že porodila kakšna zamisel o zamenjavi dosedanjega programja. Eden izmed negativnih dejavnikov uporabe Xena je vsekakor potreba po prirejenem jedru operacijskega sistema, ki ne omogoča zagona komercialnih operacijskih sistemov iz Microsoftove družine. Tistim, ki se pri svojem delu opirate na odprtokodne rešitve, pa je stvar pisana na kožo. Pri "komercialnih" distribucijah GNU/Linux v slogu RHEL se bo morda nekoliko zataknilo pri prirejanju in prevanju jedra, a če velja verjeti napovedim, je Xen na zanesljivi poti, da postane del prav vseh distribucij GNU/Linux z vključitvijo v jedro. Glede na to, da je virtualizacija na voljo zastonj in učinkoviteje kot pri komercialnih rešitvah za osebne računalnike, je skoraj nemogoče reči, da se ne izplača vsake GNU/Linux namestitve lotiti s Xenom. Xen ne ovira, če je navzoč, hkrati pa je tako vedno na voljo.

Xen 2.0 z grafičnim izhodom iz več domen.

Shema sistema z nameščenim Xenom.

Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!

Komentirajo lahko le prijavljeni uporabniki

 
  • Polja označena z * je potrebno obvezno izpolniti
  • Pošlji