{"id":32331,"date":"2019-10-31T21:46:24","date_gmt":"2019-10-31T18:46:24","guid":{"rendered":"https:\/\/prohoster.info\/blog\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya\/"},"modified":"2019-10-31T21:46:24","modified_gmt":"2019-10-31T18:46:24","slug":"steal-kto-kradyot-u-virtualok-protsessornoe-vremya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya","title":{"rendered":"Steal: kes varastab virtuaalmasinatelt protsessorite aega","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Steal: kes varastab virtuaalmasinatelt protsessorite aega\" src=\"\/wp-content\/uploads\/2019\/04\/23cac5d3cc3295dc6f1014e9fda36b89.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTere! Soovin r\u00e4\u00e4kida lihtsas keeles, kuidas toimub steal'i tekkimine virtuaalmasinates ja m\u00f5nest varjatud artefaktist, mille me avastasime selle uurimise k\u00e4igus, kuhu mul oli vaja s\u00fcveneda kui pilveteenuse tehniliseks juhiks. <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Pilve Lahendused<\/a><\/noindex>. Platvorm t\u00f6\u00f6tab KVM-i peal.<\/p>\n<p>CPU steal aeg on aeg, mille jooksul virtuaalmasin ei saa protsessorilt ressursse oma t\u00f6\u00f6ks. See aeg arvestatakse ainult k\u00fclalisoperatsioonis\u00fcsteemides virtualiseerimiskeskkondades. P\u00f5hjused, kuhu need m\u00e4\u00e4ratud ressursid kaovad, on sama ebaselged nagu elus. Kuid me otsustasime asja uurida, korraldades terve hulga eksperimente. See ei t\u00e4henda, et me n\u00fc\u00fcd k\u00f5ike steal'ist teame, aga midagi huvitavat r\u00e4\u00e4gime n\u00fc\u00fcd.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Mis on steal<\/h2>\n<p>\nSeega, steal on metrika, mis n\u00e4itab, et virtuaalmasinas puudub protsessoriaeg protsesside jaoks. Nagu on kirjeldatud <noindex><a rel=\"nofollow\" href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/stable\/linux.git\/patch\/?id=c9aaa8957f203bd6df83b002fb40b98390bed078\">KVM-i kernelipatch'is<\/a><\/noindex>, steal on aeg, mille jooksul h\u00fcperviisor t\u00e4idab muid protsesse host-operatsioonis\u00fcsteemis, kuigi ta on virtuaalmasina protsessi t\u00e4itmise j\u00e4rjekorda pannud. Ehk siis, steal arvestatakse kui vahe aegade vahel, kui protsess on valmis t\u00f6\u00f6tama ja kui protsessorile antakse aeg.<\/p>\n<p>Virtuaalmasina kernel saab steal'i m\u00f5\u00f5tmed h\u00fcperviisorilt. Samas ei \u00fctle h\u00fcperviisor, milliseid muid protsesse ta t\u00e4idab, lihtsalt \"kuna olen h\u00f5ivatud, ei saa ma sulle aega anda\". KVM-is on steal'i arvestamise tugi lisatud <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/449657\/\">patchidesse<\/a><\/noindex>. Siin on kaks v\u00f5tmepunkti: <\/p>\n<ul>\n<li>Virtuaalmasin saab steal'i h\u00fcperviisorilt. Ehk siis, kaotuste perspektiivist vaadates on see virtuaalmasinas olevate protsesside jaoks kaudne m\u00f5\u00f5de, mis v\u00f5ib olla erinevate moonutuste all.\n<\/li>\n<li>H\u00fcperviisor ei jaga virtuaalmasinaga teavet selle kohta, millega ta veel h\u00f5ivatud on \u2014 oluline on, et ta ei p\u00fchenda sellele aega. Seet\u00f5ttu ei saa virtuaalmasin ise tuvastada steal'i n\u00e4itaja moonutusi, mida v\u00f5iks hinnata konkurentsi protsesside olemuse kaudu.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Mis m\u00f5jutab steal'i<\/h2>\n<p><\/p>\n<h3>2.1. Steali arvutamine<\/h3>\n<p>\nSisuliselt arvutatakse steal ligikaudu samamoodi nagu tavap\u00e4rane protsessori kasutuse aeg. Teavet selle kohta, kuidas kasutust arvutatakse, ei ole palju. T\u00f5en\u00e4oliselt seet\u00f5ttu, et enamik peab seda k\u00fcsimust iseenesestm\u00f5istetavaks. Kuid siin v\u00f5ivad samuti esineda varjatud probleemid. Selle protsessiga tutvumiseks v\u00f5ib lugeda <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2017-05-09\/cpu-utilization-is-wrong.html\">Brendann Greggi artikkel<\/a><\/noindex>: saate teada palju n\u00fcansse ressursside kasutuse arvutamisel ja olukordadest, kus see arvutus v\u00f5ib olla vale j\u00e4rgmiste p\u00f5hjuste t\u00f5ttu:<\/p>\n<ul>\n<li>Protsessori \u00fclekuumenemine, mille t\u00f5ttu k\u00e4ivituvad taktid vahele.\n<\/li>\n<li>Turboinglise sisse- ja v\u00e4ljal\u00fclitamine, mille tulemusena muutub protsessori taktsagedus.\n<\/li>\n<li>Ajavaliku muudatus, mis toimub protsessori energias\u00e4\u00e4stutehnoloogiate, nagu SpeedStep, kasutamise korral.\n<\/li>\n<li>Keskmise arvutamise probleem: 80% kasutuse hindamine \u00fche minuti jooksul v\u00f5ib varjata l\u00fchiajalist puhangut 100%.\n<\/li>\n<li>Ts\u00fckliline lukustus (spin lock) toob kaasa olukorra, kus protsessor on kasutuses, kuid kasutaja protsess ei n\u00e4e oma t\u00e4itmisel edusamme. Tulemusena on protsessori arvutatud kasutus 100%, kuigi f\u00fc\u00fcsiliselt ei kasuta protsessor protsessiga aega.\n<\/li>\n<\/ul>\n<p>\nArtiklit, mis kirjeldab sarnast arvutust steal'i jaoks, ei leidnud (kui teate \u2014 jagage kommentaarides). Kuid l\u00e4htekoodide p\u00f5hjal on arvutamise mehhanism sama, mis kasutuse puhul. Lihtsalt tuumale lisatakse veel \u00fcks loendur, mis on otseselt KVM protsessi (virtuaalmasina protsess) jaoks, mis loendab aja, mille jooksul KVM protsess on oodanud protsessori aega. Loendur v\u00f5tab protsessori kohta teavet selle spetsifikatsioonist ja vaatab, kas k\u00f5ik selle tikid on virtuaalmasina protsessis kasutatud. Kui k\u00f5ik, siis arvestame, et protsessor tegeles ainult virtuaalmasina protsessiga. Vastasel juhul teavitame, et protsessor tegeleb millegi muuga, steal on tekkinud. <\/p>\n<p>Steal'i arvutamise protsess on samaaegselt allutatud samadele probleemidele nagu tavap\u00e4rane kasutuse arvutamine. Mitte, et need probleemid sageli esineksid, kuid n\u00e4evad v\u00e4lja heidutavalt.<\/p>\n<h3>2.2. KVM Virtualiseerimise T\u00fc\u00fcbid<\/h3>\n<p>\n\u00dcldiselt on olemas kolm virtualiseerimise t\u00fc\u00fcpi, k\u00f5ik KVM-i poolt toetatud. Virtualiseerimise t\u00fc\u00fcp v\u00f5ib m\u00f5jutada steal'i tekkemehhanismi.<\/p>\n<p><b>Otse\u00fclekanne<\/b>. Sel juhul toimub virtuaalmasina operatsioonis\u00fcsteemi t\u00f6\u00f6 f\u00fc\u00fcsiliste h\u00fcperviisori seadmetega enam-v\u00e4hem nii:<\/p>\n<ol>\n<li>K\u00fclastusoperatsioonis\u00fcsteem saadab oma k\u00fclalisseadmest k\u00e4su.\n<\/li>\n<li>K\u00fclastusseadme draiver v\u00f5tab k\u00e4su vastu, koostab BIOS-i seadme jaoks p\u00e4ringu ja saadab selle h\u00fcperviisorisse.\n<\/li>\n<li>H\u00fcperviisori protsess t\u00f5lgib k\u00e4su f\u00fc\u00fcsilise seadme k\u00e4suks, muutes selle sealhulgas turvalisemaks.\n<\/li>\n<li>F\u00fc\u00fcsilise seadme draiver v\u00f5tab muudetud k\u00e4su ja saadab selle juba f\u00fc\u00fcsilisele seadmele.\n<\/li>\n<li>K\u00e4skude t\u00e4itmise tulemused tulevad tagasi sama teed pidi. \n<\/li>\n<\/ol>\n<p>\nT\u00f5lke eelis on selles, et see v\u00f5imaldab emuleerida igasuguseid seadmeid ja ei n\u00f5ua operatsioonis\u00fcsteemi tuuma erilist ettevalmistamist. Kuid selle eest tuleb tasuda peamiselt j\u00f5udlusega. <\/p>\n<p><b>Riistvaraline virtualiseerimine<\/b>. Sel juhul m\u00f5istab seade riistvaratasandil operatsioonis\u00fcsteemist saadud k\u00e4ske. See on k\u00f5ige kiirem ja parim meetod. Kahjuks toetavad seda vaid v\u00e4hesed f\u00fc\u00fcsilised seadmed, h\u00fcperviisorid ja k\u00fclalisoperatsioonis\u00fcsteemid. Praegu on peamised seadmed, mis toetavad riistvaralist virtualiseerimist, protsessorid.<\/p>\n<p><b>Paravirtualiseerimine (paravirtualization)<\/b>. K\u00f5ige levinum variant seadmete virtualiseerimiseks KVM-is ja \u00fcldiselt k\u00f5ige laialdasem virtualiseerimise re\u017eiim k\u00fclalisoperatsioonis\u00fcsteemide jaoks. Selle erip\u00e4ra on see, et teatud h\u00fcperviisori alams\u00fcsteemide (n\u00e4iteks v\u00f5rgu- v\u00f5i kettav\u00e4\u00e4rise) v\u00f5i m\u00e4lu lehtede jagamine toimub h\u00fcperviisori API kaudu, ilma madala taseme k\u00e4skude t\u00f5lkimiseta. Selle virtualiseerimismeetodi puuduseks on vajadus modifitseerida k\u00fclalisoperatsioonis\u00fcsteemi tuuma, et see saaks suhelda h\u00fcperviisoriga selle API abil. Kuid tavaliselt lahendatakse see k\u00fclalisoperatsioonis\u00fcsteemi spetsiaalsete draiverite installimisega. KVM-is nimetatakse seda API-d <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/developerworks\/library\/l-virtio\/index.html\">virtio API<\/a><\/noindex>.<\/p>\n<p>Paravirtualiseerimise puhul on v\u00f5rreldes t\u00f5lgiga tee f\u00fc\u00fcsilisse seadmesse oluliselt l\u00fchem, kuna k\u00e4sud saadetakse otse virtuaalmasinast h\u00fcperviisori protsessi hostis. See kiirendab k\u00f5igi k\u00e4skude t\u00e4itmist virtuaalmasinas. KVM-is vastutab selle eest virtio API, mis t\u00f6\u00f6tab ainult teatud seadmete, n\u00e4iteks v\u00f5rgu- v\u00f5i kettaadapteriga. Just seet\u00f5ttu installitakse virtuaalmasinadesse virtio-draiverid. <\/p>\n<p>Selle kiirususe tagaj\u00e4rg on see, et mitte k\u00f5ik protsessid, mis t\u00f6\u00f6tavad virtuaalmasinas, j\u00e4\u00e4vad sinna. See loob teatud eriefekte, mis v\u00f5ivad viia steal'i tekkimiseni. Soovitan selle teema p\u00f5hjalikuks uurimiseks alustada. <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/239238\/\">Virtuaalse I\/O API: virtio<\/a><\/noindex>.<\/p>\n<h3>2.3. \"Tasakaalustatud\" ajakava<\/h3>\n<p>\nVirtuaalmasin h\u00fcpervisori peal on tegelikult tavaline protsess, mis allub ajastamise seadustele (ressursside jaotamine protsesside vahel) Linuxi tuumas, seega vaatleme seda l\u00e4hemalt. <\/p>\n<p>Linuxis kasutatakse nn CFS-i, Completely Fair Scheduler, alates tuumast 2.6.23, mis on saanud vaikimisi ajakava. Selle algoritmi m\u00f5istmiseks v\u00f5ib lugeda Linux Kernel Architecture v\u00f5i allikaid. CFS-i olemus seisneb protsessoriaja jaotamises protsesside vahel s\u00f5ltuvalt nende t\u00e4itmise kestusest. Mida rohkem protsessorit aega protsess vajab, seda v\u00e4hem seda aega ta saab. See tagab, et k\u00f5ik protsessid t\u00e4idetakse \"ausalt\" \u2014 et \u00fcks protsess ei kasutaks pidevalt k\u00f5iki protsessoreid ning et ka teised protsessid saaksid t\u00f6\u00f6tada. <\/p>\n<p>M\u00f5nikord viib selline paradigma huvitavate artefaktide tekkeni. Pikalt Linuxit kasutanud inimesed m\u00e4letavad kindlasti tavalise tekstiredaktori seiskumist t\u00f6\u00f6laual ressursimahukate rakenduste, n\u00e4iteks kompilaatorite, k\u00e4ivitamise ajal. See juhtus seet\u00f5ttu, et mitte ressursimahukad \u00fclesanded t\u00f6\u00f6lauarakendustes konkureerisid ressursse aktiivselt tarbivate \u00fclesannetega nagu kompilaator. CFS arvab, et see pole aus, seega peatab see perioodiliselt tekstiredaktori ja annab protsessorile v\u00f5imaluse t\u00f6\u00f6delda kompilaatori \u00fclesandeid. Seda parandati mehhanismi abil. <noindex><a rel=\"nofollow\" href=\"https:\/\/marc.info\/?l=linux-kernel&amp;m=128978361700898\">sched_autogroup<\/a><\/noindex>, kuid paljusid muid CPU aja jaotamise erip\u00e4rasid on j\u00e4\u00e4nud alles. Tegelikult ei r\u00e4\u00e4gi see jutustus sellest, kui halb CFS on, vaid katse juhtida t\u00e4helepanu sellele, et \"aus\" protsessorite aja jaotamine pole \u00fcldse triviaalne \u00fclesanne.<\/p>\n<p>Veel t\u00e4htis moment ajakavandis on preemption. See on vajalik, et t\u00f5rjuda protsessorilt liialdava ressursikasutusega protsess ja anda v\u00f5imalus teistele t\u00f6\u00f6delda. Protsessi t\u00f5rjumist nimetatakse konteksti vahetamiseks, mis t\u00e4hendab protsessori konteksti vahetamist. Sel juhul s\u00e4ilitatakse kogu \u00fclesande kontekst: steki seisund, registrid ja muud, p\u00e4rast mida protsess saadetakse ootama, samas kui tema kohale astub teine. See on operatsioonile kallis ja kasutatakse harva, kuid tegelikult ei ole selles midagi halba. Sage konteksti vahetus v\u00f5ib viidata probleemile operatsioonis\u00fcsteemis, kuid tavaliselt toimub see pidevalt ega n\u00e4ita midagi erilist.<\/p>\n<p>Nii pikk jutt on vajalik \u00fche fakti selgitamiseks: mida rohkem protsessori ressursse p\u00fc\u00fcab \u00f5iglaselt ajakava Linuxis kasutada, seda kiiremini ta peatatakse, et teised protsessid saaksid samuti t\u00f6\u00f6tada. Kas see on \u00f5ige v\u00f5i vale, on keeruline k\u00fcsimus, mille lahendamine varieerub s\u00f5ltuvalt koormusest. Windowsis oli ajakava seni suunatud peamiselt t\u00f6\u00f6lauarakenduste prioriteediks, mist\u00f5ttu v\u00f5isid taustprotsessid hanguda. Sun Solarisel oli viis erinevat ajakava klassi. Virtuaal-serverite k\u00e4ivitamisel lisati kuues. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/man.shtml?topic=FSS&amp;category=7&amp;russian=4\">\u00d5iglase jagamise ajakava<\/a><\/noindex>, kuna eelmised viis t\u00f6\u00f6tasid Solaris Zones'i virtualiseerimisega ebaausa viisil. Selle teema p\u00f5hjaliku uurimise soovitan alustada raamatutest nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Solaris-Internals-OpenSolaris-Kernel-Architecture\/dp\/0131482092\/\">Solaris Internals: Solaris 10 ja OpenSolaris Kernel Architecture<\/a><\/noindex> v\u00f5i <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Understanding-Linux-Kernel-Third-Daniel\/dp\/0596005652\/\">Understanding the Linux Kernel<\/a><\/noindex>.<\/p>\n<h3>2.4. Kuidas j\u00e4lgida steali?<\/h3>\n<p>\nSteali j\u00e4lgimine virtuaalmasinas, nagu ka mistahes muu protsessori m\u00f5\u00f5dik, on lihtne: saab kasutada mis tahes protsessorim\u00f5\u00f5dikute kogumise t\u00f6\u00f6riista. Peamine on, et virtuaalmasin oleks Linuxil. Windows ei paku selle teabe osas oma kasutajatele teadmisi. \ud83d\ude41<\/p>\n<p><img decoding=\"async\" alt=\"Steal: kes varastab virtuaalmasinatelt protsessorite aega\" src=\"\/wp-content\/uploads\/2019\/04\/3c7cd04f73fd6a74b86af81382090b69.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Top-k\u00e4skluse v\u00e4ljund: protsessori koormuse detailide vaatamine, k\u00f5ige paremal veerus - steal<\/i><\/p>\n<p>Raskused tekivad, kui proovida neid andmeid saada h\u00fcperviisorilt. V\u00f5ib proovida ennustada steali hostmasinas n\u00e4iteks Load Average (LA) m\u00e4\u00e4ramatuse j\u00e4rgi - protsesside keskmise arvu, mis ootab t\u00e4itmist. Selle n\u00e4itaja arvutamise meetod ei ole lihtne, kuid \u00fcldiselt, kui protsessoriteemaga normaliseeritud LA on suurem kui 1, n\u00e4itab see, et Linuxi server on millegagi \u00fcle koormatud. <\/p>\n<p>Mida k\u00f5ik need protsessid ootavad? Ilmselge vastus on protsessor. Kuid see vastus ei ole p\u00e4ris \u00f5ige, sest vahel on protsessor vaba, aga LA on k\u00f5rge. Meenutage, <noindex><a rel=\"nofollow\" href=\"https:\/\/serverfault.com\/questions\/911976\/redhat-nfs-cluster-high-load-average-suddenly\">kuidas NFS kukub ja kuidas seejuures LA suureneb.<\/a><\/noindex>Umbes nii v\u00f5ib olla ka ketta ja teiste sisend-\/v\u00e4ljundseadmete puhul. Kuid tegelikult v\u00f5ivad protsessid oodata igasuguste lukustuste l\u00f5ppu, sealhulgas f\u00fc\u00fcsiliste, mis on seotud sisend-\/v\u00e4ljundseadmetega, ja loogiliste, nagu mutex. Siia kuuluvad ka blokeeringud riistvara tasemel (nt sama ketta vastus) v\u00f5i loogika tasemel (nn blokeerimisprimitiivid, kuhu kuuluvad mitmed \u00fcksused, mutex, adaptive ja spin, semaforid, tingimusmuutujad, rw lukud, ipc lukud...).<\/p>\n<p>Veel \u00fcks LA erip\u00e4ra on see, et see loetakse kui keskmine v\u00e4\u00e4rtus kogu operatsioonis\u00fcsteemis. N\u00e4iteks kui 100 protsessi konkureerivad \u00fche faili \u00fcle, siis LA=50. Tundub, et selline suur v\u00e4\u00e4rtus viitab sellele, et operatsioonis\u00fcsteemil on raske. Kuid halvasti kirjutatud koodi puhul v\u00f5ib see olla normaalne seisund, kus halb on ainult sellele koodile, samas kui teised protsessid operatsioonis\u00fcsteemis ei kannata. <\/p>\n<p>Selle keskmistamise t\u00f5ttu (mida arvestatakse v\u00e4hemalt minuti jooksul) on LA n\u00e4itaja alusel millegi m\u00e4\u00e4ramine mitte just k\u00f5ige t\u00e4nuv\u00e4\u00e4rsem \u00fclesanne, millel on v\u00e4ga ebamugavad tulemused konkreetsetes olukordades. Kui \u00fcritate aru saada, avastate, et Vikipeedias ja teistes kergesti k\u00e4ttesaadavates ressurssides on kirjeldatud vaid k\u00f5ige lihtsamaid juhtumeid, ilma s\u00fcgava protsessi seletamata. K\u00f5ik, keda huvitab, saatke j\u00e4lle <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2017-08-08\/linux-load-averages.html\">siia, Brendann Greggi juurde<\/a><\/noindex> \u00a0\u2014 edasi linkide kaudu. Kui inglise keel on t\u00fclikas \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/335326\/\">tema populaarse artikli t\u00f5lke LA-st<\/a><\/noindex>.<\/p>\n<h2>3. Eriefektid<\/h2>\n<p>\nN\u00fc\u00fcd peatume peamistel juhtudel, kus steal esineb ja millega oleme kokku puutunud. R\u00e4\u00e4gin, kuidas need tulenevad k\u00f5igest eel\u00f6eldust ja kuidas need seostuvad h\u00fcperviisori n\u00e4itajatega.<\/p>\n<p><b>Taaskasutamine<\/b>. K\u00f5ige lihtsam ja sagedasem: h\u00fcperviisor on \u00fclet\u00e4itunud. T\u00f5epoolest, palju virtuaalmasinaid on sisse l\u00fclitatud, kvartalip\u00f5hine suur protsessoritarbimine, suur konkurents, LA \u00fcletab 1 (protsessorite l\u00f5ngade normaliseerimise j\u00e4rgi). K\u00f5ikides virtuaalmasinates on k\u00f5ik aeglane. Steal, mis tuleb h\u00fcperviisorilt, t\u00f5useb samuti, tuleb koormust \u00fcmber jaotada v\u00f5i kedagi v\u00e4lja l\u00fclitada. \u00dcldiselt on see k\u00f5ik loogiline ja arusaadav.<\/p>\n<p><b>Paravirtualiseerimine versus \u00fcksikud instantsid<\/b>. H\u00fcperehitusel on ainult \u00fcks virtuaalmasin, mis tarbib v\u00e4ikest osa, kuid loob suurt koormust sisendi\/j\u00f5udluse osas, n\u00e4iteks kettal. Ja kuskilt on selles v\u00e4ike steal, kuni 10 % (nagu on n\u00e4idanud mitmed eksperimendid).<\/p>\n<p>Huvitav juhtum. Steal tekib siin just h\u00fcbriidsete draiverite tasemel blokeeringute t\u00f5ttu. Virtuaalmasinas luuakse katkemine, mida t\u00f6\u00f6tleb draiver ja suunatakse h\u00fcperehitusele. Katkemise t\u00f6\u00f6tlemise t\u00f5ttu h\u00fcperehituses tundub virtuaalmasinale, et see on saadetud otsus, ta on valmis t\u00e4itmiseks ja ootab protsessorit, kuid protsessoriaega ei anta. Virtuaalmasin arvab, et see aeg on varastatud. <\/p>\n<p>See juhtub vahem\u00e4lu saatmise ajal, see suundub h\u00fcperehituse kernel space'i ja me hakkame seda ootama. Kuigi, virtuaalmasina vaatevinklist, peaks see kohe tagasi tulema. Seega, steal arvutamise algoritmi kohaselt loetakse see aeg varastatuks. Enamasti v\u00f5ivad selles olukorras olla ka muud mehhanismid (n\u00e4iteks m\u00f5ne sys call'i t\u00f6\u00f6tlemine), kuid need ei tohiks palju erineda.<\/p>\n<p><b>Ajakava k\u00f5rge koormusega virtuaalmasinate vastu<\/b>. Kui \u00fcks virtuaalmasin kannatab rohkem steal'i all kui teised, on see seotud tegelikult ajakavaga. Mida rohkem protsessorit protsess koormab, seda kiiremini ajakava ta v\u00e4lja viskab, et teisedki saaksid t\u00f6\u00f6tada. Kui virtuaalmasin tarbib v\u00e4he, ei pruugi ta steal'i peaaegu \u00fcldse m\u00e4rgata: tema protsess istus ausalt ja ootas, talle on vaja anda rohkem aega. Kui virtuaalmasin genereerib maksimaalset koormust k\u00f5igis oma tuumades, visatakse ta sagedamini protsessorilt v\u00e4lja ja p\u00fc\u00fctakse mitte anda palju aega. <\/p>\n<p>Veel hullem on see, kui protsessid virtuaalmasinas p\u00fc\u00fcavad saada rohkem protsessorit, sest nad ei suuda andmeid t\u00f6\u00f6delda. Siis annab h\u00fcperehituse operatsioonis\u00fcsteem, ausa optimeerimise arvelt, \u00fcha v\u00e4hem protsessoriaega. See protsess toimub \u00fcliraskelt ja steal t\u00f5useb taevasse, kuigi teised virtuaalmasinad ei pruugi seda peaaegu m\u00e4rgata. Ja mida rohkem tuumasid, seda hullem on h\u00e4das olev masin. L\u00fchidalt \u00f6eldes, k\u00f5ige rohkem kannatavad k\u00f5rge koormusega virtuaalmasinad, millel on palju tuumasid.<\/p>\n<p><b>Madala LA, kuid on steal<\/b>. Kui LA on umbes 0,7 (st h\u00fcperehitus paistab olevat alakoormatud), kuid individuaalsetes virtuaalmasinates t\u00e4heldatakse steal'i:<\/p>\n<ul>\n<li>Nagu juba eelnevalt kirjeldatud, v\u00f5ib h\u00fcpervisori paravirtualiseerimise variant teoreetiliselt saada m\u00f5\u00f5dikuid, mis n\u00e4itavad steal'i, kuigi h\u00fcpervisori enda jaoks on k\u00f5ik h\u00e4sti. Meie katsetuste tulemuste p\u00f5hjal ei \u00fcleta selline steal'i n\u00e4itaja 10%, mis ei tohiks olulisel m\u00e4\u00e4ral m\u00f5jutada rakenduste j\u00f5udlust virtuaalses masinas.\n<\/li>\n<li>LA parameeter arvutatakse valesti. T\u00e4psemalt \u00f6eldes arvutatakse see igas konkreetses hetkes \u00f5igesti, kuid keskmistades minutiks j\u00e4\u00e4b tulemus madalamaks. N\u00e4iteks, kui \u00fcks virtuaalne masin tarbib h\u00fcpervisori protsessoreid t\u00e4pselt pool minutit, siis LA h\u00fcpervisoris on 0,15; neli sellist virtuaalset masinat, mis t\u00f6\u00f6tavad samal ajal, annavad 0,6. Kuid see, et pool minutit oli iga\u00fchel nendest 25% steal'i n\u00e4itaja, ei muuda enam midagi.\n<\/li>\n<li>Kordame veel, et skeemi t\u00f5ttu, mis otsustab, et keegi s\u00f6\u00f6b liiga palju, ja lubab sellel keegi oodata. Ja samal ajal l\u00fclitan ma konteksti \u00fcmber, t\u00f6\u00f6dlen katkestusi ja tegelen muude oluliste s\u00fcsteemiasjadega. L\u00f5puks ei n\u00e4e m\u00f5ned virtuaalsed masinad mingeid probleeme, samas kui teised kogevad t\u00f5sist j\u00f5udluse langust.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>4. Muud moonutused<\/h2>\n<p>\nOn veel miljon p\u00f5hjust, miks virtuaalmasinas protsessorite aja ausast jaotamisest moonutusi tekib. N\u00e4iteks toovad h\u00fcpertuuma ja NUMA arvutustes oma keerukuse, segades protsessi t\u00e4itmiseks tuuma valimist, kuna skeem kasutab koefitsiente - kaalu, mis konteksti vahetamisel muudavad arvutamise veelgi keerulisemaks.<\/p>\n<p>Moonutusi v\u00f5ivad p\u00f5hjustada ka tehnoloogiad nagu turbo boost v\u00f5i vastupidi, energias\u00e4\u00e4sture\u017eiim, mis arvutuste k\u00e4igus v\u00f5ib kunstlikult t\u00f5sta v\u00f5i langetada sagedust v\u00f5i isegi serveri ajatud. Turbo boost'i aktiveerimine v\u00e4hendab \u00fche protsessori l\u00f5ime j\u00f5udlust t\u00e4nu teise l\u00f5ime j\u00f5udluse t\u00f5usule. Sel hetkel ei edastata virtuaalsele masinale teavet t\u00f6\u00f6tava protsessori reaalsest sagedusest, mist\u00f5ttu ta arvab, et tema aega varastatakse (n\u00e4iteks, kui ta soovis 2 GHz, kuid sai poole v\u00e4hem). <\/p>\n<p>Kokkuv\u00f5ttes v\u00f5ib moonutuste p\u00f5hjuseid olla palju. Teatud s\u00fcsteemis v\u00f5ite avastada midagi veel. Alustage parem raamatutest, millele ma eelnevalt viitasin, ja statistika kogumisest h\u00fcpervisorist selliste t\u00f6\u00f6riistadega nagu perf, sysdig, systemtap, milliseid on <noindex><a rel=\"nofollow\" href=\"https:\/\/jvns.ca\/blog\/2017\/07\/05\/linux-tracing-systems\/\">k\u00fcmneid<\/a><\/noindex>.<\/p>\n<h2>5. J\u00e4reldused<\/h2>\n<p><\/p>\n<ol>\n<li>M\u00f5ni aeg-ajalt esinev steal v\u00f5ib olla seotud paravirtuaalsusega ja seda v\u00f5ib pidada normaalseks. Internetis kirjutatakse, et see v\u00e4\u00e4rtus v\u00f5ib olla 5-10%. See s\u00f5ltub virtuaalmasinas olevatest rakendustest ja sellest, kui suurt koormust nad f\u00fc\u00fcsilistele seadmetele avaldavad. Siin on oluline t\u00e4hele panna, kuidas k\u00e4ituvad rakendused virtuaalmasinates.\n<\/li>\n<li>H\u00fcpperviisori koormuse ja virtuaalmasinas oleva steal'i suhe ei ole alati \u00fcheselt m\u00f5istetav, m\u00f5lemad steal'i hindamised v\u00f5ivad olla konkreetsetes olukordades erinevate koormuste korral vale.\n<\/li>\n<li>Sheduler ei suhtu h\u00e4sti protsessidesse, mis sageli ressursse k\u00fcsivad. Ta p\u00fc\u00fcab anda v\u00e4hem neile, kes paluvad rohkem. Suured virtuaalmasinad on probleem.\n<\/li>\n<li>M\u00f5ni v\u00e4ike steal v\u00f5ib olla normaalne ka ilma paravirtuaalsuseta (arvestades virtuaalmasinas olevat koormust, naaberprotsesside koormuse erip\u00e4ra, koormuse jaotust t\u00f5mblukude vahel ja muid tegureid).\n<\/li>\n<li>Kui soovite v\u00e4lja selgitada steal'i konkreetses s\u00fcsteemis, tuleb uurida erinevaid variante, koguda m\u00f5\u00f5dikud, hoolikalt anal\u00fc\u00fcsida ja m\u00f5elda, kuidas koormust \u00fchtlaselt jaotada. \u00dcksk\u00f5ik millistest juhtudest v\u00f5ivad esineda k\u00f5rvalekalded, mida tuleb katsetamise teel kinnitada v\u00f5i j\u00e4lgida kernelide debugeeris.\n<\/li>\n<\/ol>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/449316\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u043e \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f steal \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u0438 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c \u043f\u0440\u0438 \u0435\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0442\u0435\u0445\u0434\u0438\u0440\u0443 \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Mail.ru Cloud Solutions. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 KVM. CPU steal time \u2014 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24147,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Steal: \u043a\u0442\u043e \u043a\u0440\u0430\u0434\u0451\u0442 \u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:46:24+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:46:24+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Steal: kes varastab virtuaalmasinate protsessorite aega | ProHoster","description":"Tere!","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Steal: \u043a\u0442\u043e \u043a\u0440\u0430\u0434\u0451\u0442 \u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043e\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:46:24+00:00","article:modified_time":"2019-10-31T18:46:24+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32331","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 10:21:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:00:23","updated":"2026-01-21 10:21:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=32331"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/32331\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/24147"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=32331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=32331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=32331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}