{"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\/hr\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya","title":{"rendered":"Steal: tko krade procesorsko vrijeme od virtualnih ma\u0161ina","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Steal: tko krade procesorsko vrijeme od virtualnih ma\u0161ina\" src=\"\/wp-content\/uploads\/2019\/04\/23cac5d3cc3295dc6f1014e9fda36b89.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBok! \u017delim objasniti jednostavnim jezikom mehaniku nastanka steala unutar virtualnih ma\u0161ina i neka nevidljiva obilje\u017eja koja smo otkrili tijekom istra\u017eivanja na koje sam se kao tehni\u010dka direktorica oblaka morala fokusirati. <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>. Platforma radi na KVM-u.<\/p>\n<p>CPU steal time \u2014 to je vrijeme u kojem virtualna ma\u0161ina ne dobiva resurse procesora za svoje izvr\u0161avanje. Ovo vrijeme se ra\u010duna samo u gostuju\u0107im operativnim sustavima unutar virtualizacijskih okru\u017eenja. Razlozi zbog kojih se ti dodijeljeni resursi gube su, kao i u \u017eivotu, prili\u010dno magloviti. No, odlu\u010dili smo istra\u017eiti, \u010dak smo proveli \u010ditav niz eksperimenta. Ne ka\u017eem da sada znamo sve o stealu, ali \u0107emo ispri\u010dati zanimljive stvari.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. \u0160to je steal<\/h2>\n<p>\nDakle, steal je metrika koja ukazuje na nedostatak procesorskog vremena za procese unutar virtualne ma\u0161ine. Kao \u0161to je opisano <noindex><a rel=\"nofollow\" href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/stable\/linux.git\/patch\/?id=c9aaa8957f203bd6df83b002fb40b98390bed078\">u KVM kernel patchu<\/a><\/noindex>, steal je vrijeme u kojem hipervizor izvr\u0161ava druge procese na host operativnom sustavu, iako je proces virtualne ma\u0161ine stavljen u red za izvr\u0161avanje. Drugim rije\u010dima, steal se smatra kao razlika izme\u0111u vremena kada je proces spreman za izvr\u0161avanje i vremena kada mu je dodijeljeno procesorsko vrijeme.<\/p>\n<p>Metri\u010dku vrijednost steala kernel virtualne ma\u0161ine dobiva od hipervizora. Pri tome hipervizor ne precizira koje to\u010dno druge procese izvr\u0161ava, jednostavno ka\u017ee: 'Dok sam zauzet, ne mogu ti posvetiti vrijeme.' Na KVM-u, podr\u0161ka za izra\u010dunavanje steala dodana je u <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/449657\/\">zakrpama<\/a><\/noindex>. Klju\u010dne to\u010dke su dvije: <\/p>\n<ul>\n<li>Virtualna ma\u0161ina saznaje za steal od hipervizora. Drugim rije\u010dima, iz perspektive gubitaka, za procese na samoj virtualnoj ma\u0161ini to je neizravno mjerenje koje mo\u017ee biti podlo\u017eno raznim distorzijama.\n<\/li>\n<li>Hipervizor ne dijeli s virtualnom ma\u0161inom informacije o tome \u010dime je drugim zauzet \u2014 va\u017eno je da joj ne posve\u0107uje vrijeme. Zbog toga sama virtualna ma\u0161ina ne mo\u017ee uo\u010diti distorzije u pokazatelju steala koje bi mogle biti procijenjene prema karakteru konkurentskih procesa.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. \u0160to utje\u010de na steal<\/h2>\n<p><\/p>\n<h3>2.1. Izra\u010dunavanje steala<\/h3>\n<p>\nU su\u0161tini, steal se smatra otprilike na isti na\u010din kao i redovno vrijeme iskori\u0161tenja procesora. Informacija o tome kako se ra\u010duna iskori\u0161tenje nije mnogo. Vjerojatno zato \u0161to ve\u0107ina smatra ovo pitanje o\u010ditim. No, i ovdje postoje zamke. Za upoznavanje s ovim procesom mo\u017eete pro\u010ditati <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2017-05-09\/cpu-utilization-is-wrong.html\">\u010dlanak Brendann Gregg<\/a><\/noindex>: saznat \u0107ete o mnogim nijansama prilikom izra\u010duna iskori\u0161tenja i o situacijama kada \u0107e taj izra\u010dun biti pogre\u0161an iz sljede\u0107ih razloga:<\/p>\n<ul>\n<li>Pregrijavanje procesora, pri \u010demu se propu\u0161taju ciklusi.\n<\/li>\n<li>Uklju\u010divanje\/isklju\u010divanje turbo boosta, kao rezultat \u010dega se mijenja takta\u0161ka frekvencija procesora.\n<\/li>\n<li>Promjena trajanja kvanta vremena, koja se doga\u0111a prilikom kori\u0161tenja tehnologija u\u0161tede energije procesora, poput SpeedStep.\n<\/li>\n<li>Problem izra\u010duna prosjeka: procjena iskori\u0161tenja tijekom jedne minute na razini 80 % mo\u017ee prikriti kratkotrajan porast na 100 %.\n<\/li>\n<li>Cikli\u010dna blokada (spin lock) uzrokuje da je procesor iskori\u0161ten, ali korisni\u010dki proces ne vidi napredak u svom izvr\u0161enju. Kao rezultat, izra\u010dunata iskori\u0161tenost procesora od strane procesa \u0107e biti sto posto, iako fizi\u010dki procesorsko vrijeme proces ne mo\u017ee koristiti.\n<\/li>\n<\/ul>\n<p>\nNisam prona\u0161ao \u010dlanak koji opisuje sli\u010dan izra\u010dun za steal (ako znate \u2013 podijelite u komentarima). No, prema izvorima, mehanizam izra\u010duna je isti kao i za iskori\u0161tenje. Jednostavno se u jezgru dodaje jo\u0161 jedan broja\u010d, izravno za proces KVM (proces virtualne ma\u0161ine), koji broji trajanje boravka KVM procesa u stanju \u010dekanja procesorskog vremena. Broja\u010d uzima informacije o procesoru iz njegove specifikacije i provjerava jesu li svi njegovi takti iskori\u0161teni od strane virtualnog procesa. Ako jesu, smatramo da je procesor bio anga\u017eiran samo na procesu virtualne ma\u0161ine. U suprotnom, obavje\u0161tavamo da je procesor bio anga\u017eiran ne\u010dim drugim, do\u0161lo je do steala. <\/p>\n<p>Proces izra\u010duna steala podlo\u017ean je istim problemima kao i obi\u010dni izra\u010dun iskori\u0161tenja. Ne mo\u017ee se re\u0107i da takvi problemi \u010desto nastaju, ali izgledaju obeshrabruju\u0107e.<\/p>\n<h3>2.2. Tipovi virtualizacije na KVM<\/h3>\n<p>\nOp\u0107enito, postoje tri tipa virtualizacije, i svi su podr\u017eani od strane KVM-a. Od tipa virtualizacije mo\u017ee ovisiti mehanizam nastanka steala.<\/p>\n<p><b>Prijevod<\/b>. U tom slu\u010daju rad operativnog sustava virtualne ma\u0161ine s fizi\u010dkim ure\u0111ajima hipervizora doga\u0111a se otprilike ovako:<\/p>\n<ol>\n<li>Gostuju\u0107i operativni sustav \u0161alje naredbu svom gostuju\u0107em ure\u0111aju.\n<\/li>\n<li>Voza\u010d gostuju\u0107eg ure\u0111aja prima naredbu, formira zahtjev za BIOS ure\u0111aja i \u0161alje ga hipervizoru.\n<\/li>\n<li>Proces hipervizora prevodi naredbu u naredbu za fizi\u010dki ure\u0111aj, \u010dine\u0107i je, izme\u0111u ostalog, sigurnijom.\n<\/li>\n<li>Voza\u010d fizi\u010dkog ure\u0111aja prima modificiranu naredbu i \u0161alje je ve\u0107 u sam fizi\u010dki ure\u0111aj.\n<\/li>\n<li>Rezultati izvr\u0161enja naredbi vra\u0107aju se istim putem. \n<\/li>\n<\/ol>\n<p>\nPrednost prevoditeljske tehnike je u tome \u0161to omogu\u0107uje emulaciju bilo kojeg ure\u0111aja i ne zahtijeva posebnu pripremu jezgre operativnog sustava. No, za to se prvenstveno pla\u0107a brzinom. <\/p>\n<p><b>Hardverska virtualizacija<\/b>. U tom slu\u010daju ure\u0111aj na hardverskoj razini razumije naredbe iz operativnog sustava. To je najbr\u017ei i najbolji na\u010din. No, na\u017ealost, podr\u017eava ga daleko ne svaki fizi\u010dki ure\u0111aj, hipervizor ili gostuju\u0107i operativni sustav. Trenutno su glavni ure\u0111aji koji podr\u017eavaju hardversku virtualizaciju procesori.<\/p>\n<p><b>Paravirtualizacija (paravirtualization)<\/b>. Naj\u010de\u0161\u0107a varijanta virtualizacije ure\u0111aja na KVM-u i op\u0107enito najra\u0161ireniji na\u010din virtualizacije za gostuju\u0107e operativne sustave. Njegova osobina je \u0161to rad s nekim podsustavima hipervizora (na primjer, s mre\u017enim ili diskovnim stakom) ili dodjela stranica memorije se odvija kori\u0161tenjem API-ja hipervizora, bez prevo\u0111enja nisko razinskih naredbi. Nedostatak ovog pristupa virtualizaciji je potreba za modifikacijom jezgre gostuju\u0107eg operativnog sustava, kako bi mogao komunicirati s hipervizorom putem ovog API-ja. No, to se obi\u010dno rje\u0161ava instalacijom posebnih voza\u010da na gostuju\u0107i operativni sustav. U KVM-u se taj API naziva <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/developerworks\/library\/l-virtio\/index.html\">virtio API<\/a><\/noindex>.<\/p>\n<p>Kod para-virtualizacije, u usporedbi s prevo\u0111enjem, put do fizi\u010dkog ure\u0111aja zna\u010dajno se skra\u0107uje slanjem naredbi iz virtualne ma\u0161ine izravno u proces hipervizora na hostu. To omogu\u0107uje ubrzanje izvr\u0161avanja svih instrukcija unutar virtualne ma\u0161ine. U KVM-u za to je zadu\u017een virtio API, koji radi samo za odre\u0111ene ure\u0111aje, poput mre\u017enog ili diskovnog adaptera. Zato se unutar virtualnih ma\u0161ina instaliraju virtio voza\u010di. <\/p>\n<p>S druge strane, ovo ubrzanje zna\u010di da svi procesi koji se izvode unutar virtualne ma\u0161ine ne ostaju isklju\u010divo unutar nje. To stvara neke posebne efekte koji mogu dovesti do pojave na steal. Preporu\u010dujem da detaljno prou\u010davanje ove teme zapo\u010dnete s <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/239238\/\">API za virtualni I\/O: virtio<\/a><\/noindex>.<\/p>\n<h3>2.3. 'Pravedno' zakazivanje<\/h3>\n<p>\nVirtualka na hipervizoru zapravo je obi\u010dan proces koji podlije\u017ee pravilima zakazivanja (distribucije resursa izme\u0111u procesa) u Linux jezgru, stoga \u0107emo je detaljnije razmotriti. <\/p>\n<p>U Linuxu se koristi tzv. CFS, Completely Fair Scheduler, koji je od verzije jezgre 2.6.23 postao zadani planer. Kako biste se bolje upoznali s ovim algoritmom, mo\u017eete pro\u010ditati Linux Kernel Architecture ili izvorne kodove. Su\u0161tina CFS-a le\u017ei u raspodjeli procesorskog vremena izme\u0111u procesa u zavisnosti od trajanja njihovog izvr\u0161enja. \u0160to vi\u0161e procesorskog vremena zahtijeva proces, to manje tog vremena dobija. To jam\u010di 'pravedno' izvr\u0161avanje svih procesa \u2014 kako jedan proces ne bi konstantno zauzimao sve procesore, a ostali procesi tako\u0111er mogli biti izvr\u0161eni. <\/p>\n<p>Ponekad ova paradigma dovodi do zanimljivih artefakata. Dugi korisnici Linux-a sigurno se sje\u0107aju zamrzavanja obi\u010dnog tekstualnog urednika na desktopu prilikom pokretanja resursno zahtjevnih aplikacija poput kompajlera. To se doga\u0111alo jer su nerazmjerno zahtjevni zadaci desktop aplikacija konkurirali zadacima koji aktivno tro\u0161e resurse, poput kompajlera. CFS smatra da je to nepravedno, stoga povremeno zaustavlja tekstualni urednik i omogu\u0107ava procesoru da obrade zadatke kompajlera. To je ispravljeno pomo\u0107u mehanizma <noindex><a rel=\"nofollow\" href=\"https:\/\/marc.info\/?l=linux-kernel&amp;m=128978361700898\">sched_autogroup<\/a><\/noindex>, ali su ostale mnoge zna\u010dajke raspodjele procesorskog vremena izme\u0111u zadataka ostale. U su\u0161tini, ovo nije pri\u010da o tome kako je sve lo\u0161e u CFS-u, ve\u0107 poku\u0161aj skrenuti pa\u017enju na to da je \"po\u0161tena\" raspodjela procesorskog vremena \u2013 sve samo ne trivijalan zadatak.<\/p>\n<p>Jo\u0161 jedna va\u017ena stvar u scheduleru je preempcija. To je potrebno da se nahranjeni proces izbaci s procesora i omogu\u0107i drugima da rade. Proces izbacivanja zove se prebacivanje konteksta, ili context switching. Prilikom toga se \u010duva cijeli kontekst zadatka: stanje steka, registri i ostalo, nakon \u010dega se proces \u0161alje na \u010dekanje, a na njegovo mjesto dolazi drugi. To je skupa operacija za OS, i koristi se rijetko, ali u su\u0161tini u tome nema ni\u0161ta lo\u0161e. \u010cesta prebacivanja konteksta mogu ukazivati na problem u OS-u, ali obi\u010dno se odvijaju neprekidno i ne ukazuju ni na \u0161to posebno.<\/p>\n<p>Ova duga pri\u010da potrebna je za obja\u0161njenje jednog fakto: \u0161to vi\u0161e resursa procesora poku\u0161ava potro\u0161iti proces u po\u0161tenom scheduleru Linuxa, to \u0107e br\u017ee biti zaustavljen kako bi i drugi procesi mogli raditi. Da li je to ispravno ili ne \u2014 slo\u017eeno je pitanje koje se daje razli\u010dito rje\u0161ava u zavisnosti od optere\u0107enja. U Windowsima je do nedavno scheduler bio orijentiran na prioritetnu obradu desktop aplikacija, zbog \u010dega su pozadinski procesi mogli zakazivati. U Sun Solaris-u postojalo je pet razli\u010ditih klasa schedulera. Kada je pokrenuta virtualizacija, dodana je \u0161esta. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/man.shtml?topic=FSS&amp;category=7&amp;russian=4\">Plan raspodjele po fer na\u010delu<\/a><\/noindex>, budu\u0107i da je prethodnih pet neadekvatno radilo s virtualizacijom Solaris Zones. Preporu\u010dujem da detaljno prou\u010dite ovo pitanje po\u010dev\u0161i od knjiga poput <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Solaris-Internals-OpenSolaris-Kernel-Architecture\/dp\/0131482092\/\">Solaris Internals: Solaris 10 i OpenSolaris Kernel Architecture<\/a><\/noindex> ili <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. Kako pratiti steal?<\/h3>\n<p>\nPra\u0107enje steala unutar virtualne ma\u0161ine, kao i bilo koje druge procesorske metrike, jednostavno je: mo\u017eete koristiti bilo koji alat za prikupljanje metrika procesora. Najva\u017enije je da virtualka bude na Linuxu. Windows iz nekog razloga ne pru\u017ea takve informacije svojim korisnicima. \ud83d\ude41<\/p>\n<p><img decoding=\"async\" alt=\"Steal: tko krade procesorsko vrijeme od virtualnih ma\u0161ina\" src=\"\/wp-content\/uploads\/2019\/04\/3c7cd04f73fd6a74b86af81382090b69.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Izlaz komande top: detaljizacija optere\u0107enja procesora, u ekstremnoj desnoj koloni \u2014 steal<\/i><\/p>\n<p>Pote\u0161ko\u0107e se javljaju prilikom poku\u0161aja dobivanja ovih informacija s hipervizora. Mo\u017eete poku\u0161ati predvidjeti steal na host ma\u0161ini, na primjer, prema parametru Load Average (LA) \u2014 prosje\u010dne vrijednosti broja procesa koji \u010dekaju u redu za izvr\u0161enje. Metodologija izra\u010dunavanja ovog parametra nije jednostavna, ali op\u0107enito, ako je normalizirani LA po broju CPU niti ve\u0107i od 1, to ukazuje da je server s Linuxom ne\u010dim preoptere\u0107en. <\/p>\n<p>\u010cega se svi ti procesi zapravo \u010dekaju? O\u010digledan odgovor je \u2014 procesora. No, odgovor nije potpuno ta\u010dan, jer ponekad je procesor slobodan, a LA se povi\u0161ava. Sjetite se, <noindex><a rel=\"nofollow\" href=\"https:\/\/serverfault.com\/questions\/911976\/redhat-nfs-cluster-high-load-average-suddenly\">kako NFS pada i pri tome raste LA<\/a><\/noindex>. Sli\u010dno mo\u017ee biti i s diskom i drugim ure\u0111ajima za ulaz\/izlaz. No, u stvarnosti, procesi mogu \u010dekati zavr\u0161etak bilo koje blokade, bilo fizi\u010dke, vezane uz ure\u0111aj za ulaz\/izlaz, ili logi\u010dke, poput mutexa. Tu se uklju\u010duju blokade na razini hardvera (poput odgovora od diska), ili logike (takozvanih blokiraju\u0107ih primitv, koji obuhva\u0107aju razne entitete, adaptivni mutexi i spin, semafori, uvjetne varijable, rw zaklju\u010davanja, ipc zaklju\u010davanja\u2026).<\/p>\n<p>Jo\u0161 jedna osobina LA je ta da se ona ra\u010duna kao prosje\u010dna vrijednost kroz operacijski sustav. Na primjer, 100 procesa konkurira za jednu datoteku, i tada LA=50. Ova velika vrijednost, \u010dini se, ukazuje da operativnom sustavu nije dobro. Me\u0111utim, za neki krivo napisan kod to mo\u017ee biti normalno stanje, dok je lo\u0161e samo njemu, a drugi procesi u operativnom sustavu ne pate. <\/p>\n<p>Zbog ovog prosjeka (naime ne manje od jedne minute), definiranje bilo \u010dega na temelju pokazatelja LA \u2014 nije najzahvalniji zadatak, s prili\u010dno neizvjesnim rezultatima u konkretnim slu\u010dajevima. Ako poku\u0161ate doku\u010diti, otkrit \u0107ete da su u \u010dlancima na Wikipediji i drugim dostupnim resursima opisani samo najjednostavniji slu\u010dajevi, bez dubokog obja\u0161njenja procesa. Sve zainteresirane opet \u0161aljem, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2017-08-08\/linux-load-averages.html\">ovdje, Brendannu Greggu<\/a><\/noindex> \u00a0\u2014 dalje putem poveznica. Tko se ne \u017eeli mu\u010diti s engleskim \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/335326\/\">prijevod njegove popularne \u010dlanka o LA<\/a><\/noindex>.<\/p>\n<h2>3. Spektakularni efekti<\/h2>\n<p>\nSada \u0107emo se fokusirati na glavne slu\u010dajeve pojave steala, s kojima smo se susretali. Ispri\u010dat \u0107u kako proistje\u010du iz svega prethodno re\u010denog i kako se odnose na pokazatelje na hipervizoru.<\/p>\n<p><b>Pereutilizacija<\/b>. Najjednostavnije i naj\u010de\u0161\u0107e: hipervizor prelazi na ponovno kori\u0161tenje. Naime, postoji mnogo pokrenutih virtualnih ma\u0161ina, visoka potro\u0161nja CPU unutar njih, velika konkurencija, iskori\u0161tenje prema LA ve\u0107e od 1 (u normalizaciji prema procesorskim nitima). Unutar svih virtualnih ma\u0161ina sve usporava. Steal, koji se prenosi s hipervizora, tako\u0111er raste, treba raspodijeliti optere\u0107enje ili nekoga isklju\u010diti. Ukratko, sve je logi\u010dno i razumljivo.<\/p>\n<p><b>Paravirtualizacija protiv usamljenih instanci<\/b>. Na hipervizoru postoji samo jedna virtualna ma\u0161ina, koja tro\u0161i mali dio, ali generira veliko optere\u0107enje po unosu\/izlazu, na primjer po disku. I odnekud u njoj se pojavljuje mali steal, do 10% (kako su pokazali neki provedeni eksperimenti).<\/p>\n<p>Zanimljiv slu\u010daj. Steal se ovdje pojavljuje upravo zbog blokada na razini paravirtualiziranih drajvera. Unutar virtualne ma\u0161ine dolazi do prekida, koji obra\u0111uje drajver i \u0161alje ga do hipervizora. Zbog obrade prekida na hipervizoru za virtualnu ma\u0161inu to izgleda kao poslan zahtjev, ona je spremna za izvr\u0161enje i \u010deka procesor, ali joj ne daju procesorskog vremena. Virtualna ma\u0161ina misli da je to vrijeme ukradeno. <\/p>\n<p>To se doga\u0111a u trenutku slanja bafera, on odlazi u kernel prostor hipervizora, i po\u010dinjemo ga \u010dekati. Iako, s gledi\u0161ta virtualne ma\u0161ine, on bi trebao odmah da se vrati. Stoga, prema algoritmu izra\u010duna steal, to vrijeme se smatra ukradenim. Vjerojatno se u ovoj situaciji mogu dogoditi i drugi mehanizmi (na primjer, obrada jo\u0161 nekih sys calls), ali oni se ne bi trebali jako razlikovati.<\/p>\n<p><b>Scheduler protiv visoko optere\u0107enih virtualnih ma\u0161ina<\/b>. Kada jedna virtualna ma\u0161ina pati od steal vi\u0161e od drugih, to je povezano upravo sa schedulerom. \u0160to vi\u0161e proces optere\u0107uje procesor, to ga scheduler br\u017ee isklju\u010duje kako bi i ostali mogli raditi. Ako virtualna ma\u0161ina tro\u0161i malo, gotovo ne\u0107e primijetiti steal: njen proces pravedno sjedi i \u010deka, treba joj dati vi\u0161e vremena. Ako virtualna ma\u0161ina proizvodi maksimalno optere\u0107enje kroz sve svoje jezgre, \u010de\u0161\u0107e je isklju\u010duju s procesora i trude se ne davati joj puno vremena. <\/p>\n<p>Jo\u0161 je gore kada procesi unutar virtualne ma\u0161ine poku\u0161avaju dobiti vi\u0161e procesorskog vremena jer ne mogu obraditi podatke. Tada operativni sistem na hipervizoru, zahvaljuju\u0107i po\u0161tenoj optimizaciji, daje sve manje procesorskog vremena. Ovaj proces se odvija lavinom, a steal ska\u010de do neba, iako ga ostale virtualke gotovo i ne primje\u0107uju. A \u0161to je vi\u0161e jezgri, to je gore za ma\u0161inu koja je zahva\u0107ena. Ukratko, najvi\u0161e pate visoko optere\u0107ene virtualke sa mnogo jezgri.<\/p>\n<p><b>Nizak LA, ali ima steal<\/b>. Ako je LA otprilike 0,7 (tj. hipervizor se \u010dini nedovoljno optere\u0107enim), ali unutar pojedinih virtualnih ma\u0161ina se primje\u0107uje steal:<\/p>\n<ul>\n<li>Ve\u0107 opisani scenarij s paravirtualizacijom. Virtualka mo\u017ee dobiti metrike koje ukazuju na steal, iako je sve u hipervizoru u redu. Prema rezultatima na\u0161ih eksperimenata, takav steal ne prelazi 10 % i ne bi trebao zna\u010dajno utjecati na performanse aplikacija unutar virtualke.\n<\/li>\n<li>Pogre\u0161no se ra\u010duna parametar LA. Preciznije, u svakom konkretnom trenutku se ra\u010duna ispravno, ali prosjek za jednu minutu ispadne podcijenjen. Na primjer, ako jedna virtualka na tre\u0107ini hipervizora tro\u0161i sve svoje procese to\u010dno pola minute, LA za minutu na hipervizoru \u0107e biti 0,15; \u010detiri takve virtualke koje rade istovremeno daju 0,6. A to \u0161to je na svakoj od njih pola minute bio ogroman steal od 25 % prema LA, vi\u0161e se ne mo\u017ee izvu\u0107i.\n<\/li>\n<li>Opet, zbog \u0161edulera, koji je odlu\u010dio da netko previ\u0161e tro\u0161i, pa neka taj netko \u010deka. A ja \u0107u prebacivati kontekst, obra\u0111ivati prekide i baviti se drugim va\u017enim sistemskim stvarima. Na kraju, jedne virtualke ne vide nikakve probleme, dok druge do\u017eivljavaju ozbiljno pogor\u0161anje performansi.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>4. Druga izobli\u010denja<\/h2>\n<p>\nPostoji jo\u0161 milion razloga za izobli\u010denja po\u0161tene isporuke procesorskog vremena na virtualnoj ma\u0161ini. Na primjer, pote\u0161ko\u0107e u prora\u010dunima unose hyper-threading i NUMA. Oni kona\u010dno zbunjuju izbor jezgre za izvr\u0161avanje procesa, jer \u0161eduler koristi koeficijente \u2014 te\u017eine, koje prilikom prebacivanja konteksta \u010dine izra\u010dun jo\u0161 slo\u017eenijim.<\/p>\n<p>Mogu\u0107i su distorzije zbog tehnologija poput turbo boosta ili, s druge strane, na\u010dina u\u0161tede energije, koji mogu umjetno pove\u0107avati ili smanjivati frekvenciju ili \u010dak kvant vremena na serveru prilikom izra\u010duna iskori\u0161tenosti. Aktiviranje turbo boosta smanjuje performanse jednog procesora zbog pove\u0107anja performansi drugog. U tom trenutku informacija o trenutnoj frekvenciji procesora ne dolazi do virtualnog stroja, a on misli da mu netko krade vrijeme (na primjer, zatra\u017eio je 2 GHz, a dobio je upola manje). <\/p>\n<p>Op\u0107enito, mo\u017ee biti mnogo uzroka distorzija. U specifi\u010dnom sustavu mo\u017eete otkriti ne\u0161to drugo. Bolje je po\u010deti s knjigama na koje sam dao linkove iznad i snimanjem statistike s hipervizora pomo\u0107u alata poput perf, sysdig, systemtap, kojih ima <noindex><a rel=\"nofollow\" href=\"https:\/\/jvns.ca\/blog\/2017\/07\/05\/linux-tracing-systems\/\">desetaka<\/a><\/noindex>.<\/p>\n<h2>5. Zaklju\u010dci<\/h2>\n<p><\/p>\n<ol>\n<li>Neki iznos steal-a mo\u017ee se javiti zbog para-virtualizacije i mo\u017ee se smatrati normalnim. Na internetu se pi\u0161e da bi ta veli\u010dina mogla iznositi 5-10%. Ovisi o aplikacijama unutar virtualnog stroja i o optere\u0107enju koje stvara na svojim fizi\u010dkim ure\u0111ajima. Ovdje je va\u017eno obratiti pozornost na to kako se osje\u0107aju aplikacije unutar virtualnih strojeva.\n<\/li>\n<li>Omjer optere\u0107enja na hipervizoru i steal unutar virtualnog stroja nije uvijek jednozna\u010dno povezan, te mogu biti pogre\u0161ne procjene steal-a u odre\u0111enim situacijama s razli\u010ditim optere\u0107enjima.\n<\/li>\n<li>Scheduler se lo\u0161e odnosi prema procesima koji mnogo tra\u017ee. Poku\u0161ava dati manje onima koji tra\u017ee vi\u0161e. Velike virtualke su zlo.\n<\/li>\n<li>Mali steal mo\u017ee biti norma i bez para-virtualizacije (uzimaju\u0107i u obzir optere\u0107enje unutar virtualnog stroja, posebnosti optere\u0107enja susjeda, raspodjelu optere\u0107enja po nitima i druge faktore).\n<\/li>\n<li>Ako \u017eelite utvrditi steal u specifi\u010dnom sustavu, morate istra\u017eiti razli\u010dite opcije, prikupljati metrike, temeljito ih analizirati i razmisliti o na\u010dinu ravnomjerne raspodjele optere\u0107enja. Od svih slu\u010dajeva mogu\u0107e su odredbe koje treba potvrditi eksperimentalno ili pregledavati u debageru jezgre.\n<\/li>\n<\/ol>\n<p>Izvor: <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.4 - 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\/hr\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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: tko krade procesorsko vrijeme od virtualnih strojeva | ProHoster","description":"Pozdrav!","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/32331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=32331"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/32331\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/24147"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=32331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=32331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=32331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}