• Digitaaliset tarvikkeet
  • Palvelin
  • Digitaalinen elämä
  • Tietosuojakäytäntö
  • Ota meihin yhteyttä
  1. Home
  2. Article
  3. Hyper-V:n virtuaalisuorittimet selitetty - Altaro

Hyper-V:n virtuaalisuorittimet selitetty - Altaro

Rsdaa 13/01/2022 1915

Onko ohjelmistotoimittajasi ilmoittanut, että voit virtualisoida heidän sovelluksensa, mutta vain, jos omistat siihen yhden tai useamman suorittimen ytimen? Etkö tiedä, mitä tapahtuu, kun määrität suorittimia virtuaalikoneen? Et ole kaukana yksin.

Huomaa: Tämä artikkeli julkaistiin alun perin helmikuussa 2014. Se on päivitetty täysin ajankohtaiseksi marraskuussa 2019.

Esittely virtuaalisiin prosessoreihin

Kuten muitakaan virtuaalikoneen "laitteistoja", virtuaalisia suorittimia ei ole olemassa. Hypervisor käyttää fyysisen isännän todellisia suorittimia luodakseen virtuaalisia rakenteita esitettäväksi virtuaalikoneen. Hypervisor hallitsee pääsyä todellisiin prosessoreihin aivan kuten se ohjaa pääsyä kaikkiin muihin laitteisiin.

Hyper-V ei koskaan määritä fyysisiä prosessoreita tietyille virtuaalikoneen

Varmista, että ymmärrät tämän osan, ennen kuin jatkat. Kahden vCPU:n määrittäminen järjestelmään ei tarkoita, että Hyper-V poimii kaksi ydintä fyysisestä poolista ja liittää ne pysyvästi virtuaalikoneeseesi. Et voi määrittää fyysistä ydintä virtuaalikoneelle ollenkaan. Tarkoittaako tämä siis sitä, että et vain pysty täyttämään toimittajan pyyntöä omistaa ydin tai kaksi? No ei aivan. Siitä lisää loppupuolella.

Käyttöjärjestelmän prosessorin ajoituksen ymmärtäminen

Aloita tämä tarkastelemalla, miten suorittimia käytetään tavallisessa Windowsissa. Tässä on kuva Task Manager -näytöstäni:

Tehtävienhallinta

Ei mitään hienoa, eikö niin? Näyttää tutulta, eikö?

Nyt, kun tietokoneita ei koskaan tai tuskin koskaan toimitettu usean suorittimen moniytimisinä laatikoina, tiesimme kaikki, että tietokoneet eivät todellakaan voi suorittaa moniajoja. Niissä oli yksi CPU ja yksi ydin, joten siellä oli vain yksi mahdollinen aktiivinen suoritussäie. Mutta hienojen graafisten päivitysten lisäksi Task Manager näytti silloin melko paljon Task Managerilta nyt. Sinulla oli pitkä luettelo käynnissä olevista prosesseista, joista jokaisessa oli mittari, joka osoittaa, kuinka monta prosenttia suorittimien ajasta se käytti.

Sitten, kuten nyt, jokainen näkemäsi rivikohta edustaa prosessia (tai uusimmissa Task Manager -versioissa uutta prosessiryhmää). Prosessi koostuu yhdestä tai useammasta säikeestä. Säie ei ole muuta kuin CPU-käskyjen sarja (avainsana: sekvenssi).

Tapahtuu, että (Windowsissa tämä alkoi 95:ssä ja NT:ssä) käyttöjärjestelmä pysäyttää käynnissä olevan säikeen, säilyttää tilan ja aloittaa sitten uuden säikeen. Hetken kuluttua se toistaa nämä toiminnot seuraavalle säikeelle. Kutsumme tätä ennaltaehkäiseväksi, mikä tarkoittaa, että käyttöjärjestelmä päättää, milloin nykyinen säiettä keskeytetään ja vaihdetaan toiseen. Voit asettaa prioriteetteja, jotka vaikuttavat prosessin nopeuteen, mutta käyttöjärjestelmä on vastuussa säikeiden ajoituksesta.

Nykyään melkein kaikissa tietokoneissa on useita ytimiä, joten Windows voi todella suorittaa monia tehtäviä.

Näiden käsitteiden vieminen hypervisorille

Säikeen hallinnan roolinsa vuoksi Windowsia voidaan kutsua "supervisoriksi" (hyvin vanha terminologia, jota et todellakaan enää näe): prosesseja hallitseva järjestelmä jotka koostuvat langoista. Hyper-V on hypervisor: järjestelmä, joka hallinnoi valvojia, jotka hallitsevat säikeistä koostuvia prosesseja.

Task Manager ei toimi samalla tavalla Hyper-V:ssä, mutta sama asia jatkuu. Siellä on luettelo osioista, ja niiden sisällä on prosesseja ja säikeitä. Säikeen ajoitus toimii suunnilleen samalla tavalla, jotakuinkin näin:

Hypervisor-ketjun ajoitus

Tietenkin todellisessa järjestelmässä on aina käynnissä yli yhdeksän säiettä. Säikeen ajoitus asettaa ne kaikki jonoon.

Entä suorittimen affinity?

Tiedät todennäköisesti, että voit yhdistää säikeet Windowsissa niin, että ne toimivat aina tietyssä ytimessä tai ydinjoukossa. Et voi tehdä sitä Hyper-V:ssä. Näin tekemällä olisi joka tapauksessa kyseenalainen arvo; säikeen omistaminen ytimelle ei ole sama asia kuin ytimen omistaminen säikeelle, mitä monet ihmiset todella haluavat yrittää tehdä. Et voi estää ydintä suorittamasta muita säikeitä Windows- tai Hyper-V-maailmassa.

Miten säikeen ajoitus toimii?

Yksinkertaisin vastaus on, että Hyper-V tekee päätöksen hypervisor-tasolla. Se ei todellakaan anna vieraiden osallistua asiaan. Vieraskäyttöjärjestelmät ajoittavat säikeet omistamistaan ​​prosesseista. Kun he valitsevat suoritettavan säikeen, he lähettävät sen virtuaaliselle CPU:lle. Hyper-V ottaa sen sieltä.

Yllä esittämäni kuva on väistämättä liiallinen yksinkertaistus, koska se ei ole yksinkertaista ensinnäkin ulos. NUMA:lla on rooli esimerkiksi. Tämän aiheen ymmärtäminen vaatii melko syvällistä sukellusta joihinkin monimutkaisiin ajatuksiin. Harvat järjestelmänvalvojat vaativat tällaista syvyyttä, ja sen tutkiminen täällä vie tämän artikkelin kauas.

Ensimmäinen asia, jolla on merkitystä: affiniteettia lukuun ottamatta, et koskaan tiedä, missä jokin tietty säie suoritetaan. Säie, joka keskeytettiin antamaan CPU-aikaa toiselle säikeelle, voidaan hyvin hyvin osoittaa toiselle ytimelle, kun sitä jatketaan. Oletko koskaan miettinyt, miksi sovellus kuluttaa 50 % kaksiytimisjärjestelmästä ja jokainen ydin näyttää toimivan 50 %:lla? Tämä käyttäytyminen viittaa yksisäikeiseen sovellukseen. Joka kerta kun ajastin suorittaa sen, se kuluttaa 100 % ytimestä, johon se laskeutuu. Seuraavan kerran kun se suoritetaan, se pysyy samassa ytimessä tai siirtyy toiseen ytimeen. Riippumatta siitä, mihin ytimeen ajoittaja sen määrittää, se kuluttaa 100%. Kun Task Manager kokoaa suorituskykynsä näyttöä varten, se on jopa 50 % käyttöaste – sovellus käyttää 100 % 50 % järjestelmän kapasiteetista. Koska ydin, joka ei käytä sovellusta, pysyy enimmäkseen käyttämättömänä, kun taas toinen ydin on huipussaan, niiden kumulatiivinen käyttöaste on 50 % mitatulla ajanjaksolla. Tehtävienhallinnan uudempien versioiden ominaisuuksien avulla voit nyt ohjeistaa sen näyttämään erilliset ytimet yksitellen, mikä tekee tästä käytöksestä paljon ilmeisemmän.

Nyt voimme siirtyä tarkastelemaan järjestelmälle määritettyjen vCPU:iden määrää ja prioriteettia.

Mitä virtuaalikoneelle määritettyjen vCPU:iden määrä todella tarkoittaa?

Huomaa ensin, että et voi määrittää virtuaalikoneen enempää vCPU:ita kuin isännässäsi on loogisia prosessoreita.

Virheellinen suorittimen määrä

Joten virtuaalikoneen vCPU-määrä tarkoittaa tätä: säikeiden enimmäismäärää, jonka virtuaalikoneen voi ajaa kulloinkin. En voi asettaa kuvakaappauksen virtuaalikonetta käyttämään enemmän kuin kahta vCPU:ta, koska isännässä on vain kaksi loogista prosessoria. Siksi kolmatta säiettä ei ole aikataulutettu. Mutta jos minulla olisi 24-ytiminen järjestelmä ja jättäisin tämän virtuaalikoneen kahdelle vCPU:lle, se lähettäisi Hyper-V:lle enintään kaksi säiettä ajoitusta varten. Virtuaalikoneen säikeiden ajoittaja (valvoja) pitää muut säikeensä jonossa odottaen vuoroaan.

Mutta enkö voi määrittää kaikille virtuaalikoneille enemmän yhteensä vCPU:ita kuin fyysisiä ytimiä?

Kyllä, kaikkien virtuaalikoneiden vCPU:iden kokonaismäärä voi ylittää isäntäkoneen fyysisten ytimien määrän. Se ei eroa siitä, että kaksiytimisessä kannettavassani on tällä hetkellä käynnissä yli 40 prosessia. Voin ajaa vain kahta säiettä kerrallaan, mutta ajoitan aina enemmän kuin kaksi säiettä. Windows on tehnyt tätä jo pitkään, ja Windows on siinä niin hyvä (yleensä), että useimmat ihmiset eivät koskaan näe tarvetta miettiä, mitä tapahtuu. Virtuaalikoneenne (valvojat) kuplittavat säikeitä suoritettavaksi, ja Hyper-V (hypervisor) ajoittaa ne (useimmiten) samalla tavalla kuin Windows on ajoittanut ne siitä lähtien, kun se on ohittanut yhteistoiminnallisen ajoituksen Windows 3.x:ssä.

Mikä on oikea vCPU:n suhde pCPU:iin/ytimiin?

Tämä on kysymys, joka on kaikkien mielessä. Sanon sinulle suoraan: yleisessä mielessä tähän kysymykseen ei ole vastausta.

Toki, kauan sitten, ihmiset sanoivat 1:1. Jotkut sanovat niin vielä tänäkin päivänä. Ja tiedät, voit tehdä sen. Se on turhaa, mutta voit tehdä sen. Voisin käyttää nykyistä työpöytäkokoonpanoani neljän 16 ytimen palvelimella, enkä koskaan joutuisi kiistoihin. Mutta en luultavasti näkisi paljon suorituskyvyn eroa. Miksi? Koska melkein kaikki langani ovat käyttämättömänä melkein koko ajan. Jos jokin tarvitsee 0 % CPU-aikaa, mitä sille oman ytimen antaminen tekee? Ei mitään, se on sitä.

Myöhemmin vastaus päivitettiin 8 vCPU:ksi yhtä fyysistä ydintä kohti. Ok, tottakai, hyvä.

Sitten siitä tuli 12.

Ja sitten suositukset katosivat.

He lähtivät pois, koska kenelläkään ei ole aavistustakaan. Ajastin jakaa säikeet tasaisesti käytettävissä olevien ytimien kesken. Tarvittavien fyysisten suorittimien määrä ei siis riipu siitä, kuinka monta virtuaalista suoritinta on. Se riippuu täysin siitä, mitä käyttösäikeet tarvitsevat. Ja vaikka sinulla olisikin kasa raskaita lankoja, se ei tarkoita, että niiden järjestelmät kuolevat, kun muut raskaat säikeet tunkeutuvat niihin. Tarvittava vCPU/pCPU-suhde riippuu täysin suorittimen kuormitusprofiilista ja viiveen toleranssista. Useat raskaat kuormat vaativat alhaisen suhteen. Muutama raskas kuorma toimii hyvin keskisuurella suhteella. Kevyet kuormat voivat toimia korkean suhteen järjestelmässä.

Aion kertoa sinulle pienen likaisen salaisuuden prosessoreista: Joka kerta kun lanka suoritetaan, riippumatta siitä mikä se on, se käyttää prosessoria 100 % (tehon kuristus muuttaa kellonopeutta, ei työtaakkaa kylläisyys). CPU on binäärilaite; se joko käsittelee tai ei ole. Kun suorituskykymittarityökalusi osoittavat, että 100 % tai 20 % tai 50 % tai mikä tahansa luku, ne laskevat sen aikamittauksella. Jos näet 100%, se tarkoittaa, että CPU prosessoi koko mitatun ajan. 20 % tarkoittaa, että prosessi oli käynnissä 1/5 ajasta ja 4/5 ajasta se oli käyttämättömänä. Tämä tarkoittaa, että yksi säie ei kuluta 100 % suorittimesta, koska Windows/Hyper-V ennakoi sen, kun se haluaa ajaa toista säiettä. Sinulla voi olla useita "100%" CPU-säikeitä käynnissä samassa järjestelmässä. Siitä huolimatta järjestelmä voi toimia reagoivasti vain, kun sillä on jonkin verran tyhjäkäyntiä, mikä tarkoittaa, että useimmat säikeet yksinkertaisesti antavat aikaviipaleensa mennä ohi. Näin muut säikeet pääsevät ytimiin nopeammin. Kun useat säikeet ovat aina jonossa aktiivisen suorittimen ajan saamiseksi, kokonaisjärjestelmästä tulee vähemmän reagoiva, koska säikeiden on odotettava. Lisäytimien käyttö ratkaisee tämän huolen, koska se hajauttaa työtaakkaa.

Lopputulos: jos haluat tietää, kuinka monta fyysistä ydintä tarvitset, sinun on tiedettävä todellisen työmääräsi suorituskykyprofiili. Jos et tiedä, aloita aikaisemmista 8:1- tai 12:1-suosituksista.

[thrive_leads id=’17165′]

Entä varaus ja painotus (prioriteetti)?

En suosittele keskustelemaan suorittimen asetuksista, ellei sinulla ole suorittimen kilpailuongelmaa ratkaistavaksi. Anna säikeen ajoittajan tehdä työnsä. Aivan kuten prosessorin prioriteettien asettaminen säikeille Windowsissa voi aiheuttaa enemmän ongelmia kuin ne ratkaisevat, hypervisorin vCPU-asetusten näpertely voi pahentaa kaikkea.

Katsotaanpa määritysnäyttöä:

vCPU-asetukset

Ensimmäinen ryhmä laatikoita on reservi. Ensimmäinen laatikko edustaa prosenttiosuutta sen sallitusta vCPU-määrästä varata. Sen todellinen merkitys riippuu VM:lle määritettyjen vCPU:iden määrästä. Toinen ruutu, harmaa, näyttää isäntäresurssien kokonaisprosenttiosuuden, jonka Hyper-V varaa tälle VM:lle. Tässä tapauksessa minulla on 2 vCPU-järjestelmä kaksiytimisessä isännässä, joten kaksi laatikkoa ovat samat. Jos asetan 10 prosentin reservin, se on 10 prosenttia kaikista fyysisistä resursseista. Jos pudotan varauksen yhteen vCPU:hun, 10 prosentin varaus muuttuu 5 prosentiksi fyysiseksi. Toinen laatikko lasketaan automaattisesti, kun säädät ensimmäistä laatikkoa.

Varanto on kova minimi... tavallaan. Jos tietyn isännän kaikkien virtuaalikoneiden kaikkien varausasetusten kokonaismäärä ylittää 100 %, vähintään yksi virtuaalikone ei käynnisty. Mutta jos virtuaalikoneen reservi on 0%, sitä ei lasketa 100%:iin ollenkaan (näyttää melko ilmeiseltä, mutta koskaan ei tiedä). Mutta jos virtuaalikone, jonka reservi on 20 %, on käyttämättömänä, muut prosessit saavat käyttää jopa 100 % käytettävissä olevasta prosessoritehosta… siihen asti, kunnes reservillä varustettu virtuaalikone käynnistyy. Sitten, kun suorittimen kapasiteetti on käytettävissä, varattu VM pystyy hallitsemaan jopa 20 % kokonaislaskentatehosta. Koska aikaviipaleet ovat niin lyhyitä, se on käytännössä kuin sillä olisi aina 20 % käytettävissä, mutta sen on odotettava kuten kaikkien muidenkin.

Joten, se myyjä, joka haluaa erillisen suorittimen? Jos todella haluat kunnioittaa heidän toiveitaan, teet sen näin. Syötät mikä tahansa numero yläruutuun, joka saa toisen ruudun näyttämään vastaavan prosessorin tehon kuinka monelle pCPU:lle/ytimelle myyjä uskoo tarvitsevansa. Jos he haluavat yhden kokonaisen suorittimen ja sinulla on neliytiminen isäntä, aseta toinen laatikko näyttämään 25%. Onko sinun todella pakko? No, en tiedä. Heidän ohjelmistonsa ei luultavasti tarvitse sellaista tehoa, mutta jos he voivat antaa sinulle tuen siitä, ettet kuuntele niitä, no… älkää ajako minua sen keskelle. Todellinen syy virtualisointitiheyksiin eivät koskaan saavuta sitä, mitä hypervisor-valmistajien sanovat voivansa tehdä, johtuu ohjelmistotoimittajien mielivaltaisista säännöistä, mutta se on toista päivää.

Kaksi seuraavaa laatikkoa ovat rajana. Nyt kun ymmärrät reservin, voit ymmärtää rajan. Se on resurssikatto. Se pitää ahneen virtuaalimiehen kädet poissa keksipurkista. Nämä kaksi laatikkoa toimivat yhdessä samalla tavalla kuin varalaatikot.

Viimeinen laatikko on prioriteettipaino. Kuten sanottu, tämä on suhteellista. Jokaisella VM:llä, joka on asetettu arvoon 100 (oletus), on sama veto ajastimen kanssa, mutta ne kaikki ovat alle kaikkien VM:iden, joissa on 200, ja ennen kaikkea niiden VM:iden, joissa on 50, ja niin edelleen. Jos aiot puuhata, paino on turvallisempaa kuin reservien puuhailu, koska et voi koskaan estää virtuaalikonetta käynnistymästä muuttamalla suhteellisia painoja. Paino tarkoittaa sitä, että kun joukko virtuaalikoneita esittää säikeitä hypervisor-säikeiden ajoittimelle kerralla, korkeampipainoiset VM:t menevät ensin.

Mutta entä Hyper-Threading?

Hyper-Threading antaa yhden ytimen käyttää kahta säiettä kerralla – tavallaan. Ydin voi käyttää aktiivisesti vain yhtä säiettä kerrallaan, mutta jos tämä säie pysähtyy odottaessaan ulkoista resurssia, ydin käyttää toista säiettä. Voit lukea yksityiskohtaisemman selityksen alta kommenttiosiossa avustaja Jordanilta. AMD on hiljattain lisännyt vastaavan tekniikan.

Yksi ​​suuren väärinkäsityksen poistamiseksi: Hyper-Threading ei kaksinkertaista ytimen suorituskykyä. Synteettiset vertailuarvot osoittavat 25 prosentin parannusta. Realistisemmat mittaukset osoittavat lähempänä 10 %:n lisäystä. 8-ytiminen Hyper-Threaded-järjestelmä ei toimi yhtä hyvin kuin 16-ytiminen ei-hyper-säikeinen järjestelmä. Se voi toimia melkein yhtä hyvin kuin 9-ytiminen järjestelmä.

Ns. "klassisella" ajastimella Hyper-V sijoittaa säikeet seuraavaan käytettävissä olevaan ytimeen yllä kuvatulla tavalla. Hyper-V 2016:ssa käyttöön otetun ydinaikataulun avulla Hyper-V estää nyt eri virtuaalikoneiden omistamia säikeitä ajamasta rinnakkain samassa ytimessä. Se kuitenkin edelleen ennaltaehkäisee yhden virtuaalikoneen säikeitä toisen virtuaalikoneen hyväksi. Meillä on artikkeli, joka käsittelee ydinaikataulua.

Kaiken järkeä

Tiedän, että tässä on paljon tietoa. Useimmat ihmiset haluavat tietää, kuinka monta vCPU:ta VM:lle on määritettävä tai kuinka monta vCPU:ta yhteensä ajetaan yhdessä järjestelmässä.

Henkilökohtaisesti määritän 2 vCPU:ta jokaiselle virtuaalikoneelle aloitusta varten. Tämä antaa sille vähintään kaksi paikkaa säikeiden ajamiseen, mikä antaa sille reagointikyvyn. Kahden prosessorin järjestelmässä se myös varmistaa, että VM on automaattisesti läsnä molemmissa NUMA-solmuissa. En määritä VM:lle lisää vCPU:ta ennen kuin tiedän, että se tarvitsee sitä (tai sovellustoimittaja vaatii sitä).

VCPU:n ja pCPU:n välinen suhde toimii enimmäkseen samalla tavalla. Ei ole olemassa kaavaa tai taikuutta, jota voit yksinkertaisesti soveltaa. Jos aiot virtualisoida olemassa olevat työmäärät, mittaa niiden nykyinen suorittimen käyttöaste ja laske se. se kertoo sinulle, mitä sinun tarvitsee tietää. Microsoftin arviointi- ja suunnittelutyökalupakki saattaa auttaa sinua. Muussa tapauksessa lisäät resursseja ja seuraat käyttöä. Jos laitteistosi ei pysty käsittelemään työtaakkaasi, sinun on skaalattava.


PREV: OAuth 2.0:n käyttäminen palvelinsovelluksissa | Google-identiteetti

NEXT: Todennus taustapalvelimella | Google-sisäänkirjautuminen verkkosivustoille

Popular Articles

Hot Articles

Navigation Lists

Back to Top