{"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\/sv\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya","title":{"rendered":"Steal: vem stj\u00e4l processortid fr\u00e5n virtuella maskiner","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Steal: vem stj\u00e4l processortid fr\u00e5n virtuella maskiner\" src=\"\/wp-content\/uploads\/2019\/04\/23cac5d3cc3295dc6f1014e9fda36b89.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHej! Jag vill f\u00f6rklara p\u00e5 ett enkelt s\u00e4tt mekaniken bakom hur steal uppst\u00e5r inom virtuella maskiner och n\u00e5gra mindre uppenbara artefakter som vi har lyckats utredda under v\u00e5r forskning, vilket jag har dykt ner i som teknisk chef f\u00f6r den molnbaserade plattformen. <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>. Plattformen k\u00f6rs p\u00e5 KVM.<\/p>\n<p>CPU steal time \u00e4r den tid d\u00e5 den virtuella maskinen inte f\u00e5r resurser fr\u00e5n processorn f\u00f6r sin bearbetning. Denna tid r\u00e4knas endast i g\u00e4stoperativsystem inom virtualiseringsmilj\u00f6er. Orsakerna till vart de tilldelade resurserna tar v\u00e4gen, \u00e4r liksom i livet, ganska oklara. Men vi beslutade att g\u00f6ra en utredning och satte ig\u00e5ng en rad experiment. Inte s\u00e5 att vi nu vet allt om steal, men vi kan ber\u00e4tta en del intressanta saker.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>1. Vad \u00e4r steal<\/h2>\n<p>\nS\u00e5, steal \u00e4r en metrik som indikerar brist p\u00e5 processtid f\u00f6r processerna inuti den virtuella maskinen. Som beskrivs <noindex><a rel=\"nofollow\" href=\"https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/stable\/linux.git\/patch\/?id=c9aaa8957f203bd6df83b002fb40b98390bed078\">i KVM-k\u00e4rnpatchen<\/a><\/noindex>, \u00e4r steal den tid d\u00e5 hypervisorn utf\u00f6r andra processer p\u00e5 v\u00e4rdoperativsystemet, \u00e4ven om den har st\u00e4llt den virtuella maskinens process i k\u00f6 f\u00f6r utf\u00f6rande. Det vill s\u00e4ga, steal r\u00e4knas som skillnaden mellan tiden d\u00e5 processen \u00e4r redo att utf\u00f6ras och tiden d\u00e5 processorn tilldelas tid.<\/p>\n<p>Steal-metriken f\u00e5r den virtuella maskinens k\u00e4rna fr\u00e5n hypervisorn. Hypervisorn klarg\u00f6r inte heller vilka andra processer den utf\u00f6r, den s\u00e4ger bara \"jag \u00e4r upptagen, jag kan inte ge dig tid just nu\". P\u00e5 KVM har st\u00f6det f\u00f6r att r\u00e4kna steal lagts till i <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/449657\/\">patchar.<\/a><\/noindex>Det finns tv\u00e5 nyckelpunkter h\u00e4r: <\/p>\n<ul>\n<li>Den virtuella maskinen f\u00e5r veta om steal fr\u00e5n hypervisorn. Det vill s\u00e4ga, vad g\u00e4ller f\u00f6rluster, \u00e4r detta en indirekt m\u00e4tning f\u00f6r processerna p\u00e5 sj\u00e4lva virtuella maskinen, som kan vara utsatt f\u00f6r olika f\u00f6rvr\u00e4ngningar.\n<\/li>\n<li>Hypervisorn delar inte med sig till den virtuella maskinen om vad den \u00e4r upptagen med \u2014 det viktiga \u00e4r att den inte ger tid till den. P\u00e5 grund av detta kan den virtuella maskinen inte identifiera f\u00f6rvr\u00e4ngningar i steal-m\u00e5ttet, som skulle kunna bed\u00f6mas utifr\u00e5n karakt\u00e4ren av konkurrerande processer.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Vad p\u00e5verkar steal<\/h2>\n<p><\/p>\n<h3>2.1. Ber\u00e4kning av steal<\/h3>\n<p>\nI grunden ber\u00e4knas steal p\u00e5 ungef\u00e4r samma s\u00e4tt som den vanliga CPU-anv\u00e4ndningstiden. Det finns inte mycket information om hur anv\u00e4ndning ber\u00e4knas. Kanske f\u00f6r att de flesta anser att det \u00e4r en uppenbar fr\u00e5ga. Men h\u00e4r finns det ocks\u00e5 fallgropar. F\u00f6r att bekanta sig med denna process kan man l\u00e4sa <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2017-05-09\/cpu-utilization-is-wrong.html\">artikeln Brendann Gregg<\/a><\/noindex>: du kommer att l\u00e4ra dig om en m\u00e4ngd olika nyanser vid ber\u00e4kning av utnyttjande och om situationer d\u00e5 denna ber\u00e4kning kan vara felaktig av f\u00f6ljande sk\u00e4l:<\/p>\n<ul>\n<li>\u00d6verhettning av processorn d\u00e4r takter g\u00e5r f\u00f6rlorade.\n<\/li>\n<li>Aktivering \/ deaktivering av turboboost, vilket resulterar i att processorhastigheten f\u00f6r\u00e4ndras.\n<\/li>\n<li>\u00c4ndring av tidskvantens l\u00e4ngd, som sker vid anv\u00e4ndning av str\u00f6msparande teknologier f\u00f6r processorn, som till exempel SpeedStep.\n<\/li>\n<li>Problemet med att ber\u00e4kna genomsnittet: en utnyttjandeprocent p\u00e5 80 % under en minut kan d\u00f6lja en kortvarig spik p\u00e5 100 %.\n<\/li>\n<li>Cykelblockering (spin lock) resulterar i att processorn utnyttjas, men anv\u00e4ndarprocessen ser ingen framsteg i sin k\u00f6rning. D\u00e4rmed kommer den ber\u00e4knade utnyttjandegraden f\u00f6r processorn av processen att vara 100 %, \u00e4ven om den fysiska processortiden inte kommer att anv\u00e4ndas.\n<\/li>\n<\/ul>\n<p>\nI artiklar som beskriver en s\u00e5dan ber\u00e4kning f\u00f6r steal, har jag inte hittat n\u00e5got (om du vet \u2014 dela g\u00e4rna med dig i kommentarerna). Men, enligt k\u00e4llkoden, \u00e4r ber\u00e4kningsmekanismen densamma som f\u00f6r utnyttjande. Det l\u00e4ggs helt enkelt till en annan r\u00e4knare i k\u00e4rnan, direkt f\u00f6r KVM-processen (virtuell maskinprocess), som r\u00e4knar hur l\u00e4nge KVM-processen har varit i v\u00e4ntel\u00e4ge f\u00f6r processor-tid. R\u00e4knaren f\u00e5r information om processorn fr\u00e5n dess specifikation och kontrollerar om alla dess takter har utnyttjats av virtuella maskinen. Om allt \u00e4r utnyttjat, betraktar vi det som att processorn bara har jobbat med den virtuella maskinen. Annars informerar vi om att processorn varit upptagen med n\u00e5got annat, att steal har uppst\u00e5tt. <\/p>\n<p>Processen f\u00f6r att ber\u00e4kna steal \u00e4r utsatt f\u00f6r samma problem som den vanliga utnyttjandeber\u00e4kningen. Man kan inte s\u00e4ga att s\u00e5dana problem ofta uppst\u00e5r, men de ser nedsl\u00e5ende ut.<\/p>\n<h3>2.2. Typer av virtualisering p\u00e5 KVM<\/h3>\n<p>\nGenerellt finns det tre typer av virtualisering, och alla st\u00f6ds av KVM. Typen av virtualisering kan p\u00e5verka mekanismen f\u00f6r hur steal uppst\u00e5r.<\/p>\n<p><b>\u00d6vers\u00e4ttning<\/b>. I det h\u00e4r fallet fungerar operativsystemet p\u00e5 den virtuella maskinen med hypervisorns fysiska enheter p\u00e5 f\u00f6ljande s\u00e4tt:<\/p>\n<ol>\n<li>Det g\u00e4stoperativsystemet skickar ett kommando till sin g\u00e4st-enhet.\n<\/li>\n<li>Drivrutinen f\u00f6r g\u00e4st-enheten tar emot kommandot, formar en beg\u00e4ran till enhetens BIOS och skickar den till hypervisorn.\n<\/li>\n<li>Hypervisorprocessen \u00f6vers\u00e4tter kommando till kommando f\u00f6r den fysiska enheten, vilket g\u00f6r det, bland annat, s\u00e4krare.\n<\/li>\n<li>Drivern f\u00f6r den fysiska enheten tar emot det modifierade kommandot och skickar det redan till den fysiska enheten.\n<\/li>\n<li>Resultaten av utf\u00f6rda kommandon g\u00e5r tillbaka l\u00e4ngs samma v\u00e4g. \n<\/li>\n<\/ol>\n<p>\nF\u00f6rdelen med \u00f6vers\u00e4ttning \u00e4r att den m\u00f6jligg\u00f6r emulering av vilken enhet som helst och inte kr\u00e4ver speciell f\u00f6rberedelse av operativsystemets k\u00e4rna. Men detta f\u00e5r man betala f\u00f6r, fr\u00e4mst i form av prestanda. <\/p>\n<p><b>H\u00e5rdvaruvirtualisering<\/b>. I det h\u00e4r fallet f\u00f6rst\u00e5r enheten p\u00e5 h\u00e5rdvaruniv\u00e5 kommandon fr\u00e5n operativsystemet. Det \u00e4r det snabbaste och b\u00e4sta s\u00e4ttet. Men tyv\u00e4rr st\u00f6ds det inte av alla fysiska enheter, hypervisorer och g\u00e4stoperativsystem. F\u00f6r n\u00e4rvarande \u00e4r de huvudsakliga enheterna som st\u00f6der h\u00e5rdvaruvirtualisering processorer.<\/p>\n<p><b>Paravirtualisering (paravirtualization)<\/b>. Den mest utbredda varianten av enhetsvirtualisering p\u00e5 KVM och generellt den mest anv\u00e4nda virtualiseringsl\u00e4get f\u00f6r g\u00e4stoperativsystem. Dess k\u00e4nnetecken \u00e4r att arbete med vissa delsystem av hypervisorn (till exempel n\u00e4tverks- eller diskstack) eller allokering av minnessidor sker med anv\u00e4ndning av hypervisorens API, utan \u00f6vers\u00e4ttning av l\u00e5gniv\u00e5kommandon. Nackdelen med denna virtualiseringsmetod \u00e4r behovet av att modifiera k\u00e4rnan i det g\u00e4stoperativsystemet f\u00f6r att kunna interagera med hypervisorn via detta API. Men detta l\u00f6ses vanligtvis genom att installera speciella drivrutiner p\u00e5 g\u00e4stoperativsystemet. I KVM kallas detta API <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ibm.com\/developerworks\/library\/l-virtio\/index.html\">virtio API<\/a><\/noindex>.<\/p>\n<p>Vid paravirtualisering, j\u00e4mf\u00f6rt med \u00f6vers\u00e4ttning, f\u00f6rkortas v\u00e4gen till den fysiska enheten avsev\u00e4rt genom att skicka kommandon direkt fr\u00e5n den virtuella maskinen till hypervisorprocessen p\u00e5 v\u00e4rden. Detta g\u00f6r att alla instruktioner inom den virtuella maskinen kan utf\u00f6ras snabbare. I KVM ansvarar virtio API f\u00f6r detta, som endast fungerar f\u00f6r vissa enheter, som n\u00e4tverks- eller diskadapter. Just d\u00e4rf\u00f6r installeras virtio-drivrutiner inuti virtuella maskiner. <\/p>\n<p>Baksidan av en s\u00e5dan accelerering \u00e4r att inte alla processer som k\u00f6rs inuti virtuella maskiner stannar d\u00e4r. Detta skapar vissa specialeffekter, som kan leda till att de dyker upp p\u00e5 steal. Jag rekommenderar att noggrant studera denna fr\u00e5ga som en b\u00f6rjan. <noindex><a rel=\"nofollow\" href=\"https:\/\/lwn.net\/Articles\/239238\/\">Ett API f\u00f6r virtuell I\/O: virtio<\/a><\/noindex>.<\/p>\n<h3>2.3. \"R\u00e4ttvis\" schemal\u00e4ggning<\/h3>\n<p>\nEn virtuell maskin p\u00e5 hypervisor \u00e4r i praktiken en vanlig process som f\u00f6ljer reglerna f\u00f6r schemal\u00e4ggning (resursf\u00f6rdelning mellan processer) i Linux-k\u00e4rnan, s\u00e5 vi ska titta n\u00e4rmare p\u00e5 den. <\/p>\n<p>I Linux anv\u00e4nds det s\u00e5 kallade CFS, Completely Fair Scheduler, som fr\u00e5n k\u00e4rna 2.6.23 blev standard schemal\u00e4ggare. F\u00f6r att f\u00f6rst\u00e5 denna algoritm kan man l\u00e4sa Linux Kernel Architecture eller k\u00e4llkoden. CFS:s syfte \u00e4r att f\u00f6rdela processor tid mellan processer beroende p\u00e5 hur l\u00e4nge de k\u00f6rs. Ju mer processor tid en process kr\u00e4ver, desto mindre tid f\u00e5r den. Detta garanterar \"r\u00e4ttvis\" behandling av alla processer - s\u00e5 att en process inte st\u00e4ndigt tar upp alla processorer, och de andra processerna ocks\u00e5 kan k\u00f6ras. <\/p>\n<p>Ibland leder en s\u00e5dan paradigm till intressanta artefakter. L\u00e5ngvariga anv\u00e4ndare av Linux minns s\u00e4kert att vanliga textredigerare p\u00e5 skrivbordet h\u00e4ngde sig n\u00e4r resurskr\u00e4vande program som kompilatorer k\u00f6rdes. Detta h\u00e4nde eftersom icke-resurskr\u00e4vande uppgifter i skrivbordsapplikationer konkurrerade med uppgifter som aktivt kr\u00e4vde resurser, som kompilatorn. CFS anser att detta \u00e4r ojuste, s\u00e5 den stoppar periodiskt textredigeraren f\u00f6r att ge processorn m\u00f6jlighet att hantera kompilatorns uppgifter. Detta \u00e5tg\u00e4rdades med hj\u00e4lp av mekanismen <noindex><a rel=\"nofollow\" href=\"https:\/\/marc.info\/?l=linux-kernel&amp;m=128978361700898\">sched_autogroup<\/a><\/noindex>, men m\u00e5nga andra s\u00e4rskildheter i f\u00f6rdelningen av processor tid mellan uppgifter kvarst\u00e5r. Egentligen handlar detta inte om att allt \u00e4r d\u00e5ligt i CFS, utan om att uppm\u00e4rksamma att \"r\u00e4ttvis\" f\u00f6rdelning av processor tid inte \u00e4r en trivial uppgift.<\/p>\n<p>En annan viktig punkt i schemal\u00e4ggaren \u00e4r preemption. Detta \u00e4r n\u00f6dv\u00e4ndigt f\u00f6r att kunna avbryta en process som tar f\u00f6r mycket resurser och ge andra processer en chans att k\u00f6ra. Processen att avbryta kallas context switching, d\u00e4r processorns kontext v\u00e4xlas. Under denna process sparas hela kontexten f\u00f6r uppgiften: stakens tillst\u00e5nd, register och s\u00e5 vidare, varefter processen placeras i v\u00e4ntande l\u00e4ge och en annan tar dess plats. Detta \u00e4r en kostsam operation f\u00f6r operativsystemet, och den anv\u00e4nds s\u00e4llan, men i grund och botten \u00e4r det inget d\u00e5ligt med det. Frekvent kontextbyten kan indikera ett problem i operativsystemet, men vanligtvis sker det kontinuerligt och pekar inte p\u00e5 n\u00e5got s\u00e4rskilt.<\/p>\n<p>Denna l\u00e5nga ber\u00e4ttelse beh\u00f6vs f\u00f6r att f\u00f6rklara en sak: ju fler resurser processorn f\u00f6rs\u00f6ker konsumera i en r\u00e4ttvis schemal\u00e4ggare i Linux, desto snabbare kommer den att stoppas s\u00e5 att andra processer ocks\u00e5 kan k\u00f6ra. Om detta \u00e4r r\u00e4tt eller fel \u00e4r en sv\u00e5r fr\u00e5ga som hanteras olika vid olika belastningar. I Windows var schemal\u00e4ggaren fram till nyligen inriktad p\u00e5 prioriterad bearbetning av skrivbordsapplikationer, vilket kunde leda till att bakgrundsprocesser h\u00e4ngde sig. I Sun Solaris fanns det fem olika klasser av schemal\u00e4ggare. N\u00e4r virtualisering inf\u00f6rdes lades den sj\u00e4tte till, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/man.shtml?topic=FSS&amp;category=7&amp;russian=4\">Fair share scheduler<\/a><\/noindex>, eftersom de tidigare fem arbetade otillfredsst\u00e4llande med virtualisering av Solaris Zones. Jag rekommenderar att du b\u00f6rjar en grundlig studie av detta \u00e4mne med b\u00f6cker som <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> eller <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. Hur \u00f6vervakar man steal?<\/h3>\n<p>\nAtt \u00f6vervaka steal inom en virtuell maskin, precis som med vilken annan processor-metrik som helst, \u00e4r enkelt: man kan anv\u00e4nda vilket som helst verktyg f\u00f6r att h\u00e4mta processor-metrik. Det viktigaste \u00e4r att virtualmaskinen k\u00f6r Linux. Windows tillhandah\u00e5ller av n\u00e5gon anledning inte s\u00e5dan information f\u00f6r sina anv\u00e4ndare. \ud83d\ude41<\/p>\n<p><img decoding=\"async\" alt=\"Steal: vem stj\u00e4l processortid fr\u00e5n virtuella maskiner\" src=\"\/wp-content\/uploads\/2019\/04\/3c7cd04f73fd6a74b86af81382090b69.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Utdata fr\u00e5n kommandot top: detaljering av processorbelastning, i den allra h\u00f6gra kolumnen \u2014 steal<\/i><\/p>\n<p>Sv\u00e5righeten uppst\u00e5r n\u00e4r man f\u00f6rs\u00f6ker f\u00e5 denna information fr\u00e5n hypervisorn. Man kan f\u00f6rs\u00f6ka f\u00f6ruts\u00e4ga steal p\u00e5 v\u00e4rdmaskinen, till exempel genom parametern Load Average (LA) \u2014 det genomsnittliga antalet processer som v\u00e4ntar i k\u00f6 f\u00f6r att k\u00f6ras. Ber\u00e4kningsmetoden f\u00f6r denna parameter \u00e4r komplex, men generellt, om LA som normaliserats efter antal processork\u00e4rnor \u00e4r st\u00f6rre \u00e4n 1, indikerar det att servern med Linux \u00e4r \u00f6verbelastad. <\/p>\n<p>Vad v\u00e4ntar alla dessa processer p\u00e5? Det uppenbara svaret \u00e4r processorn. Men svaret \u00e4r inte helt korrekt, eftersom processorn ibland \u00e4r ledig medan LA skjuter i h\u00f6jden. T\u00e4nk p\u00e5, <noindex><a rel=\"nofollow\" href=\"https:\/\/serverfault.com\/questions\/911976\/redhat-nfs-cluster-high-load-average-suddenly\">hur NFS faller bort och hur LA \u00f6kar<\/a><\/noindex>. Ungef\u00e4r s\u00e5 kan det ocks\u00e5 vara med diskar och andra in- och utmatningsenheter. Men i sj\u00e4lva verket kan processer v\u00e4nta p\u00e5 att en blockering ska avslutas, oavsett om den \u00e4r fysisk, relaterad till in- och utmatningsenheten, eller logisk, till exempel en mutex. Dit h\u00f6r ocks\u00e5 blockeringar p\u00e5 h\u00e5rdvaruniv\u00e5 (som det svar man f\u00e5r fr\u00e5n disken) eller p\u00e5 logisk niv\u00e5 (s\u00e5 kallade l\u00e5sningsprimitive, inklusive en massa entiteter, mutex adaptive och spin, semaforer, tillst\u00e5ndsvariabler, rw-l\u00e5s, ipc-l\u00e5s\u2026).<\/p>\n<p>En annan egenskap hos LA \u00e4r att det ber\u00e4knas som ett genomsnitt \u00f6ver operativsystemet. Till exempel, om 100 processer t\u00e4vlar om en fil, s\u00e5 blir LA=50. Detta h\u00f6ga v\u00e4rde tycks inneb\u00e4ra att operativsystemet har problem. Men f\u00f6r annan felaktigt skriven kod kan detta vara ett normalt tillst\u00e5nd, d\u00e4r bara den koden p\u00e5verkas, medan andra processer i operativsystemet inte p\u00e5verkas. <\/p>\n<p>P\u00e5 grund av denna genomsnittning (som tar minst en minut), \u00e4r det inte l\u00e4tt att definiera n\u00e5got baserat p\u00e5 LA-v\u00e4rdet, med ganska os\u00e4kra resultat i specifika fall. Om du f\u00f6rs\u00f6ker f\u00f6rst\u00e5 dig p\u00e5 det, kommer du att uppt\u00e4cka att artiklar p\u00e5 Wikipedia och andra tillg\u00e4ngliga resurser endast beskriver de enklaste fallen, utan djupg\u00e5ende f\u00f6rklaring av processen. Jag skickar alla intresserade, \u00e5terigen, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.brendangregg.com\/blog\/2017-08-08\/linux-load-averages.html\">hit, till Brendann Gregg<\/a><\/noindex> \u00a0\u2014 f\u00f6lj l\u00e4nkarna. F\u00f6r de som inte orkar p\u00e5 engelska \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/335326\/\">\u00f6vers\u00e4ttning av hans popul\u00e4ra artikel om LA<\/a><\/noindex>.<\/p>\n<h2>3. Specialeffekter<\/h2>\n<p>\nNu stannar vi vid de huvudsakliga fallen av steal som vi har st\u00f6tt p\u00e5. Jag ska ber\u00e4tta hur de h\u00e4rstammar fr\u00e5n allt ovanst\u00e5ende och hur de relaterar till m\u00e5tten p\u00e5 hypervisorn.<\/p>\n<p><b>\u00d6verutnyttjande<\/b>. Det mest grundl\u00e4ggande och vanliga: hypervisorn \u00e4r \u00f6verutnyttjad. Det finns faktiskt m\u00e5nga virtuella maskiner ig\u00e5ng, stort CPU-anv\u00e4ndande inom dem, h\u00f6g konkurrens, utnyttjande \u00f6ver LA \u00f6ver 1 (i normalisering efter CPU-tr\u00e5dar). Inuti alla virtuella maskiner stannar allt. Steal, vilket \u00f6verf\u00f6rs fr\u00e5n hypervisorn, \u00f6kar ocks\u00e5, det beh\u00f6vs omf\u00f6rdelning av belastningen eller att st\u00e4nga av n\u00e5gon. Sammanfattningsvis \u00e4r allt logiskt och f\u00f6rst\u00e5eligt.<\/p>\n<p><b>Paravirtualisering mot ensamma instanser<\/b>. P\u00e5 hypervisorn finns en enda virtuell maskin som anv\u00e4nder en liten del av resurserna, men den ger en stor belastning p\u00e5 in- och utdata, exempelvis via disken. Och d\u00e4r uppst\u00e5r det lite steal, upp till 10 % (som flera genomf\u00f6rda experiment visar).<\/p>\n<p>En intressant situation. Steal uppst\u00e5r h\u00e4r just p\u00e5 grund av blockerade operationer p\u00e5 niv\u00e5n av para-virtualiserade drivrutiner. Inuti den virtuella maskinen skapas en avbrott, som drivrutinen hanterar och skickar till hypervisorn. P\u00e5 grund av avbrottshanteringen p\u00e5 hypervisorn ser det ut som att en beg\u00e4ran har skickats f\u00f6r den virtuella maskinen; den \u00e4r redo att utf\u00f6ra och v\u00e4ntar p\u00e5 processorn, men f\u00e5r ingen processortid. Den virtuella maskinen tror att denna tid har stulits. <\/p>\n<p>Detta h\u00e4nder i det \u00f6gonblick n\u00e4r en buffert skickas, den g\u00e5r in i kernel space p\u00e5 hypervisorn, och vi b\u00f6rjar v\u00e4nta. Ur den virtuella maskinens perspektiv borde den omedelbart \u00e5terv\u00e4nda. F\u00f6ljaktligen betraktas denna tid som stulen enligt algoritmen f\u00f6r ber\u00e4kning av steal. Troligtvis kan det finnas andra mekanismer i denna situation (till exempel hantering av andra sys calls), men de b\u00f6r inte skilja sig mycket.<\/p>\n<p><b>Schemal\u00e4ggaren mot h\u00f6gbelastade virtuella maskiner<\/b>. N\u00e4r en virtuell maskin lider av mer steal \u00e4n andra, ligger det just i schemal\u00e4ggaren. Ju mer processen belastar processorn, desto snabbare kommer schemal\u00e4ggaren att avbryta den f\u00f6r att ge andra m\u00f6jlighet att arbeta. Om den virtuella maskinen f\u00f6rbrukar lite, kommer den knappt att m\u00e4rka n\u00e5got steal: dess process satt p\u00e5 ett hederligt s\u00e4tt och v\u00e4ntade, den beh\u00f6ver mer tid. Om den virtuella maskinen producerar maximal belastning p\u00e5 alla sina k\u00e4rnor, avbryts den oftare fr\u00e5n processorn och f\u00e5r inte mycket tid. <\/p>\n<p>Det \u00e4r \u00e4nnu v\u00e4rre n\u00e4r processerna inom den virtuella maskinen f\u00f6rs\u00f6ker f\u00e5 mer processortid eftersom de inte klarar av att bearbeta data. D\u00e5 kommer operativsystemet p\u00e5 hypervisorn, genom r\u00e4ttvis optimering, att ge allt mindre processortid. Denna process sker lavinartat, och steal skjuter i h\u00f6jden, \u00e4ven om andra virtuella maskiner knappt m\u00e4rker det. Ju fler k\u00e4rnor, desto v\u00e4rre f\u00f6r den drabbade maskinen. Kort sagt, det \u00e4r h\u00f6gbelastade virtuella maskiner med m\u00e5nga k\u00e4rnor som lider mest.<\/p>\n<p><b>L\u00e5g LA, men det finns steal<\/b>. Om LA ligger runt 0,7 (det vill s\u00e4ga att hypervisorn verkar vara underbelastad), men inom vissa virtuella maskiner observeras steal:<\/p>\n<ul>\n<li>Den redan beskrivna varianten med para-virtualisering. Virtuella maskiner kan f\u00e5 m\u00e4tv\u00e4rden som indikerar st\u00f6ld, \u00e4ven om hypervisorn fungerar bra. Enligt v\u00e5ra experiment \u00f6verstiger s\u00e5dan st\u00f6ld inte 10 % och b\u00f6r inte ha n\u00e5gon betydande inverkan p\u00e5 applikationernas prestanda inuti den virtuella maskinen.\n<\/li>\n<li>Parameter LA anses felaktigt. Mer exakt, i varje specifikt \u00f6gonblick ber\u00e4knas den korrekt, men n\u00e4r den genomsnittas \u00f6ver en minut blir resultatet l\u00e5gt. Till exempel, om en virtuell maskin under en halv minut anv\u00e4nder alla sina processorer exakt, blir LA p\u00e5 hypervisorn 0,15; fyra s\u00e5dana virtuella maskiner som k\u00f6rs samtidigt ger 0,6. Men att det under en halv minut p\u00e5 var och en av dem fanns en stor st\u00f6ld p\u00e5 25 % enligt LA, g\u00e5r inte att f\u00e5nga.\n<\/li>\n<li>\u00c5terigen, p\u00e5 grund av schemal\u00e4ggaren som beslutat att n\u00e5gon \u00e4ter f\u00f6r mycket, och att den personen f\u00e5r v\u00e4nta. Under tiden v\u00e4xlar jag kontext, hanterar avbrott och tar hand om andra viktiga systemuppgifter. Som ett resultat ser vissa virtuella maskiner inga problem, medan andra upplever allvarlig nedgradering av prestanda.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>4. Andra f\u00f6rvr\u00e4ngningar<\/h2>\n<p>\nDet finns minst en miljon orsaker till f\u00f6rvr\u00e4ngningar av det r\u00e4ttvisa processorutnyttjandet p\u00e5 en virtuell maskin. Till exempel bidrar hyper-threading och NUMA till sv\u00e5righeter i ber\u00e4kningarna. De f\u00f6rvirrar helt val av k\u00e4rna f\u00f6r processexekvering, eftersom schemal\u00e4ggaren anv\u00e4nder koefficienter - vikter, som vid kontextbyten g\u00f6r ber\u00e4kningen \u00e4nnu mer komplicerad.<\/p>\n<p>F\u00f6rvr\u00e4ngningar kan ocks\u00e5 uppst\u00e5 p\u00e5 grund av teknologier som turboboost eller, \u00e5 andra sidan, energibesparande l\u00e4gen, som vid ber\u00e4kning av utnyttjande artificiellt kan h\u00f6ja eller s\u00e4nka frekvensen eller till och med tidskvantiteten p\u00e5 servern. Aktivering av turboboost minskar prestandan f\u00f6r en processortr\u00e5d p\u00e5 grund av \u00f6kad prestanda f\u00f6r en annan. Vid den tidpunkten \u00f6verf\u00f6rs inte information om den aktuella processor-frekvensen till den virtuella maskinen, och den tror att n\u00e5gon stj\u00e4l dess tid (till exempel beg\u00e4rde den 2 GHz men fick h\u00e4lften s\u00e5 lite). <\/p>\n<p>Kort sagt, det kan finnas m\u00e5nga orsaker till f\u00f6rvr\u00e4ngningar. I ett specifikt system kan du uppt\u00e4cka n\u00e5got annat. B\u00e4ttre att b\u00f6rja med b\u00f6ckerna jag l\u00e4nkade till ovan och samla statistik fr\u00e5n hypervisorn med verktyg som perf, sysdig, systemtap, som det finns <noindex><a rel=\"nofollow\" href=\"https:\/\/jvns.ca\/blog\/2017\/07\/05\/linux-tracing-systems\/\">tiotals<\/a><\/noindex>.<\/p>\n<h2>5. Slutsatser<\/h2>\n<p><\/p>\n<ol>\n<li>Ett visst antal steal kan uppst\u00e5 p\u00e5 grund av paravirtualisering och anses normalt. P\u00e5 internet skriver de att detta v\u00e4rde kan vara mellan 5-10 %. Det beror p\u00e5 applikationerna inuti virtuella maskiner och den belastning de l\u00e4gger p\u00e5 sina fysiska enheter. Det \u00e4r viktigt att uppm\u00e4rksamma hur applikationerna m\u00e5r inuti de virtuella maskinerna.\n<\/li>\n<li>F\u00f6rh\u00e5llandet mellan belastningen p\u00e5 hypervisorn och steal inuti den virtuella maskinen \u00e4r inte alltid entydigt relaterade, b\u00e5da bed\u00f6mningar av steal kan vara felaktiga i specifika situationer med olika belastningar.\n<\/li>\n<li>Schemal\u00e4ggaren har en negativ inst\u00e4llning till processer som beg\u00e4r mycket. Den f\u00f6rs\u00f6ker ge mindre till dem som ber mer. Stora virtuella maskiner \u00e4r ett problem.\n<\/li>\n<li>Ett litet steal kan vara normalt \u00e4ven utan paravirtualisering (med tanke p\u00e5 belastningen inuti den virtuella maskinen, egenskaperna hos grannarnas belastning, f\u00f6rdelningen av belastningen \u00f6ver tr\u00e5dar och andra faktorer).\n<\/li>\n<li>Om du vill ta reda p\u00e5 steal i ett specifikt system m\u00e5ste du unders\u00f6ka olika alternativ, samla in metrik, noggrant analysera dem och fundera p\u00e5 hur man f\u00f6rdelar belastningen j\u00e4mnt. Det kan finnas avvikelser fr\u00e5n alla fall som m\u00e5ste bekr\u00e4ftas experimentelet eller ses i k\u00e4rnans debugger.\n<\/li>\n<\/ol>\n<p>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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: vem stj\u00e4l CPU-tid fr\u00e5n virtuella maskiner | ProHoster","description":"Hej!","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/steal-kto-kradyot-u-virtualok-protsessornoe-vremya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/32331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=32331"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/32331\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24147"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=32331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=32331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=32331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}