Բարեւ Ձեզ! Ես ուզում եմ պարզ բառերով պատմել վիրտուալ մեքենաների ներսում գողության առաջացման մեխանիզմի և որոշ ոչ ակնհայտ արտեֆակտների մասին, որոնք մեզ հաջողվել է պարզել նրա հետազոտության ընթացքում, որոնք ես ստիպված էի սուզվել որպես ամպային հարթակի տեխնիկական տնօրեն:
CPU-ի հափշտակման ժամանակը այն ժամանակն է, որի ընթացքում վիրտուալ մեքենան չի ստանում պրոցեսորային ռեսուրսներ իր կատարման համար: Այս ժամանակը դիտարկվում է միայն հյուրի օպերացիոն համակարգերում վիրտուալացման միջավայրերում: Պատճառները, թե ուր են գնում այդ հատկացված միջոցները, ինչպես կյանքում, շատ անորոշ են։ Բայց մենք որոշեցինք դա պարզել, նույնիսկ մի շարք փորձեր կազմակերպեցինք: Այնպես չէ, որ մենք հիմա ամեն ինչ գիտենք գողության մասին, բայց հիմա ձեզ մի հետաքրքիր բան կասենք:
1. Ինչ է գողությունը
Այսպիսով, գողությունը չափիչ է, որը ցույց է տալիս վիրտուալ մեքենայի ներսում պրոցեսների համար պրոցեսորի ժամանակի բացակայությունը: Ինչպես նկարագրված է
Վիրտուալ մեքենայի միջուկը ստանում է հափշտակման չափանիշը հիպերվիզորից: Միևնույն ժամանակ, հիպերվիզորը չի նշում, թե ինչ այլ գործընթացներ է նա իրականացնում, պարզապես «քանի դեռ ես զբաղված եմ, չեմ կարող ձեզ ժամանակ տալ»: KVM-ում ավելացվում է հափշտակման հաշվարկի աջակցություն
- Վիրտուալ մեքենան իմանում է գողության մասին հիպերվիզորից: Այսինքն, կորուստների տեսանկյունից, բուն վիրտուալ մեքենայի գործընթացների համար սա անուղղակի չափում է, որը կարող է ենթարկվել տարբեր աղավաղումների:
- Հիպերվիզորը չի կիսում տեղեկատվություն վիրտուալ մեքենայի հետ այն մասին, թե ինչ է անում, գլխավորն այն է, որ նա ժամանակ չի հատկացնում դրան: Դրա պատճառով վիրտուալ մեքենան ինքնին չի կարող հայտնաբերել գողության ցուցիչի աղավաղումները, որոնք կարող են գնահատվել մրցակցող գործընթացների բնույթով:
2. Ինչն է ազդում գողության վրա
2.1. Գողանալ հաշվարկ
Իրականում, գողանալը համարվում է գրեթե նույն կերպ, ինչ պրոցեսորի օգտագործման սովորական ժամանակը: Շատ տեղեկություններ չկան այն մասին, թե ինչպես է դիտարկվում վերամշակումը: Հավանաբար այն պատճառով, որ մեծամասնությունը այս հարցը ակնհայտ է համարում։ Բայց այստեղ էլ որոգայթներ կան։ Այս գործընթացի ակնարկի համար կարդացեք
- Պրոցեսորի գերտաքացում, որի ժամանակ ցիկլերը բաց են թողնվում:
- Միացնել/անջատել turbo boost-ը, որը փոխում է պրոցեսորի ժամացույցի հաճախականությունը:
- Ժամանակային հատվածի երկարության փոփոխություն, որը տեղի է ունենում պրոցեսորի էներգախնայողության տեխնոլոգիաների օգտագործման ժամանակ, ինչպիսին է SpeedStep-ը:
- Միջին խնդրի հաշվարկ. 80% օգտագործման մեկ րոպեի գնահատումը կարող է թաքցնել 100% կարճաժամկետ պոռթկում:
- Պտտվող կողպումը առաջացնում է պրոցեսորի վերականգնում, սակայն օգտագործողի գործընթացը չի տեսնում առաջընթաց դրա կատարման մեջ: Արդյունքում պրոցեսորի գնահատված օգտագործումը գործընթացի կողմից կկազմի XNUMX%, թեև գործընթացը ֆիզիկապես պրոցեսորի ժամանակ չի խլի:
Ես չգտա հոդված, որը նկարագրում է գողության համար նմանատիպ հաշվարկ (եթե գիտեք, կիսվեք մեկնաբանություններում): Բայց, դատելով աղբյուրներից, հաշվարկման մեխանիզմը նույնն է, ինչ վերամշակման դեպքում։ Պարզապես միջուկում ավելացվում է ևս մեկ հաշվիչ՝ ուղղակիորեն KVM պրոցեսի համար (վիրտուալ մեքենայի պրոցես), որը հաշվում է KVM պրոցեսի տևողությունը պրոցեսորի ժամանակի սպասման վիճակում։ Հաշվիչը վերցնում է տեղեկատվությունը պրոցեսորի մասին իր բնութագրերից և տեսնում է, թե արդյոք դրա բոլոր տիզերը օգտագործվում են վիրտուալ մեքենայի գործընթացում: Եթե ամեն ինչ, ապա մենք համարում ենք, որ պրոցեսորը զբաղված է եղել միայն վիրտուալ մեքենայի գործընթացով։ Հակառակ դեպքում հայտնում ենք, որ պրոցեսորն այլ բան էր անում, հայտնվել է գողություն։
Գողանալու հաշվման գործընթացը ենթակա է նույն խնդիրների, ինչ սովորական գողությունների հաշվարկը: Չասեմ, որ նման խնդիրներ հաճախ են հայտնվում, բայց հուսահատեցնող տեսք ունեն։
2.2. Վիրտուալացման տեսակները KVM-ում
Ընդհանուր առմամբ, վիրտուալացման երեք տեսակ կա, և բոլորն էլ աջակցվում են KVM-ի կողմից: Գողանալու մեխանիզմը կարող է կախված լինել վիրտուալացման տեսակից:
Հեռարձակում. Այս դեպքում վիրտուալ մեքենայի օպերացիոն համակարգի աշխատանքը հիպերվիզորի ֆիզիկական սարքերի հետ կատարվում է մոտավորապես այսպես.
- Հյուրերի օպերացիոն համակարգը հրաման է ուղարկում իր հյուր սարքին:
- Հյուր սարքի վարորդը ստանում է հրամանը, ստեղծում է հարցում սարքի BIOS-ի համար և այն ուղարկում հիպերվիզորին:
- Hypervisor գործընթացը հրամանը թարգմանում է հրաման ֆիզիկական սարքի համար՝ այն, ի թիվս այլ բաների, դարձնելով ավելի անվտանգ:
- Ֆիզիկական սարքի վարորդը ընդունում է փոփոխված հրամանը և ուղարկում այն հենց ֆիզիկական սարքին:
- Հրամանների կատարման արդյունքները հետ են գնում նույն ճանապարհով:
Թարգմանության առավելությունն այն է, որ այն թույլ է տալիս ընդօրինակել ցանկացած սարք և չի պահանջում օպերացիոն համակարգի միջուկի հատուկ պատրաստում։ Բայց դրա համար պետք է վճարել առաջին հերթին արագությամբ։
Սարքավորումների վիրտուալացում. Այս դեպքում սարքը ապարատային մակարդակում հասկանում է օպերացիոն համակարգի հրամանները: Սա ամենաարագ և լավագույն միջոցն է։ Բայց, ցավոք, այն չի աջակցվում բոլոր ֆիզիկական սարքերի, հիպերվիզորների և հյուրի օպերացիոն համակարգերի կողմից: Ներկայումս հիմնական սարքերը, որոնք աջակցում են ապարատային վիրտուալացմանը, պրոցեսորներն են:
Paravirtualization. KVM-ում սարքի վիրտուալացման ամենատարածված տարբերակը և ընդհանրապես հյուրի օպերացիոն համակարգերի համար ամենատարածված վիրտուալացման ռեժիմը: Դրա առանձնահատկությունն այն է, որ որոշ հիպերվիզոր ենթահամակարգերի հետ աշխատանքը (օրինակ՝ ցանցի կամ սկավառակի կույտի հետ) կամ հիշողության էջերի տեղաբաշխումը տեղի է ունենում հիպերվիզորի API-ի միջոցով՝ առանց ցածր մակարդակի հրամանների թարգմանության։ Վիրտուալիզացիայի այս մեթոդի թերությունն այն է, որ հյուր օպերացիոն համակարգի միջուկը պետք է փոփոխվի, որպեսզի այն կարողանա հաղորդակցվել հիպերվիզորի հետ՝ օգտագործելով այս API-ն: Բայց դա սովորաբար լուծվում է հյուրի օպերացիոն համակարգի վրա հատուկ դրայվերներ տեղադրելով: KVM-ում այս API-ն կոչվում է
Պարավիրտուալիզացիայի դեպքում, համեմատած թարգմանության հետ, ֆիզիկական սարք տանող ուղին զգալիորեն կրճատվում է՝ հրամաններ ուղարկելով անմիջապես վիրտուալ մեքենայից դեպի հյուրընկալող հիպերվիզոր գործընթաց: Սա թույլ է տալիս արագացնել բոլոր հրահանգների կատարումը վիրտուալ մեքենայի ներսում: KVM-ում դրա համար պատասխանատու է virtio API-ն, որն աշխատում է միայն որոշակի սարքերի համար, օրինակ՝ ցանցի կամ սկավառակի ադապտերների համար: Այդ իսկ պատճառով virtio դրայվերները տեղադրվում են վիրտուալ մեքենաների ներսում։
Այս արագացման հակառակ կողմն այն է, որ վիրտուալ մեքենայի ներսում ոչ բոլոր գործընթացներն են մնում դրա ներսում: Սա ստեղծում է որոշ հատուկ էֆեկտներ, որոնք կարող են առաջացնել գողություն: Խորհուրդ եմ տալիս սկսել այս հարցի մանրամասն ուսումնասիրությունը
2.3. «Արդար» ժամանակացույց
Հիպերվիզորի վրա վիրտուալ մեքենան, ըստ էության, կանոնավոր գործընթաց է, որը հնազանդվում է Linux-ի միջուկում ժամանակացույցի (ռեսուրսների բաշխման գործընթացների միջև) օրենքներին, ուստի եկեք ավելի մանրամասն նայենք դրան:
Linux-ն օգտագործում է այսպես կոչված CFS, Completely Fair Scheduler, որը դարձել է լռելյայն ժամանակացույցը միջուկից 2.6.23-ից ի վեր: Այս ալգորիթմը հասկանալու համար կարող եք կարդալ Linux Kernel Architecture-ը կամ աղբյուրը: CFS-ի էությունը կայանում է պրոցեսորի ժամանակի բաշխման մեջ՝ կախված դրանց կատարման տևողությունից: Որքան շատ պրոցեսորի ժամանակ է պահանջվում պրոցեսը, այնքան պրոցեսորի ժամանակն ավելի քիչ է ստանում: Սա երաշխավորում է բոլոր պրոցեսների «արդար» կատարումը, այնպես որ մի պրոցեսորը մշտապես չի զբաղեցնում բոլոր պրոցեսորները, և կարող են իրականացվել նաև այլ գործընթացներ:
Երբեմն այս պարադիգմը հանգեցնում է հետաքրքիր արտեֆակտների: Linux-ի երկարամյա օգտատերերը, անկասկած, կհիշեն սովորական տեքստային խմբագրիչի սառեցումը աշխատասեղանի վրա ռեսուրսներ պահանջող հավելվածների գործարկման ժամանակ, ինչպիսին է կոմպիլյատորը: Դա տեղի ունեցավ այն պատճառով, որ աշխատասեղանի հավելվածների ոչ ռեսուրսային առաջադրանքները մրցում էին այնպիսի առաջադրանքների հետ, որոնք ակտիվորեն սպառում են ռեսուրսները, ինչպիսին է կոմպիլյատորը: CFS-ը կարծում է, որ դա անարդար է, ուստի այն պարբերաբար դադարեցնում է տեքստային խմբագրիչը և թույլ է տալիս պրոցեսորին կարգավորել կոմպիլյատորի խնդիրները: Սա շտկվել է մեխանիզմով
Ժամանակացույցի մեկ այլ կարևոր կետ նախապատվությունն է: Սա անհրաժեշտ է քմծիծաղի գործընթացը պրոցեսորից հեռացնելու և մյուսներին գործելու համար: Արտաքսման գործընթացը կոչվում է համատեքստի փոխարկում, պրոցեսորի համատեքստի փոխարկիչ: Միևնույն ժամանակ, պահպանվում է առաջադրանքի ողջ համատեքստը՝ ստեկի վիճակը, ռեգիստրները և այլն, որից հետո գործընթացն ուղարկվում է սպասելու, իսկ մյուսը փոխարինում է իր տեղը։ Սա ՕՀ-ի համար թանկ գործողություն է և հազվադեպ է օգտագործվում, բայց իրականում դրա մեջ ոչ մի վատ բան չկա: Համատեքստի հաճախակի փոխարկումը կարող է ցույց տալ ՕՀ-ի խնդիր, բայց սովորաբար այն շարունակվում է և առանձնապես ոչինչ չի նշում:
Այսքան երկար պատմություն է անհրաժեշտ մեկ փաստ բացատրելու համար. որքան շատ պրոցեսորային ռեսուրսներ փորձի պրոցեսորը սպառել ազնիվ Linux ժամանակացույցով, այնքան ավելի արագ այն կդադարեցվի, որպեսզի մյուս գործընթացները նույնպես աշխատեն: Սա ճիշտ է, թե ոչ, դժվար հարց է, որը տարբեր բեռների տակ տարբեր կերպ է լուծվում։ Windows-ում, մինչև վերջերս, ժամանակացույցը կենտրոնացած էր աշխատասեղանի հավելվածների առաջնահերթ մշակման վրա, ինչը կարող էր հանգեցնել ֆոնային գործընթացների կախման: Sun Solaris-ն ուներ հինգ տարբեր դասի ժամանակացույցեր: Երբ վիրտուալացումը գործարկվեց, ավելացվեց վեցերորդը,
2.4. Ինչպե՞ս վերահսկել գողությունը:
Վիրտուալ մեքենայի ներսում գողության մոնիտորինգը, ինչպես ցանկացած այլ պրոցեսորի չափիչ, պարզ է. կարող եք օգտագործել ցանկացած պրոցեսորի մետրային գործիք: Հիմնական բանը այն է, որ վիրտուալ մեքենան պետք է լինի Linux-ում: Windows-ը չգիտես ինչու նման տեղեկատվություն չի տրամադրում իր օգտատերերին։ 🙁
Վերին հրամանի ելքը. մանրամասնելով պրոցեսորի բեռը, ամենաաջ սյունակում՝ գողանալ
Դժվարությունն առաջանում է, երբ փորձում են այս տեղեկատվությունը ստանալ հիպերվիզորից: Դուք կարող եք փորձել կանխատեսել գողությունը հոսթ մեքենայի վրա, օրինակ, Load Average (LA) պարամետրով - կատարման հերթում սպասող գործընթացների քանակի միջին արժեքը: Այս պարամետրը հաշվարկելու մեթոդը պարզ չէ, բայց ընդհանուր առմամբ, եթե պրոցեսորային թելերի քանակով նորմալացված LA-ն 1-ից մեծ է, դա ցույց է տալիս, որ Linux սերվերը ծանրաբեռնված է ինչ-որ բանով:
Ինչի՞ են սպասում այս բոլոր գործընթացները։ Ակնհայտ պատասխանը պրոցեսորներն են: Բայց պատասխանը լիովին ճիշտ չէ, քանի որ երբեմն պրոցեսորն անվճար է, և LA-ն դուրս է գալիս մասշտաբից: Հիշիր
LA-ի մեկ այլ առանձնահատկությունն այն է, որ այն համարվում է միջին արժեք օպերացիոն համակարգի համար: Օրինակ, 100 պրոցեսներ մրցում են մեկ ֆայլի համար, իսկ հետո LA=50: Նման մեծ արժեքը, կարծես թե, ցույց է տալիս, որ օպերացիոն համակարգը վատ է: Բայց այլ ծուռ գրված կոդի համար սա կարող է նորմալ վիճակ լինել, չնայած այն հանգամանքին, որ միայն դա է վատ, և օպերացիոն համակարգի մյուս գործընթացները չեն տուժում:
Այս միջինացման պատճառով (և ոչ պակաս, քան մեկ րոպե), LA-ի առումով որևէ բան որոշելը ամենաբարդ առաջադրանքը չէ, կոնկրետ դեպքերում շատ անորոշ արդյունքներով: Եթե փորձեք պարզել դա, ապա կտեսնեք, որ Վիքիպեդիայի հոդվածները և այլ հասանելի ռեսուրսները նկարագրում են միայն ամենապարզ դեպքերը՝ առանց գործընթացի խորը բացատրության։ Բոլոր հետաքրքրվածներին ուղարկում եմ նորից,
3. Հատուկ էֆեկտներ
Հիմա անդրադառնանք գողության հիմնական դեպքերին, որոնց հանդիպել ենք։ Ես ձեզ կասեմ, թե ինչպես են դրանք հետևում վերը նշված բոլորից և ինչպես են դրանք փոխկապակցված հիպերվիզորի ցուցիչների հետ:
Վերամշակում. Ամենապարզն ու ամենատարածվածը՝ հիպերվիզորը վերամշակվում է: Իրոք, կան շատ աշխատող վիրտուալ մեքենաներ, դրանց ներսում պրոցեսորի մեծ սպառում, մեծ մրցակցություն, LA-ի օգտագործումը 1-ից մեծ է (նորմալացված պրոցեսորային թելերով): Բոլոր վիրտուալների ներսում ամեն ինչ դանդաղում է: Հիպերվիզորից փոխանցվող գողությունը նույնպես աճում է, անհրաժեշտ է վերաբաշխել բեռը կամ ինչ-որ մեկին անջատել։ Ընդհանրապես ամեն ինչ տրամաբանական է ու հասկանալի։
Paravirtualization ընդդեմ միայնակ դեպքերի. Հիպերվիզորի վրա կա միայն մեկ վիրտուալ մեքենա, այն սպառում է դրա մի փոքր մասը, բայց տալիս է մեծ I/O բեռ, օրինակ, սկավառակի վրա: Եվ ինչ-որ տեղից նրա մեջ հայտնվում է փոքրիկ գողություն՝ մինչև 10% (ինչպես ցույց են տալիս մի քանի փորձեր)։
Հետաքրքիր է դեպքը. Steal-ը հայտնվում է այստեղ միայն պարավիրտուալացված վարորդների մակարդակի կողպեքների պատճառով: Վիրտուալ մեքենայի ներսում ստեղծվում է ընդհատում, որը մշակվում է վարորդի կողմից և գնում դեպի հիպերվիզոր: Հիպերվիզորի վրա ընդհատումների մշակման պատճառով սա կարծես ուղարկված հարցում է վիրտուալ մեքենային, այն պատրաստ է կատարման և սպասում է պրոցեսորին, բայց պրոցեսորի ժամանակ չի տրվում: Վիրտուալ մեքենան կարծում է, որ այս ժամանակը գողացված է։
Դա տեղի է ունենում բուֆերի ուղարկման պահին, այն գնում է հիպերվիզորի միջուկի տարածք, և մենք սկսում ենք սպասել դրան։ Չնայած վիրտուալ մեքենայի տեսանկյունից նա պետք է անմիջապես վերադառնա։ Ուստի, ըստ գողության հաշվարկի ալգորիթմի, այս ժամանակը համարվում է գողացված։ Ամենայն հավանականությամբ, այս իրավիճակում կարող են լինել այլ մեխանիզմներ (օրինակ, ևս մի քանի sys զանգերի մշակում), բայց դրանք չպետք է շատ տարբերվեն։
Ժամանակացույց բարձր բեռնված վիրտուալ մեքենաների դեմ. Երբ մեկ վիրտուալ մեքենա ավելի շատ է գողանում, քան մյուսները, դա պայմանավորված է հենց ժամանակացույցով: Որքան շատ գործընթացը բեռնում է պրոցեսորը, այնքան ավելի շուտ ժամանակացույցը կհեռացնի այն, որպեսզի մնացածը նույնպես կարողանա աշխատել: Եթե վիրտուալ մեքենան մի քիչ սպառում է, ապա հազիվ թե տեսնի գողություն. նրա գործընթացը ազնվորեն նստեց և սպասեց, պետք է ավելի շատ ժամանակ տալ: Եթե վիրտուալ մեքենան արտադրում է առավելագույն ծանրաբեռնվածություն իր բոլոր միջուկների վրա, այն ավելի հաճախ դուրս է մղվում պրոցեսորից և փորձում են շատ ժամանակ չտալ:
Նույնիսկ ավելի վատ, երբ վիրտուալ մեքենայի ներսում գործընթացները փորձում են ավելի շատ պրոցեսոր ստանալ, քանի որ նրանք չեն կարողանում հաղթահարել տվյալների մշակումը: Այնուհետև հիպերվիզորի վրա օպերացիոն համակարգը, ազնիվ օպտիմալացման շնորհիվ, ավելի ու ավելի քիչ ժամանակ կտա պրոցեսորին։ Այս գործընթացը տեղի է ունենում ձնահյուսի նման, և գողությունը թռչում է դեպի երկինք, թեև այլ վիրտուալ մեքենաներ դժվար թե դա նկատեն: Եվ որքան շատ միջուկներ, այնքան վատ է մեքենան, որն ընկել է բաշխման տակ: Մի խոսքով, ամենաշատը տուժում են շատ միջուկներով բարձր բեռնված վիրտուալ մեքենաները:
Ցածր LA, բայց կա գողանալ. Եթե LA-ն մոտ 0,7 է (այսինքն, հիպերվիզորը կարծես թե թերբեռնված է), բայց գողությունը նկատվում է առանձին վիրտուալ մեքենաների ներսում.
- Վերևում արդեն նկարագրված տարբերակը պարավիրտուալիզացիայի միջոցով: Վիրտուալ մեքենան կարող է ստանալ չափումներ, որոնք ցույց են տալիս գողությունը, թեև հիպերվիզորը լավ է աշխատում: Մեր փորձերի արդյունքների համաձայն՝ այս հափշտակման տարբերակը չի գերազանցում 10%-ը և չպետք է էական ազդեցություն ունենա վիրտուալ մեքենայի ներսում հավելվածի կատարման վրա:
- LA պարամետրը համարվում է սխալ: Ավելի ճիշտ, յուրաքանչյուր կոնկրետ պահի այն համարվում է ճիշտ, բայց երբ միջինը մեկ րոպեից ավել է, պարզվում է, որ այն թերագնահատված է։ Օրինակ, եթե հիպերվիզորի մեկ երրորդի մեկ վիրտուալ մեքենան սպառում է իր բոլոր պրոցեսորները ուղիղ կես րոպե, ապա LA-ն րոպեում հիպերվիզորի վրա կլինի 0,15; Միաժամանակ աշխատող չորս նման վիրտուալ մեքենաներ կտան 0,6: Իսկ այն, որ նրանցից յուրաքանչյուրի վրա կես րոպեի ընթացքում վայրի գողություն է տեղի ունեցել LA-ի 25%-ի չափով, այլեւս չի կարելի դուրս հանել:
- Կրկին ժամանակացույցի պատճառով, ով որոշեց, որ ինչ-որ մեկը շատ է ուտում, և թող այս մեկը սպասի: Միևնույն ժամանակ, ես կփոխեմ համատեքստը, կկարգավորեմ ընդհատումները և հոգ կտանեմ համակարգի այլ կարևոր բաների մասին: Արդյունքում, որոշ վիրտուալ մեքենաներ չեն տեսնում որևէ խնդիր, մինչդեռ մյուսները կատարում են լուրջ դեգրադացիա:
4. Այլ աղավաղումներ
Վիրտուալ մեքենայի վրա պրոցեսորի ժամանակի ազնիվ վերադարձը խեղաթյուրելու ևս միլիոն պատճառ կա: Օրինակ, hyperthreading-ը և NUMA-ն ավելացնում են հաշվարկների բարդությունը: Նրանք ամբողջովին շփոթում են միջուկի ընտրությունը գործընթացի կատարման համար, քանի որ ժամանակացույցն օգտագործում է գործակիցներ՝ կշիռներ, որոնք կոնտեքստը փոխելու ժամանակ էլ ավելի են դժվարացնում հաշվարկը։
Կան խեղաթյուրումներ, ինչպիսիք են turbo boost-ը կամ, ընդհակառակը, էներգախնայողության ռեժիմը, որը ուտիլիզացիան հաշվարկելիս կարող է արհեստականորեն ավելացնել կամ նվազեցնել հաճախականությունը կամ նույնիսկ ժամանակի քվանտը սերվերի վրա: Տուրբո խթանումը միացնելը նվազեցնում է մեկ պրոցեսորի աշխատանքը՝ մյուսի կատարողականի բարձրացման պատճառով: Այս պահին պրոցեսորի ընթացիկ հաճախականության մասին տեղեկատվությունը չի փոխանցվում վիրտուալ մեքենային, և այն կարծում է, որ ինչ-որ մեկը գողանում է իր ժամանակը (օրինակ, նա պահանջել է 2 ԳՀց, բայց ստացել է դրա կեսը)։
Ընդհանուր առմամբ, աղավաղումների պատճառները կարող են շատ լինել: Որոշակի համակարգում դուք կարող եք այլ բան գտնել: Ավելի լավ է սկսել այն գրքերից, որոնց հղումներ եմ տվել վերևում, և կարդալ վիճակագրություն հիպերվիզորից այնպիսի կոմունալ ծառայություններով, ինչպիսիք են perf, sysdig, systemtap-ը, որոնցից
5: Եզրակացություններ
- Որոշակի քանակությամբ գողություն կարող է առաջանալ պարավիրտուալիզացիայի պատճառով, և դա կարելի է նորմալ համարել: Համացանցում գրում են, որ այդ արժեքը կարող է լինել 5-10%: Դա կախված է վիրտուալ մեքենայի ներսում գտնվող հավելվածներից և այն բանից, թե ինչ ծանրաբեռնվածություն է այն տալիս իր ֆիզիկական սարքերին: Այստեղ կարևոր է ուշադրություն դարձնել, թե ինչպես են հավելվածները զգում վիրտուալ մեքենաների ներսում:
- Վիրտուալ մեքենայի ներսում հիպերվիզորի բեռի և գողության հարաբերակցությունը միշտ չէ, որ միանշանակ փոխկապակցված է, գողության երկու գնահատականներն էլ կարող են սխալ լինել տարբեր բեռների հատուկ իրավիճակներում:
- Ժամանակացույցը վատ է վերաբերվում գործընթացներին, որոնք շատ բան են պահանջում: Նա փորձում է ավելի քիչ տալ նրանց, ովքեր ավելին են խնդրում։ Մեծ վիրտուալ մեքենաները չարիք են:
- Փոքր գողությունը կարող է նորմ լինել նույնիսկ առանց պարավիրտուալիզացիայի (հաշվի առնելով վիրտուալ մեքենայի ներսում բեռնվածությունը, հարևանների բեռնվածքի բնութագրերը, բեռների բաշխումը թելերի միջև և այլ գործոններ):
- Եթե ցանկանում եք պարզել գողությունը որոշակի համակարգում, դուք պետք է ուսումնասիրեք տարբեր տարբերակներ, հավաքեք չափումներ, ուշադիր վերլուծեք դրանք և մտածեք, թե ինչպես հավասարաչափ բաշխել բեռը: Հնարավոր են շեղումներ ցանկացած դեպքից, որը պետք է հաստատվի փորձարարական կամ փնտրվի միջուկի վրիպազերծիչում:
Source: www.habr.com