{"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":"Varastage: kes varastab virtuaalsetelt masinatelt protsessoriskeemi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Varastage: kes varastab virtuaalsetelt masinatelt protsessoriskeemi\" src=\"\/wp-content\/uploads\/2019\/04\/23cac5d3cc3295dc6f1014e9fda36b89.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTere! Soovin lihtsate s\u00f5nadega r\u00e4\u00e4kida steal'i tekkemehhanikast virtuaalsetes masinates ning m\u00f5nest mitte ilmnevatest artefaktidest, mille oleme avastanud selle uurimise k\u00e4igus, millesse pidin s\u00fcvenema kui pilveplatvormi tehniline juht. <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>. Platvorm t\u00f6\u00f6tab KVM-i peal.<\/p>\n<p>CPU steal time on aeg, mille jooksul virtuaalne masin ei saa protsessori resursse oma t\u00f6\u00f6ks. See aeg arvestatakse ainult k\u00fclalisoperatsioonis\u00fcsteemides virtualiseerimise keskkondades. P\u00f5hjused, miks need eraldatud ressursid kuskile kaovad, on nagu eluski \u00fcsna udused. Kuid otsustasime asja selgitada, isegi korraldasime terve rea eksperimentaalsi. Ei saa \u00f6elda, et n\u00fc\u00fcd teame steal'ist k\u00f5ike, kuid jagame m\u00f5ningaid huvitavaid avastusi.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Mis on steal<\/h2>\n<p>\nNii et steal on m\u00f5\u00f5dik, mis n\u00e4itab protsessoriaja puuduj\u00e4\u00e4ki virtuaalse masina 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 kerneli pat\u0161is<\/a><\/noindex>, steal \u2014 see aeg, mille jooksul h\u00fcperviisor t\u00e4idab teisi protsesse host-OS-is, kuigi ta on pannud virtuaalmasina protsessi t\u00e4itmise j\u00e4rjekorda. See t\u00e4hendab, et steal loetakse ajavaheks, mille jooksul protsess on valmis t\u00e4itmiseks, ja ajaks, mil protsessorile eraldatakse protsessoriaega.<\/p>\n<p>Virtuaalmasina tuum saab steal-m\u00f5\u00f5diku h\u00fcperviisorilt. Samal ajal h\u00fcperviisor ei t\u00e4psusta, milliseid teisi protsesse ta t\u00e4idab, lihtsalt: \u00abkuni olen h\u00f5ivatud, ei saa ma sulle aega p\u00fchendada\u00bb. KVM-is on steal-i arvestamise tugi lisatud <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/449657\/\">patchides<\/a><\/noindex>. Siin on kaks peamist punkti: <\/p>\n<ul>\n<li>Virtuaalmasin saab h\u00fcperviisorilt teada steal-ist. See t\u00e4hendab, et kaotuse osas on see virtuaalmasinas olevatele protsessidele kaudne m\u00f5\u00f5tmine, mis v\u00f5ib olla erinevatele moonutustele vastuv\u00f5tlik.\n<\/li>\n<li>H\u00fcperviisor ei jaga virtuaalmasinaga teavet selle kohta, millega ta veel h\u00f5ivatud on \u2014 peamine, et ta ei p\u00fchenda aega virtuaalmasinale. Seet\u00f5ttu ei saa virtuaalmasin tuvastada steal-i n\u00e4itajate moonutusi, mida v\u00f5iks hinnata konkurentide protsesside olemuse j\u00e4rgi.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Mis m\u00f5jutab steal-i<\/h2>\n<p><\/p>\n<h3>2.1. steal-i arvutamine<\/h3>\n<p>\nSisuliselt arvestatakse steal'it umbes samamoodi nagu tavalist protsessori kasutusaja m\u00e4\u00e4ra. Teavet selle kohta, kuidas kasutust arvutatakse, on v\u00e4he. T\u00f5en\u00e4oliselt seet\u00f5ttu, et enamik inimesi peab seda k\u00fcsimust ilmseks. Kuid ka siin v\u00f5ivad esineda varjatud probleemid. Selle protsessiga tutvumiseks saate lugeda <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2017-05-09\/cpu-utilization-is-wrong.html\">Brendann Greggi artiklit<\/a><\/noindex>: saate teada palju n\u00fcanssidest, mis on seotud kasutuse arvutamisega, 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 vahele j\u00e4\u00e4vad taktid.\n<\/li>\n<li>Turbo boosti sisse- ja v\u00e4ljal\u00fclitamine, mille t\u00f5ttu muutub protsessori taktsagedus.\n<\/li>\n<li>Ajav\u00f5rgu kestuse muutmine, mis toimub protsessori energia s\u00e4\u00e4stmise tehnoloogiate, n\u00e4iteks SpeedStep, kasutamisel.\n<\/li>\n<li>Keskmise arvutamise probleem: \u00fche minuti jooksul 80% m\u00e4\u00e4r veel k\u00e4tkeb 100% l\u00fchiajalist puhangut.\n<\/li>\n<li>Ts\u00fckliline lukustus (spin lock) p\u00f5hjustab olukorra, kus protsessor on kasutuses, kuid kasutaja protsess ei n\u00e4e oma t\u00e4itmise edenemist. Tulemusena on protsessori kasutuse m\u00e4\u00e4r protsessi poolt sada protsenti, kuigi f\u00fc\u00fcsiliselt ei tarbi protsessor aeglaselt aega.\n<\/li>\n<\/ul>\n<p>\nArtiklit, mis kirjeldab sarnast arvu steal'i jaoks, ma ei leidnud (kui tead \u2014 jaga palun kommentaarides). Kuid l\u00e4htekoodide p\u00f5hjal on arvutusmehhanism sama, mis kasutuse jaoks. Lihtsalt tuumaks lisatakse veel \u00fcks loendur, mis on vahetult KVM protsessi (virtuaalmasina protsess) jaoks, mis loendab KVM protsessi viibimist protsessori ajateenuse ooteolekus. Loendur v\u00f5tab teavet protsessori spetsifikatsioonist ja vaatleb, kas k\u00f5ik selle tikid on virtuaalmasina protsessi poolt kasutatud. Kui k\u00f5ik, siis arvestame, et protsessor tegeles ainult virtuaalmasina protsessiga. Vastupidisel juhul teavitame, et protsessor oli millegi muuga h\u00f5ivatud, tekkis steal. <\/p>\n<p>Steal arvestusprotsess kogeb samu probleeme nagu tavap\u00e4rane kasutuse arvestus. Kuigi sellised probleemid ei esine sageli, n\u00e4evad need heidutavad v\u00e4lja.<\/p>\n<h3>2.2. Virtuaalsete KVM t\u00fc\u00fcpide t\u00fc\u00fcbid<\/h3>\n<p>\n\u00dcldiselt on kolme t\u00fc\u00fcpi virtualiseerimist, ja k\u00f5ik toetavad KVM. 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 h\u00fcperviisori f\u00fc\u00fcsiliste seadmetega enam-v\u00e4hem nii:<\/p>\n<ol>\n<li>K\u00fclastav operatsioonis\u00fcsteem saadab oma k\u00fclalisseadmest k\u00e4su.\n<\/li>\n<li>K\u00fclastava seadme draiver v\u00f5tab k\u00e4su vastu, koostab seadme BIOS-i jaoks p\u00e4ringu ja saadab selle h\u00fcperviisorile.\n<\/li>\n<li>H\u00fcperviisori protsess t\u00f5lgendab k\u00e4su f\u00fc\u00fcsilise seadme k\u00e4suks, muutes selle sealhulgas ka turvalisemaks.\n<\/li>\n<li>F\u00fc\u00fcsilise seadme draiver v\u00f5tab muudetud k\u00e4su vastu ja saadab selle juba f\u00fc\u00fcsilisele seadmele.\n<\/li>\n<li>K\u00e4skude t\u00e4itmise tulemused l\u00e4hevad tagasi sama teed pidi. \n<\/li>\n<\/ol>\n<p>\nEdastus v\u00f5imaldab emuleerida mistahes seadet ja ei n\u00f5ua operatsioonis\u00fcsteemi tuuma erikoolitust. Kuid selle hinnaks on peamiselt j\u00f5udlus. <\/p>\n<p><b>Riistvaraline virtualiseerimine<\/b>. Sellisel juhul m\u00f5istab seade riistvaral tasandil operatsioonis\u00fcsteemilt saadud k\u00e4ske. See on k\u00f5ige kiire ja parem meetod. Kahjuks ei toeta seda k\u00f5ik f\u00fc\u00fcsilised seadmed, h\u00fcperviisorid ja k\u00fclgoperatsioonis\u00fcsteemid. Hetkel on peamised seadmed, mis toetavad riistvaralist virtualiseerimist, protsessorid.<\/p>\n<p><b>Paravirtualiseerimine (paravirtualization)<\/b>. K\u00f5ige levinum variant KVM-i p\u00f5hjal p\u00f5hinevast virtualiseerimistest ja \u00fcldiselt k\u00f5ige levinum virtualiseerimismood, mida kasutatakse k\u00fclgoperatsioonis\u00fcsteemide jaoks. Selle spetsiifilisus seisneb selles, et teatavate h\u00fcperviisori alams\u00fcsteemidega (n\u00e4iteks v\u00f5rgu- v\u00f5i diskihalduss\u00fcsteem) t\u00f6\u00f6tamine v\u00f5i m\u00e4lulehtede jaotamine toimub h\u00fcperviisori API kaudu, ilma madala taseme k\u00e4skude t\u00f5lkimata. Selle virtualiseerimismeetodi puuduseks on vajadus modifitseerida k\u00fclgoperatsioonis\u00fcsteemi tuuma, et see saaks suhelda h\u00fcperviisoriga selle API kaudu. Kuid tavaliselt lahendatakse see spetsiaalsete draiverite installimisega k\u00fclgoperatsioonis\u00fcsteemi. 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 korral on f\u00fc\u00fcsilise seadmeni j\u00f5udmine v\u00f5rreldes translatsiooniga m\u00e4rkimisv\u00e4\u00e4rselt l\u00fchem, kuna k\u00e4sud saadetakse otse virtuaalmasinast h\u00fcpervisori protsessorile, mis asub hostis. See v\u00f5imaldab kiirendada k\u00f5iki juhiseid virtuaalmasinas. KVM-i puhul vastutab selle eest virtio API, mis t\u00f6\u00f6tab ainult teatud seadmete, n\u00e4iteks v\u00f5rgu- v\u00f5i kettaadapterite, jaoks. Just seet\u00f5ttu paigaldatakse virtuaalmasinate sisse virtio draiverid. <\/p>\n<p>Selle kiirete tulemuste tagaj\u00e4rg on see, et mitte k\u00f5ik protsessid, mis toimuvad virtuaalmasinas, ei j\u00e4\u00e4 sinna. See loob m\u00f5ned eriefektid, mis v\u00f5ivad viia steal'i tekkimiseni. Soovitan alustada selle teema p\u00f5hjalikku uurimist <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/239238\/\">Virtuaalsete sisend-v\u00e4ljad API: virtio<\/a><\/noindex>.<\/p>\n<h3>2.3. \u201e\u00d5iglane\u201c ajastamine<\/h3>\n<p>\nVirtuaalmasin h\u00fcpervisori peal on tegelikult tavaline protsess, mis j\u00e4rgib ressursside jaotamise seadusi Linuxi tuumas, seega vaatame seda l\u00e4hemalt. <\/p>\n<p>Linuxis kasutatakse nn CFS-i, Completely Fair Scheduler, alates kernist 2.6.23, mis on muutunud vaikimisi ajakava t\u00e4itjaks. Selle algoritmi m\u00f5istmiseks v\u00f5ib lugeda Linux Kernel Architecture v\u00f5i allikaid. CFS olemus seisneb protsessorite aja jaotamises protsesside vahel vastavalt nende t\u00e4itmise kestusele. Mida rohkem protsessoriaega vajab protsess, seda v\u00e4hem seda aega ta saab. See tagab, et k\u00f5ik protsessid saavad \"ausalt\" t\u00f6\u00f6tada - et \u00fcks protsess ei h\u00f5ivaks pidevalt k\u00f5iki protsessoreid ja et teised protsessid saaksid samuti t\u00f6\u00f6tada. <\/p>\n<p>M\u00f5nikord viib see paradigma huvitavate artefaktide tekkimiseni. Pikaajalised Linuxi kasutajad m\u00e4letavad kindlasti, kuidas tavaline tekstiredaktor k\u00fclmus laua peal ressursimahukate rakenduste, nagu kompilaatori, k\u00e4ivitamise ajal. See juhtus, sest mitte ressursimahukad \u00fclesanded lauaarvutirakendustes konkureerisid \u00fclesannetega, mis kasutasid aktiivselt ressursse, nagu kompilaator. CFS arvab, et see ei ole aus, seet\u00f5ttu peatab see perioodiliselt tekstiredaktori ja laseb protsessoril 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 protsessoriaja jaotamise omadusi on veel. Tegelikult ei r\u00e4\u00e4gi see loeng CFS-i probleemidest, vaid toob t\u00e4helepanu sellele, et \"aus\" protsessoriaja jaotamine ei ole k\u00f5ige lihtsam \u00fclesanne.<\/p>\n<p>Teine oluline aspekt ajakava koostajas on eelnev \u00f5igus (preemption). Seda on vaja, et t\u00f5rjuda liialt palju ressursse kasutanud protsess v\u00e4lja protsessorilt ja anda v\u00f5imalus teistele. Protsessi t\u00f5rjumist nimetatakse konteksti vahetuseks (context switching), kus protsessori konteksti s\u00e4ilitamine on vajalik: steki seisund, registrid ja muu, p\u00e4rast mida protsess saadetakse ootama ning tema kohale astub teine. See on operatsioon, mis on OS-i jaoks kulukas ja mida kasutatakse harva, kuid sisuliselt ei ole sellega midagi halba. Sage konteksti vahetus v\u00f5ib viidata probleemile OS-is, kuid tavaliselt toimub see pidevalt ega viita millegi eriliselt valele.<\/p>\n<p>Pika pikk lugu on vajalik \u00fche fakti selgitamiseks: mida rohkem ressursse p\u00fc\u00fcab protsessor tarbida Linuxi \u00f5iglasel ajakavandajal, seda kiiremini ta peatatakse, et teised protsessid saaksid ka t\u00f6\u00f6tada. Kas see on \u00f5ige v\u00f5i vale \u2014 keeruline k\u00fcsimus, millele erinevate koormuste korral vastatakse erinevalt. Windowsis oli ajakavandaja pikka aega suunatud t\u00f6\u00f6laudrakenduste prioriteetsusele, mist\u00f5ttu v\u00f5isid taustaprocessid takerduda. Sun Solarisel oli viis erinevat ajakavandajate klassi. Kui virtuaaliseerimine k\u00e4ivitus, lisati kuues, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/man.shtml?topic=FSS&amp;category=7&amp;russian=4\">Fair share scheduler<\/a><\/noindex>, sest eelnevad viis t\u00f6\u00f6tasid Solaris Zone'ide virtualiseerimisega ebapiisavalt. Soovitan selle teema s\u00fcvitsi uurimise alustada raamatutest nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Solaris-Internals-OpenSolaris-Kernel-Architecture\/dp\/0131482092\/\">Solaris Internals: Solaris 10 and 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 steal?<\/h3>\n<p>\nSteali j\u00e4lgimine virtuaalmasinas, nagu ka muid protsessorimeetreid, on lihtne: saab kasutada k\u00f5iki protsessorimeetrite kogumise vahendeid. Peamine, et virtuaalmasin oleks Linuxil. Windows ei paku selle kohta oma kasutajatele mingit teavet. \ud83d\ude41<\/p>\n<p><img decoding=\"async\" alt=\"Varastage: kes varastab virtuaalsetelt masinatelt protsessoriskeemi\" src=\"\/wp-content\/uploads\/2019\/04\/3c7cd04f73fd6a74b86af81382090b69.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Top k\u00e4sk: protsessori koormuse detailid, k\u00f5ige paremas veerus \u2014 steal<\/i><\/p>\n<p>Raskused tekivad, kui proovitakse seda teavet h\u00fcperviisori kaudu saada. Tuleks proovida ennustada steal'i hostmasinas, n\u00e4iteks Load Average (LA) parameetri p\u00f5hjal \u2014 keskmine protsesside arv, mis ootab t\u00e4itmist. Selle parameetri arvutamine pole lihtne, kuid \u00fcldiselt, kui LA, normaaliseeritud protsessori l\u00f5imede arvu j\u00e4rgi, on \u00fcle 1, siis on Linuxi server millegagi \u00fcle koormatud. <\/p>\n<p>Keda need protsessid ootavad? Ilmselge vastus on \u2014 protsessorit. Kuid see vastus ei ole t\u00e4pne, kuna m\u00f5nikord on protsessor vaba, aga LA on v\u00e4ga k\u00f5rge. M\u00f5elge, <noindex><a rel=\"nofollow\" href=\"https:\/\/serverfault.com\/questions\/911976\/redhat-nfs-cluster-high-load-average-suddenly\">kuidas NFS lakkab toimimast ja kuidas selle ajal LA t\u00f5useb.<\/a><\/noindex>. Umbes nii v\u00f5ib olla ka ketta ja teiste sisenemis-\/v\u00e4ljumisseadmetega. Kuid tegelikult v\u00f5ivad protsessid oodata, kuni l\u00f5ppeb mis tahes blokeering, olgu see f\u00fc\u00fcsiline, mis on seotud sisenemis-\/v\u00e4ljumisseadmest, v\u00f5i loogiline, n\u00e4iteks mutex. Siia kuuluvad ka blokeeringud riistvara tasandil (sama vastus kettalt) v\u00f5i loogika tasandil (nn blokeerimisprimitivide hulka kuuluvad mitmed elemendid, mutex adaptive ja spin, semaforid, tingimuslikud muutujad, rw lukud, ipc lukud\u2026).<\/p>\n<p>Veel \u00fcks LA erip\u00e4ra on see, et seda peetakse keskmiseks v\u00e4\u00e4rtuseks operatsioonis\u00fcsteemi piires. N\u00e4iteks kui 100 protsessi konkureerib \u00fche faili \u00fcle, siis LA=50. Niiv\u00f5rd suur v\u00e4\u00e4rtus n\u00e4ib viitavat, et operatsioonis\u00fcsteem on kehvas seisus. Kuid teatud valesti kirjutatud koodi puhul v\u00f5ib see olla normaalne seisund, kus halb on vaid sellel koodil, samas kui teised protsessid operatsioonis\u00fcsteemis ei kannata. <\/p>\n<p>Selle keskmistamise t\u00f5ttu (mille korral ei tohiks kuluda v\u00e4hem kui minut), on LA n\u00e4itajate p\u00f5hjal midagi m\u00e4\u00e4rata \u00fcsna keeruline ettev\u00f5tmine ning tulemused on konkreetsetes olukordades \u00fcsna ebamugavad. Kui \u00fcritate s\u00fcveneda, avastate, et Wikipedias ja muudes kergesti ligip\u00e4\u00e4setavates allikates on kirjeldatud ainult k\u00f5ige lihtsamaid juhtumeid, ilma s\u00fcgava selgituseta protsessi. K\u00f5ik huvilised, suunan taas, <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 edasised lingid. Neile, kes ei viitsi inglise keeles lugeda \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/335326\/\">tema populaarse artikli t\u00f5lge LA-st<\/a><\/noindex>.<\/p>\n<h2>3. Eriefektid<\/h2>\n<p>\nN\u00fc\u00fcd peatume steal esinemise peamistel juhtudel, millega oleme kokku puutunud. R\u00e4\u00e4gin, kuidas need tulenevad eeltoodust ja kuidas need on seotud h\u00fcperviisori n\u00e4itajatega.<\/p>\n<p><b>Taaskasutamine<\/b>. K\u00f5ige lihtsam ja levinum: h\u00fcpervizor on \u00fclekoormatud. T\u00f5epoolest, palju jooksvaid virtuaalmasinaid, suur protsessoritarbimine nende sees, suur konkurents, LA-utilisatsioon rohkem kui 1 (protsessorite l\u00f5ime j\u00e4rgi). K\u00f5ikides virtuaalmasinates on aeglustumine. H\u00fcpervizorilt saadud steal kasvab samuti, tuleb koormust \u00fcmber jaotada v\u00f5i kedagi v\u00e4lja l\u00fclitada. \u00dcldiselt on k\u00f5ik loogiline ja arusaadav.<\/p>\n<p><b>Paravirtuaalsus vs \u00fcksikud instantsid<\/b>. H\u00fcpervizoril on \u00fcksainus virtuaalmasin, see tarbib vaid v\u00e4ikest osa h\u00fcpervizorist, kuid tekitab suurt koormust sisendi\/v\u00e4ljundi osas, n\u00e4iteks ketta kaudu. Ja kuskilt tekib selles v\u00e4ike steal, kuni 10 % (nagu n\u00e4itavad mitmed l\u00e4biviidud eksperimendid).<\/p>\n<p>Huvi on huvitav. Steal ilmneb just seet\u00f5ttu, et fiturite tasemel virtuaaldrivereid blokeeritakse. Virtuaalmasinas vallandatakse katkestus, mida t\u00f6\u00f6tleb draiver, ja see j\u00f5uab h\u00fcpervisori. Katkestuse t\u00f6\u00f6tlemise t\u00f5ttu tundub virtuaalmasinale, et see on edastatud p\u00e4ring, olles t\u00e4itmiseks valmis ja protsessorit ootamas, kuid protsessoriaega ei anta. Virtuaalmasin arvab, et see aeg on varastatud. <\/p>\n<p>See juhtub vahetult enne puhvri saatmist, mis suundub h\u00fcpervisori kernel space'i, ja me hakkame seda ootama. Kuigi virtuaalmasina vaatenurgast peaks see kohe tagasi tulema. Seega, steal'i arvutamise algoritmi j\u00e4rgi peetakse seda aega varastatuks. T\u00f5en\u00e4oliselt v\u00f5ivad antud olukorras olla ka teised mehhanismid (n\u00e4iteks m\u00f5ne muu s\u00fcssystemi kutsumise t\u00f6\u00f6tlemine), kuid need ei tohiks oluliselt erineda.<\/p>\n<p><b>Planeerija k\u00f5rgekoormuslike virtuaalmasinate vastu<\/b>. Kui \u00fcks virtuaalmasin kannatab steal'i all rohkem kui teised, on see seotud just ajakava juhtimisega. Mida tugevamalt protsess koormab protsessorit, seda kiiremini ajakava juhib selle minema, et teised saaksid samuti t\u00f6\u00f6tada. Kui virtuaalmasin tarbib v\u00e4he, ei n\u00e4e ta sisuliselt steal'i: tema protsess istub ja ootab ning tal on vaja anda rohkem aega. Kui virtuaalmasin genereerib maksimaalset koormust k\u00f5igil oma s\u00fcdamikel, t\u00f5ugatakse teda sagedamini protsessorilt minema ning p\u00fc\u00fctakse mitte anda liiga palju aega. <\/p>\n<p>Olukord on veel hullem, kui virtuaalmasina sees olevad protsessid p\u00fc\u00fcavad saada rohkem protsessorit, kuna nad ei suuda andmeid t\u00f6\u00f6delda. Siis annab h\u00fcpervise s\u00fcsteem, t\u00e4nu \u00f5iglaselt teostatavale optimeerimisele, j\u00e4rjest v\u00e4hem protsessorit. See protsess toimub laviinina ja steal t\u00f5useb taevasse, kuigi teised virtuaalmasinad ei pruugi seda peaaegu \u00fcldse m\u00e4rgata. Mida rohkem on s\u00fcdamikke, seda halvem on masin, mis on jagamise alla sattunud. \u00dcldiselt kannatavad k\u00f5ige rohkem k\u00f5rge koormusega virtuaalmasinad, millel on palju s\u00fcdamikke.<\/p>\n<p><b>Madala LA, kuid on steal<\/b>. Kui LA on umbes 0,7 (st, h\u00fcpervisor paistab alakoormatud), siis aga eraldi virtuaalmasinate sees on m\u00e4rgata steal:<\/p>\n<ul>\n<li>Juba eelnevalt kirjeldatud variant paravirtualiseerimisega. Virtuaalmasin v\u00f5ib saada metrikat, mis viitab steal'ile, kuigi h\u00fcpervisoril on k\u00f5ik korras. Meie katsete tulemuste p\u00f5hjal ei \u00fcleta selline steal 10% ja ei tohiks oluliselt m\u00f5jutada rakenduste j\u00f5udlust virtuaalmasinas.\n<\/li>\n<li>LA parameetrid on vale arvutamisega. T\u00e4psemalt, iga konkreetse hetke arvutamine on \u00f5ige, kuid \u00fche minuti keskmistamine annab alahinnatud tulemuse. N\u00e4iteks, kui \u00fcks virtuaalmasin kasutab kolmandikku h\u00fcpervisori protsessoritest poole minuti jooksul, siis LA h\u00fcpervisoril \u00fche minuti jooksul on 0,15; neli sellist virtuaalmasinat, mis t\u00f6\u00f6tavad samaaegselt, annavad 0,6. Ja see, et iga\u00fche peal on pool minutit olnud \u00e4\u00e4rmuslik steal 25% juures LA n\u00e4itajal, enam v\u00e4lja ei t\u00f5mba.\n<\/li>\n<li>Kuna scheduler otsustas, et keegi s\u00f6\u00f6b liiga palju, ja et see keegi peab ootama. Samal ajal l\u00fclitan ma konteksti, t\u00f6\u00f6tlen katkestusi ja teen muid olulisi s\u00fcsteemitegevusi. L\u00f5puks on \u00fcks virtuaalmasin ilma probleemideta, samas kui teised kannatavad t\u00f5sise j\u00f5udluslanguse all.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>4. Teised moonutused<\/h2>\n<p>\nOn veel miljon p\u00f5hjust, miks virtuaalmasinas aus protsessoriaeg v\u00f5ib moonutada. N\u00e4iteks toovad h\u00fcpertreading ja NUMA sisse keerukusi arvutustes. Need segavad l\u00f5plikult protsesside t\u00e4itmiseks tuuma valiku, kuna scheduler kasutab koefitsiiente \u2013 kaalu, mis muudab konteksti vahetamise korral arvestuse veel keerukamaks.<\/p>\n<p>Tehnoloogiatest, nagu turbo-boost v\u00f5i energias\u00e4\u00e4sture\u017eiim, v\u00f5ivad tekkida moonutused, mis v\u00f5ivad serveri ressursikasutuse arvestamisel kunstlikult t\u00f5sta v\u00f5i alandada sagedust v\u00f5i isegi ajakvantit. Turbo-boosti aktiveerimine v\u00e4hendab \u00fche protsessori l\u00f5ime j\u00f5udlust teise l\u00f5ime j\u00f5udluse suurenemise t\u00f5ttu. Sel hetkel ei edastata virtuaalmasinale teavet protsessori hetkesageduse kohta ning ta arvab, et keegi varastab tema aega (n\u00e4iteks k\u00fcsis ta 2 GHz, kuid sai poole v\u00e4hem). <\/p>\n<p>\u00dcldiselt v\u00f5ib moonutuste p\u00f5hjuseid olla palju. Konkreetse s\u00fcsteemi puhul v\u00f5ite avastada midagi muud. Alustada on parem raamatutest, mille lingid ma \u00fclal olen jaganud, ja statistika kogumist h\u00fcpervisorilt selliste utiliitide nagu perf, sysdig, systemtap kaudu, mida 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>Teatud kogus steal'i v\u00f5ib tekkida h\u00fcperv\u00f5imaluse t\u00f5ttu ja seda v\u00f5ib pidada normaalseks. Internetis r\u00e4\u00e4gitakse, et see v\u00e4\u00e4rtus v\u00f5ib ulatuda 5\u201310%-ni. See s\u00f5ltub rakendustest virtuaalmasinas ja sellest, millist koormust nad f\u00fc\u00fcsilistele seadmetele annavad. Siinkohal on oluline t\u00e4helepanu p\u00f6\u00f6rata sellele, kuidas rakendused virtuaalmasinates tunnevad.\n<\/li>\n<li>H\u00fcperviisori koormuse ja steal'i suhe virtuaalmasinas ei ole alati \u00fcheselt m\u00f5istetav, m\u00f5lemad steal'i hinnangud v\u00f5ivad konkreetses olukorras olla ekslikud erinevate koormuste korral.\n<\/li>\n<li>Planeerija ei armasta protsesse, mis palju k\u00fcsivad. Ta p\u00fc\u00fcab anda v\u00e4hem neile, kes k\u00fcsivad rohkem. Suured virtuaalmasinad \u2014 on kurjast.\n<\/li>\n<li>V\u00e4hene steal v\u00f5ib olla normaalne ka ilma h\u00fcperv\u00f5imaluseta (arvesse v\u00f5ttes koormust virtuaalmasinas, naabrite koormuse erip\u00e4ra, koormuse jaotust l\u00f5imede vahel ja muid tegureid).\n<\/li>\n<li>Kui soovite v\u00e4lja selgitada steal konkreetse s\u00fcsteemi sees, tuleb uurida erinevaid valikuid, koguda meetmeid, hoolikalt neid anal\u00fc\u00fcsida ja m\u00f5elda, kuidas koormust \u00fchtlaselt jaotada. Iga juhtumi puhul v\u00f5ivad esineda k\u00f5rvalekalded, mida tuleb katsetega kinnitada v\u00f5i j\u00e4lgida s\u00fcdamiku debug'eris.\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.0.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.0.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 virtuaalide protsessoriaega | 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}]}}