Virtualisointi

VirtualBox

Virtualisointi tarkoittaa tietotekniikassa tekniikkaa virtuaalisen laitteen suorittamiseksi erotettuna varsinaisesta fyysisestä laitteesta.[1] Virtuaalinen laite on abstraktio varsinaisesta laitteesta.[1][2] Virtualisoinnissa fyysisen resurssin tekniset piirteet piilotetaan muilta järjestelmiltä, sovelluksilta ja loppukäyttäjiltä, jotka käyttävät näitä resursseja. Täten yksi fyysinen resurssi (kuten palvelin, suoritin tai massamuisti) voi toimia monena loogisena resurssina, tai useat fyysiset resurssit (kuten tallennuslaitteet tai palvelimet) näkyvät yhtenä loogisena resurssina. Tätä uutta virtuaalista näkymää taustalla oleviin resursseihin ei rajoita niiden toteutus, maantieteellisen sijainti tai fyysinen konfigurointi. Useimmin virtualisoituja resursseja ovat laskenta- ja tallennuskapasiteetti.

Virtualisointi on syntynyt 1960- ja 1970-luvuilla, jolloin määritelmällä viitattiin menetelmään jakaa suurtietokoneet loogisesti useiden sovellusten käyttöön samanaikaisesti.[3] Termin merkitys on laajentunut siitä lähtien.[3]

1960-luvulla IBM:n tutkimuskeskus kehitti CP/CMS:n, jossa CP oli hypervisor-komponentti ja CMS oli kevyt yhden käyttäjän käyttöjärjestelmä. CP/CMS kehittyi useiksi versioiksi 1960- ja 1970-lukujen vaihteessa. CP/CMS vaikutti VM/370:n kehitykseen (nykyisin z/VM), joka julkaistiin 2. elokuuta 1972.[4][5][6]

Vuonna 1974 Gerald J. Popek ja Robert P. Goldberg julkaisivat artikkelin Formal requirements for virtualizable third generation architectures, jossa kuvattiin vaatimuksia virtualisointiin.[7] Popekin ja Goldbergin kriteerit viittaavat klassisena virtualisointina tai täytenä virtualisointina tunnettuun malliin, jossa suoritettavaa ohjelmaa ei tunneta etukäteen.[8]

Virtualisointitapoja

[muokkaa | muokkaa wikitekstiä]

Virtualisointi on laaja termi, joka viittaa moniin eri tapoihin tehdä tietojenkäsittelyn resursseista abstrakteja. Alla on listattu joitakin yleisimpiä virtualisointitekniikoita.

Sovellusten virtualisointi

[muokkaa | muokkaa wikitekstiä]

Termiä virtuaalikone on käytetty Java-virtuaalikoneesta ja Microsoftin .NET-ympäristön Common Language Runtime-ympäristöstä, joissa ohjelma tehdään abstraktille koneelle ja käännetään kohdekoneelle ajonaikaisella kääntämisellä (tavukoodin tai välikielen kautta).

Koneiden ja järjestelmien virtualisointi

[muokkaa | muokkaa wikitekstiä]

Hypervisor (myös virtual machine monitor, VMM[9], virtuaalikonemonitori) on virtuaalikoneen suorittamiseen käytetty ohjelmistokerros.[2] Nämä jaetaan kahteen tyyppiin: suoraan laitteistolla suoritettava (tyyppi 1) ja toisen käyttöjärjestelmän päällä suoritettava (tyyppi 2).[2] Tyyppi 1 suoritetaan suoraan tietokonelaitteistolla ja ne ovat tehokkaita sekä turvallisia koska mitään muuta ei suoriteta sen ja laitteiston välillä.[10] Tyyppi 1 korvaa tietokoneen käyttöjärjestelmän ja soveltuu palvelinkäyttöön, mutta usein tarvitsee toisen koneen virtuaalikoneiden hallintaan.[10] Tyyppi 2 suoritetaan sovellusohjelmana toisen käyttöjärjestelmän päällä ja usein käytössä henkilökohtaisella tietokoneella, jossa on tarve suorittaa useampia käyttöjärjestelmiä.[10] Tyyppi 2 mahdollistaa nopean pääsyn toiseen käyttöjärjestelmään, joka tekee siitä soveltuvan loppukäyttäjälle, mutta se käyttää laitteistoa toisen käyttöjärjestelmän kautta, joka lisää viiveitä (latenssi) ja vaikuttaa suorituskykyyn.[10]

Tietokoneen virtualisointi voidaan jakaa edelleen seuraavasti:[11]

  • täysi virtualisointi (muokkaamaton vieraskäyttöjärjestelmä)
  • paravirtualisointi (muutoksia vieraskäyttöjärjestelmään)
  • yhdistelmä (erikoistuneet laiteajurit)
  • käyttöjärjestelmätason virtualisointi (säiliöinti)

Täysi virtualisointi sallii toisen käyttöjärjestelmän suorittamisen ilman muokkauksia eristettynä vieraskäyttöjärjestelmäksi.[11] Täysi virtualisointi voi käyttää ohjelmistoapua tai laitteistoapua: ohjelmistoavusteinen tarkoittaa binäärin käännöstä ohjelmallisesti tiettyjen käskyjen käsittelyssä kun taas laitteistoavusteinen käyttää suorittimeen integroituja toimintoja näiden käskyjen suorittamiseen.[11]

Käyttöjärjestelmän muuttamista virtualisoinnille kutsutaan paravirtualisoinniksi, jota tukevat muun muassa Xen ja User-mode Linux.[12] Paravirtualisoinnissa vieraskäyttöjärjestelmä vaatii laajennuksia hypervisorin kutsumiseen.[11]

Yhdistelmässä isäntäkäyttöjärjestelmä käyttää laitteistoavustusta täydelle virtualisoinnille ja vieraskäyttöjärjestelmä käyttää laiteajureita tietyille laitteille paravirtualisoinnin tapaan.[11] Laitteistopohjaisen tuen lisääntyessä suorittimien käskykantalaajennoksilla erot ovat hämärtyneet.[12]

Eri hypervisor-ratkaisut voivat tukea käynnissä olevan virtuaalikoneen siirtoa isännältä toiselle (live migration) tai sisäkkäisiä virtuaalikoneita (nested).[13][14] Failover ("puolenvaihto") tarkoittaa suorituksen siirtämistä yhdestä virtuaalikoneesta toiseen suunnitellusti tai vikatilanteessa.[15]

x86-käskykanta ennen vuotta 2005 ei tue Popekin ja Goldbergin esittämiä vaatimuksia virtualisoinnille koska käskykannassa on joukko käskyjä, jotka eivät täytä virtualisointivaatimuksia.[16][17] VMware esitti vuonna 1998 ohjelmistoratkaisun tiettyjen x86-käskyjen kohdalla, jolloin VMM:n toteutus tuli mahdolliseksi.[17][18] Intel VT-x ja AMD-V (2005 ja 2006) lisäävät käskykantaan ominaisuudet, joilla laitteisto tukee Popekin ja Goldbergin esittämiä vaatimuksia virtualisoinnille.[17] Eräät muut suoritinarkkitehtuurit täyttävät nämä vaatimukset (IBM S/370, Motorola 68010 ja uudemmat, PowerPC sekä eräät muut).[17]

Säiliöinti on käyttöjärjestelmätason virtualisointi (kevyt prosessitason virtualisointi), jolla tehdään virtuaaliympäristöjä (engl. virtual environment, VE).[19] Docker vaikutti merkittävästi tämän suosioon ja yleistymiseen.[20][21]

Emulaattorit on suunniteltu suorittamaan eri suorittimelle tehtyjä ohjelmia toisella laitteistoalustalla, kun taas virtualisointi voi käyttää laitteen omaa käskykantaa ja laitteistoa.[22][23] Emulaatio tulkitsee vierasalustan käskykannan mahdollistaen suorittamisen eri suorittimella.[23]

Laiteresurssien virtualisointi

[muokkaa | muokkaa wikitekstiä]

Yksi tavallisimmista virtualisointikohteista käyttöjärjestelmissä on muisti, jota laajennetaan virtuaalimuistin avulla. Käyttöjärjestelmä osaa vapauttaa tai siirtää käyttämätöntä muistia RAM-muistista kiintolevylle. Tallennuskapasiteetti voidaan virtualisoida muun muassa verkkolevyjärjestelmillä (hajautettu levyjärjestelmä, jaettu levyjärjestelmä) ja taltiohallinnalla.

Yhdistelemällä laiteresursseja suuremmiksi kokonaisuuksiksi voidaan muodostaa laajempia resursseja tai resurssipooleja. Esimerkiksi RAID-levyjärjestelmät ja loogisten taltioiden hallintajärjestelmät (LVM, Logical Volume Management) yhdistelevät useita levyjärjestelmiä yhdeksi suureksi loogiseksi levytilaksi. Verkkolaitteet voivat käyttää useita rinnakkaisia kanavia, ja antaa vaikutelman yhdestä laajempikaistaisesta yhteydestä. Pisimmälle vietynä tietokoneryppäät eli klusterit toteuttavat kaiken tämän.

Verkon virtualisointi

[muokkaa | muokkaa wikitekstiä]

Virtuaaliverkko on kyky luoda loogisia virtuaalisia verkkoja, jota ovat eriytetty verkkolaitteistosta.[24]

Työpöydän virtualisointi

[muokkaa | muokkaa wikitekstiä]

Työpöydän virtualisoinnista puhutaan useiden etäkäyttöratkaisujen yhteydessä kuten: VNC, RDP, Linux Terminal Server Project ja X Window System. Etäkäyttöön liittyy läheisesti hajautettu tietojenkäsittely.

Eräät yritykset tarjoavat palveluita ja ohjelmistoja työpöydän siirtämiseksi datakeskukseen (VDI).[25]

Hypervisor-pohjaisia virtualisointiohjelmia ovat muun muassa:

Data virtualisointi

[muokkaa | muokkaa wikitekstiä]

Data virtualisointi on lähestymistapa tietojen keräämiseksi yhdestä kerroksesta useista lähteistä niin, että sovellukset, raportointityökalut ja loppukäyttäjät voivat käyttää tietoja ilman alkuperäislähteen, sijainnin ja tietorakenteiden yksityiskohtia.[26]

  1. a b What is virtualization? opensource.com. Viitattu 6.3.2020. (englanniksi)
  2. a b c What is virtualization? ibm.com. Viitattu 6.3.2020. (englanniksi)
  3. a b Graziano, Charles: A performance analysis of Xen and KVM hypervisors for hosting the Xen Worlds Project dr.lib.iastate.edu. 1.1.2011. doi:10.31274/etd-180810-2322 Viitattu 9.10.2022. (englanniksi)
  4. z/VM – A Brief Review of Its 40 Year History (PDF) 2012. IBM. Viitattu 17.8.2019. (englanniksi)
  5. Virtual Machines cis.temple.edu. Viitattu 9.10.2022. (englanniksi)
  6. Liam Proven: Before the PC: IBM invents virtualisation (sivu 2) theregister.com. 14.7.2011. Arkistoitu 31.8.2023. Viitattu 31.8.2023. (englanniksi)
  7. Gerald J. Popek & Robert P. Goldberg: Formal requirements for virtualizable third generation architectures dl.acm.org. 1.7.1974. doi:10.1145/361011.361073 Viitattu 9.10.2022. (englanniksi)
  8. Formal virtualization requirements for the ARM architecture biblio.ugent.be. Viitattu 9.10.2022. (englanniksi)
  9. Amit Shah: Ten years of KVM lwn.net. 2.11.2016. Viitattu 5.3.2020. (englanniksi)
  10. a b c d Hypervisors ibm.com. 8.5.2019. Viitattu 11.9.2020. (englanniksi)
  11. a b c d e Para virtualization vs Full virtualization vs Hardware assisted Virtualization unixarena.com. 11.12.2017. Viitattu 1.10.2020. (englanniksi)
  12. a b Irfan Habib: Virtualization with KVM linuxjournal.com. 1.2.2008. Viitattu 5.3.2020. (englanniksi)
  13. Migration linux-kvm.org. Viitattu 15.10.2022. (englanniksi)
  14. Orit Wasserman: Nested virtualization: shadow turtles (PDF) linux-kvm.org. 2013. Viitattu 15.10.2022. (englanniksi)
  15. Michael Bose: VM Failover Guide nakivo.com. 23.7.2018. Viitattu 15.10.2022. (englanniksi)
  16. John Scott Robin & Cynthia E. Irvine: Analysis of the Intel Pentium’s Ability to Support a Secure Virtual Machine Monitor (PDF) usenix.org. elokuu 2000. Viitattu 10.10.2022. (englanniksi)
  17. a b c d Dave Eckhardt: Virtualization (PDF) cs.cmu.edu. Viitattu 10.10.2022. (englanniksi)
  18. Luca Abeni: Virtual Machine Monitors (PDF) retis.sssup.it. 13.6.2019. Viitattu 10.10.2022. (englanniksi)
  19. Rami Rosen: Linux Containers and the Future Cloud (PDF) haifux.org. Viitattu 4.3.2020. (englanniksi)
  20. What is Docker and why is it so darn popular? 21.3.2018. ZDNet. Viitattu 6.3.2020. (englanniksi)
  21. Docker 101: What it is and why it’s important 10.6.2014. NetworkWorld. Viitattu 6.3.2020. (englanniksi)
  22. Chapter 1. Introduction to Bochs bochs.sourceforge.net. Viitattu 20.1.2020. (englanniksi)
  23. a b M. Tim Jones: Platform emulation with Bochs ibm.com. 25.1.2011. Viitattu 20.1.2020. (englanniksi)
  24. What is Network Virtualization? - Definition sdxcentral.com. 26.8.2013. Viitattu 6.3.2020. (englanniksi)
  25. HP VDI Moves to Center Stage zdnet.com. 19.8.2011. Viitattu 6.3.2020. (englanniksi)
  26. What is Data Virtualization? www.datawerks.com. Arkistoitu 10.4.2018. Viitattu 11.4.2018. (englanti)