Хулгайлах: виртуал машинаас процессорын цагийг хэн хулгайлдаг

Хулгайлах: виртуал машинаас процессорын цагийг хэн хулгайлдаг

Сайн уу? Виртуал машинуудын доторх хулгайн механикийн талаар, мөн үүлэн платформын техникийн захирлаар ажиллаж байхдаа бидний судалгааны явцад олж мэдсэн зарим үл мэдэгдэх олдворуудын талаар энгийн үгээр хэлэхийг хүсч байна. Mail.ru үүлэн шийдэл. Платформ нь KVM дээр ажилладаг.

CPU хулгайлах хугацаа гэдэг нь виртуал машин нь процессорын нөөцийг хүлээн авахгүй байх хугацаа юм. Энэ хугацааг зөвхөн виртуалчлалын орчин дахь зочин үйлдлийн системд тооцдог. Амьдралын нэгэн адил эдгээр хамгийн их хуваарилагдсан эх үүсвэрүүд хаашаа явах шалтгаан нь маш тодорхойгүй байна. Гэхдээ бид үүнийг олохоор шийдсэн бөгөөд бүр хэд хэдэн туршилт хийсэн. Бид одоо хулгайн талаар бүгдийг мэддэг гэсэн үг биш, гэхдээ бид танд сонирхолтой зүйлийг хэлэх болно.

1. Хулгай гэж юу вэ

Тиймээс хулгай гэдэг нь виртуал машин доторх процессуудад процессорын цаг дутмаг байгааг илтгэх хэмжүүр юм. Тодорхойлсноор KVM цөмийн засвартҮл нууцлал гэдэг нь гипервизор нь виртуал машины процессыг гүйцэтгэхийн тулд дараалалд оруулсан ч хост үйлдлийн систем дээр бусад процессуудыг гүйцэтгэж байх хугацаа юм. Өөрөөр хэлбэл хулгайлалтыг процессыг гүйцэтгэхэд бэлэн болсон хугацаа болон процессорын хугацааг хуваарилах үеийн зөрүүгээр тооцно.

Виртуал машины цөм нь хулгайн хэмжигдэхүүнийг гипервизороос хүлээн авдаг. Үүний зэрэгцээ гипервизор өөр ямар процесс явуулж байгааг тодорхой заагаагүй бөгөөд зүгээр л "би завгүй байхад би танд цаг өгөх боломжгүй" гэж хэлдэг. KVM дээр хулгайн тооцооны дэмжлэг нэмэгдсэн засварууд. Энд хоёр гол зүйл байна:

  • Виртуал машин нь гипервизороос хулгай хийх талаар суралцдаг. Өөрөөр хэлбэл, алдагдлын үүднээс авч үзвэл виртуал машин дээрх процессуудын хувьд энэ нь янз бүрийн гажуудалд өртөж болох шууд бус хэмжилт юм.
  • Гипервизор нь өөр юу хийж байгаа талаар виртуал машинтай мэдээлэл солилцдоггүй - гол зүйл бол түүнд цаг зав гаргадаггүй явдал юм. Үүнээс болж виртуал машин өөрөө хулгайн үзүүлэлтийн гажуудлыг илрүүлж чадахгүй бөгөөд үүнийг өрсөлдөгч үйл явцын шинж чанараар үнэлж болно.

2. Хулгай хийхэд юу нөлөөлдөг

2.1. Хулгай хийх тооцоо

Үндсэндээ хулгайлах нь CPU-ийн ашиглалтын хэвийн хугацаатай ойролцоогоор тооцоологддог. Дахин боловсруулалтыг хэрхэн авч үздэг талаар тийм ч их мэдээлэл байдаггүй. Магадгүй ихэнх хүмүүс энэ асуултыг ойлгомжтой гэж үздэг. Гэхдээ энд бас алдаанууд бий. Энэ үйл явцтай танилцахын тулд та уншиж болно Брендан Греггийн нийтлэл: ашиглалтыг тооцоолохдоо та маш олон нюансуудын талаар болон дараах шалтгааны улмаас энэ тооцоо алдаатай байх нөхцөл байдлын талаар мэдэх болно.

  • Процессор хэт халж, мөчлөг алгасахад хүргэдэг.
  • Процессорын цагийн хурдыг өөрчилдөг турбо нэмэгдүүлэхийг идэвхжүүлэх/идэвхгүй болгох.
  • SpeedStep гэх мэт процессорын эрчим хүч хэмнэх технологийг ашиглах үед гарах хугацааны уртын өөрчлөлт.
  • Дундаж тооцооллын асуудал: нэг минутын ашиглалтыг 80% -иар тооцоолох нь богино хугацааны 100% тэсрэлтийг нууж чадна.
  • Эргэлтийн түгжээ нь процессорыг сэргээхэд хүргэдэг боловч хэрэглэгчийн үйл явц нь түүний гүйцэтгэлд ахиц дэвшил харагдахгүй байна. Үүний үр дүнд процессорын тооцоолсон процессорын ашиглалт нь зуун хувь байх болно, гэхдээ процесс нь процессорын цагийг физикийн хувьд зарцуулахгүй.

Хулгай хийх үүнтэй төстэй тооцоог тайлбарласан нийтлэлийг би олсонгүй (хэрэв та мэдэж байгаа бол сэтгэгдэл дээр хуваалцаарай). Гэхдээ эх кодоос харахад тооцооны механизм нь дахин боловсруулахтай адил юм. Энгийнээр хэлэхэд, өөр нэг тоолуур цөмд шууд KVM процесс (виртуал машины процесс) -д зориулж нэмэгдсэн бөгөөд энэ нь CPU-ийн цагийг хүлээж байгаа KVM процессын үргэлжлэх хугацааг тоолдог. Тоологч нь процессорын талаарх мэдээллийг техникийн үзүүлэлтээс нь авч, түүний бүх тэмдэглэгээг виртуал машины процесс ашиглаж байгаа эсэхийг шалгадаг. Хэрэв бүх зүйл бол процессорыг зөвхөн виртуал машины процессоор хангасан гэж бид таамаглаж байна. Үгүй бол процессор өөр зүйл хийж байсан, хулгай гарч ирснийг бид мэдээлж байна.

Хулгай тоолох үйл явц нь ердийн дахин боловсруулалтын тооллоготой адил асуудалтай тулгардаг. Ийм асуудал байнга гарч ирдэг гэж хэлж болохгүй, гэхдээ тэд урам хугарах мэт харагддаг.

2.2. KVM дээрх виртуалчлалын төрлүүд

Ерөнхийдөө гурван төрлийн виртуалчлал байдаг бөгөөд бүгдийг нь KVM дэмждэг. Хулгай хийх механизм нь виртуалчлалын төрлөөс хамаарч болно.

Өргөн нэвтрүүлэг. Энэ тохиолдолд виртуал машины үйлдлийн системийн физик гипервизорын төхөөрөмжтэй ажиллах нь дараах байдалтай байна.

  1. Зочин үйлдлийн систем нь зочин төхөөрөмждөө тушаал илгээдэг.
  2. Зочин төхөөрөмжийн драйвер нь тушаалыг хүлээн авч, төхөөрөмжийн BIOS-ийн хүсэлтийг үүсгэж, гипервизор руу илгээдэг.
  3. Гипервизорын процесс нь командыг физик төхөөрөмжийн команд руу хөрвүүлж, бусад зүйлсээс гадна илүү найдвартай болгодог.
  4. Физик төхөөрөмжийн драйвер нь өөрчилсөн тушаалыг хүлээн авч физик төхөөрөмж рүү өөрөө илгээдэг.
  5. Гүйцэтгэх командын үр дүн ижил замаар буцдаг.

Орчуулгын давуу тал нь ямар ч төхөөрөмжийг дуурайх боломжийг олгодог бөгөөд үйлдлийн системийн цөмийг тусгайлан бэлтгэх шаардлагагүй юм. Гэхдээ та үүнийг юуны түрүүнд хурдаар төлөх ёстой.

Техник хангамжийн виртуалчлал. Энэ тохиолдолд техник хангамжийн түвшинд байгаа төхөөрөмж нь үйлдлийн системийн командуудыг ойлгодог. Энэ бол хамгийн хурдан бөгөөд хамгийн сайн арга юм. Гэвч харамсалтай нь үүнийг бүх физик төхөөрөмжүүд, гипервизорууд болон зочны үйлдлийн системүүд дэмждэггүй. Одоогоор техник хангамжийн виртуалчлалыг дэмждэг гол төхөөрөмжүүд нь процессорууд юм.

Паравиртуалчлал. KVM дээрх төхөөрөмжийн виртуалчлалын хамгийн түгээмэл сонголт бөгөөд ерөнхийдөө зочны үйлдлийн системд зориулсан виртуалчлалын хамгийн түгээмэл горим юм. Үүний онцлог нь гипервизорын зарим дэд системүүдтэй (жишээлбэл, сүлжээ эсвэл дискний стектэй) ажиллах эсвэл санах ойн хуудсуудыг хуваарилах нь доод түвшний командуудыг орчуулахгүйгээр гипервизорын API ашиглан хийгддэг. Энэхүү виртуалчлалын аргын сул тал нь зочны үйлдлийн системийн цөмийг энэ API-г ашиглан гипервизортой харилцахын тулд өөрчлөх шаардлагатай байдаг. Гэхдээ энэ нь ихэвчлэн зочны үйлдлийн систем дээр тусгай драйверуудыг суулгах замаар шийдэгддэг. KVM-д энэ API гэж нэрлэгддэг Virtio API.

Паравиртуалчлалын тусламжтайгаар өргөн нэвтрүүлэгтэй харьцуулахад виртуал машинаас хост дээрх гипервизорын процесс руу шууд команд илгээснээр физик төхөөрөмж рүү хүрэх зам мэдэгдэхүйц багасдаг. Энэ нь виртуал машин доторх бүх зааврын гүйцэтгэлийг хурдасгах боломжийг танд олгоно. KVM-д үүнийг virtio API хийдэг бөгөөд энэ нь зөвхөн сүлжээ эсвэл дискний адаптер гэх мэт тодорхой төхөөрөмжүүдэд ажилладаг. Ийм учраас virtio драйверуудыг виртуал машин дотор суулгасан байдаг.

Энэхүү хурдатгалын сул тал нь виртуал машин дотор ажилладаг бүх процессууд дотор нь үлддэгт оршино. Энэ нь хулгайн үед өндөглөдөг зарим онцгой эффектүүдийг бий болгодог. Би энэ асуудлын нарийвчилсан судалгааг эхлүүлэхийг зөвлөж байна Виртуал I/O-д зориулсан API: virtio.

2.3. "Шударга" хуваарь

Гипервизор дээрх виртуал машин нь үнэндээ Линукс цөм дэх хуваарийн хуулиудад (процессуудын хооронд нөөцийн хуваарилалт) захирагддаг энгийн процесс тул үүнийг илүү нарийвчлан авч үзье.

Линукс нь 2.6.23 цөмөөс хойш анхдагч төлөвлөгч болсон CFS, Completely Fair Scheduler-г ашигладаг. Энэ алгоритмыг ойлгохын тулд та Линуксийн цөмийн архитектур эсвэл эх кодыг уншиж болно. CFS-ийн мөн чанар нь процессорын хугацааг тэдгээрийн гүйцэтгэх хугацаанаас хамааран процессуудын хооронд хуваарилах явдал юм. Процессын процесст илүү их цаг хугацаа шаардагдах тусам CPU-ийн хугацаа бага байх болно. Энэ нь бүх процессыг "шударга" гүйцэтгэхийг баталгаажуулдаг - ингэснээр нэг процесс бүх процессорыг байнга эзэлдэггүй бөгөөд бусад процессууд ч бас ажиллах боломжтой.

Заримдаа энэ парадигм нь сонирхолтой олдворуудад хүргэдэг. Удаан хугацааны Linux хэрэглэгчид хөрвүүлэгч гэх мэт нөөц их шаарддаг програмуудыг ажиллуулж байхдаа ширээний компьютер дээрх ердийн текст засварлагчийг хөлддөг байсныг санаж байгаа байх. Десктоп програмууд дахь нөөц их шаарддаггүй ажлууд нь хөрвүүлэгч гэх мэт нөөц их шаарддаг ажлуудтай өрсөлддөг учраас ийм зүйл болсон. CFS үүнийг шударга бус гэж үзэж байгаа тул текст засварлагчийг үе үе зогсоож, хөрвүүлэгчийн даалгаврыг процессороор гүйцэтгэх боломжийг олгодог. Үүнийг механизм ашиглан зассан хуваарьтай_автомат бүлэг, гэхдээ даалгавруудын хооронд процессорын цагийг хуваарилах бусад олон шинж чанарууд хэвээр үлдсэн. Үнэн хэрэгтээ энэ бол CFS-д бүх зүйл хэр муу байгаа тухай түүх биш, харин процессорын цагийг "шударга" хуваарилах нь хамгийн энгийн ажил биш гэдгийг анхаарч үзэх оролдлого юм.

Төлөвлөгчийн өөр нэг чухал зүйл бол урьдчилан сэргийлэх явдал юм. Энэ нь процессороос шоолох процессыг зайлуулж, бусдад ажиллуулахад зайлшгүй шаардлагатай. Гаргах процессыг контекст шилжих гэж нэрлэдэг. Энэ тохиолдолд даалгаврын бүх контекст хадгалагдана: стек, регистр гэх мэт төлөв байдал, үүний дараа процессыг хүлээхээр илгээж, өөр нэг нь байраа эзэлнэ. Энэ нь OS-ийн хувьд үнэтэй үйл ажиллагаа бөгөөд ховор хэрэглэгддэг боловч угаасаа буруу зүйл байхгүй. Байнгын контекст солих нь үйлдлийн системд асуудал байгааг илтгэж болох боловч энэ нь ихэвчлэн тасралтгүй үргэлжилдэг бөгөөд ямар нэг зүйлийг заадаггүй.

Нэг баримтыг тайлбарлахын тулд ийм урт түүх хэрэгтэй: шударга Linux хуваарьт процессор илүү их нөөцийг ашиглахыг оролдох тусам түүнийг хурдан зогсоож, бусад процессууд ажиллах боломжтой болно. Энэ нь зөв үү, үгүй ​​юу гэдэг нь янз бүрийн ачааллын үед янз бүрээр шийдэж болох нарийн төвөгтэй асуулт юм. Windows-д саяхан болтол төлөвлөгч нь ширээний программуудыг нэн тэргүүнд боловсруулахад төвлөрч байсан бөгөөд энэ нь арын процессыг хөлдөхөд хүргэж болзошгүй юм. Sun Solaris нь таван өөр ангиллын хуваарь гаргагчтай байсан. Виртуалчлалыг эхлүүлэхдээ бид зургаа дахь нэгийг нэмсэн. Шударга хуваалцах хуваарь, учир нь өмнөх тав нь Solaris Zones виртуалчлалтай хангалттай ажиллаж чадаагүй. зэрэг номноос энэ асуудлыг нарийвчлан судлахыг зөвлөж байна Solaris Internals: Solaris 10 ба OpenSolaris Kernel Architecture буюу Линуксийн цөмийг ойлгох.

2.4. Хулгайг хэрхэн хянах вэ?

Бусад процессорын хэмжүүрүүдийн нэгэн адил виртуал машин доторх хулгайд хяналт тавих нь маш энгийн: та ямар ч процессорын хэмжүүрийн хэрэгслийг ашиглаж болно. Хамгийн гол нь виртуал машин нь Линукс дээр байдаг. Зарим шалтгааны улмаас Windows энэ мэдээллийг хэрэглэгчиддээ өгдөггүй. 🙁

Хулгайлах: виртуал машинаас процессорын цагийг хэн хулгайлдаг
Дээд командын гаралт: процессорын ачааллын дэлгэрэнгүй мэдээлэл, хамгийн баруун талын баганад хулгайлах

Энэ мэдээллийг гипервизороос авахыг оролдоход хүндрэл гардаг. Та хост машин дээр хулгай хийхийг урьдчилан таамаглахыг оролдож болно, жишээлбэл, ачааллын дундаж (LA) параметрийг ашиглан гүйцэтгэлийн дараалалд хүлээж буй процессуудын тооны дундаж утгыг ашиглаж болно. Энэ параметрийг тооцоолох арга нь энгийн биш боловч ерөнхийдөө хэрэв процессорын хэлхээний тоогоор LA хэвийн бол 1-ээс их байвал энэ нь Линукс сервер ямар нэг зүйлээр хэт ачаалалтай байгааг илтгэнэ.

Энэ бүх үйл явц юуг хүлээж байна вэ? Тодорхой хариулт бол процессор юм. Гэхдээ хариулт нь бүхэлдээ зөв биш, учир нь заримдаа процессор үнэгүй байдаг ч LA хэмжээнээс хэтэрдэг. Санаж байна уу NFS хэрхэн унаж, LA хэрхэн ургадаг. Диск болон бусад оролт/гаралтын төхөөрөмжид мөн адил зүйл тохиолдож болно. Гэвч үнэн хэрэгтээ процессууд нь I/O төхөөрөмжтэй холбоотой физик, эсвэл мутекс гэх мэт логик түгжээний төгсгөлийг хүлээж болно. Үүнд мөн техник хангамжийн түвшинд түгжих (дискний ижил хариу үйлдэл) эсвэл логик (түгжих командууд гэж нэрлэгддэг бөгөөд үүнд олон тооны нэгжүүд, mutex дасан зохицох болон эргэх, семафорууд, нөхцөл хувьсагчид, rw цоожууд, ipc цоожууд орно. ...).

LA-ийн өөр нэг онцлог нь үүнийг үйлдлийн системийн дундаж үзүүлэлт гэж үздэг. Жишээлбэл, нэг файлын төлөө 100 процесс өрсөлдөж, дараа нь LA=50 байна. Ийм том утга нь үйлдлийн систем муу байгааг илтгэж байх шиг байна. Гэхдээ бусад муруй бичигдсэн кодын хувьд энэ нь зөвхөн муу, үйлдлийн систем дэх бусад процессуудад хүндрэл учруулахгүй ч гэсэн хэвийн төлөв байж магадгүй юм.

Ийм дундаж (мөн нэг минутаас багагүй) учраас LA үзүүлэлтээр аливаа зүйлийг тодорхойлох нь хамгийн ашигтай ажил биш бөгөөд тодорхой тохиолдлуудад маш тодорхойгүй үр дүн гардаг. Хэрэв та үүнийг олж мэдэхийг оролдвол Википедиа болон бусад боломжтой эх сурвалжууд дээрх нийтлэлүүд үйл явцын талаар гүнзгий тайлбаргүйгээр зөвхөн хамгийн энгийн тохиолдлуудыг дүрсэлдэг болохыг олж мэдэх болно. Сонирхсон хүн бүрийг би дахин илгээж байна. Энд Брендан Грегг  - доорх холбоосыг дагана уу. Хэн англиар ярихаас залхуу вэ? LA-ийн тухай түүний алдартай нийтлэлийн орчуулга.

3. Тусгай эффект

Одоо хулгайн гэмт хэргийн гол тохиолдлуудыг авч үзье. Эдгээр нь дээр дурдсан бүх зүйлийг хэрхэн дагаж мөрдөж, гипервизор дээрх үзүүлэлтүүдтэй хэрхэн холбогдож байгааг би танд хэлэх болно.

Дахин боловсруулах. Хамгийн энгийн бөгөөд хамгийн түгээмэл нь: гипервизорыг дахин ашигласан. Үнэн хэрэгтээ маш олон виртуал машинууд ажиллаж байгаа, тэдгээрийн дотор процессорын хэрэглээ өндөр, өрсөлдөөн ихтэй, LA ашиглалт нь 1-ээс их (процессорын урсгалаар хэвийн болсон). Бүх виртуал машин доторх бүх зүйл удааширдаг. Гипервизороос дамждаг хулгай бас нэмэгдэж байгаа тул ачааллыг дахин хуваарилах эсвэл хэн нэгнийг унтраах шаардлагатай байна. Ерөнхийдөө бүх зүйл логик, ойлгомжтой байдаг.

Паравиртуалчлал ба Ганц тохиолдлууд. Гипервизор дээр зөвхөн нэг виртуал машин байдаг бөгөөд энэ нь түүний багахан хэсгийг зарцуулдаг боловч жишээлбэл дискэн дээр их хэмжээний оролт гаралтын ачаалал үүсгэдэг. Хаа нэгтээгээс 10% хүртэл жижиг хулгай гарч ирдэг (хэд хэдэн туршилтаар харуулсан).

Хэрэг сонирхолтой байна. Хулгай нь паравиртуалжуулсан драйверуудын түвшинд хаагдсанаас болж яг энд гарч ирдэг. Виртуал машин дотор тасалдлыг үүсгэж, драйвер боловсруулж, гипервизор руу илгээдэг. Гипервизор дээр тасалдалтай харьцдаг тул виртуал машины хувьд энэ нь илгээсэн хүсэлт мэт харагддаг, энэ нь гүйцэтгэхэд бэлэн бөгөөд процессорыг хүлээж байгаа боловч процессорын цаг хугацаа өгөөгүй байна. Виртуал охин энэ цагийг хулгайлсан гэж бодож байна.

Энэ нь буфер илгээгдэх үед тохиолддог бөгөөд энэ нь гипервизорын цөмийн орон зайд орж, бид үүнийг хүлээж эхэлдэг. Хэдийгээр виртуал машины үүднээс тэр даруй буцаж ирэх ёстой. Тиймээс хулгайн тооцооны алгоритмын дагуу энэ удаад хулгайлагдсан гэж тооцогддог. Энэ тохиолдолд бусад механизмууд байж болох юм (жишээлбэл, бусад системийн дуудлагуудыг боловсруулах), гэхдээ тэдгээр нь тийм ч их ялгаатай байх ёсгүй.

Өндөр ачаалалтай виртуал машинуудын хуваарь гаргагч. Нэг виртуал машин бусдаасаа илүү хулгайд өртөхөд энэ нь хуваарь гаргагчтай холбоотой юм. Процессорыг хэдий чинээ их ачаална, төдий чинээ хурдан төлөвлөгч түүнийг унтрааж, бусад нь ч ажиллах боломжтой болно. Хэрэв виртуал машин бага зарцуулдаг бол хулгайлах нь бараг харагдахгүй: түүний үйл явц үнэнч шударгаар сууж, хүлээсэн тул бид түүнд илүү их цаг хугацаа өгөх хэрэгтэй. Хэрэв виртуал машин нь бүх цөм дээрээ хамгийн их ачааллыг үүсгэдэг бол процессороос ихэвчлэн хөөгддөг бөгөөд тэд түүнд маш их цаг хугацаа өгөхгүй байхыг хичээдэг.

Виртуал машин доторх процессууд өгөгдөл боловсруулалтыг даван туулж чадахгүй тул илүү их процессор авахыг оролдох нь бүр ч муу юм. Дараа нь шударга оновчлолын ачаар гипервизор дээрх үйлдлийн систем нь процессорын хугацааг бага багаар хангах болно. Энэ үйл явц нь цасан нуранги шиг тохиолддог бөгөөд бусад виртуал машинууд үүнийг бараг анзаардаггүй ч тэнгэрт үсрэх хулгай хийдэг. Цөм нь их байх тусам өртсөн машин улам дордох болно. Товчхондоо, олон цөмтэй, ачаалал ихтэй виртуал машинууд хамгийн их хохирдог.

LA бага, гэхдээ хулгай байдаг. Хэрэв LA ойролцоогоор 0,7 бол (өөрөөр хэлбэл гипервизор ачаалал багатай юм шиг), харин хувийн виртуал машин дотор хулгай ажиглагдаж байна:

  • Дээр дурдсан паравиртуалчлалтай сонголт. Виртуал машин нь хулгайг харуулсан хэмжигдэхүүнийг хүлээн авах боломжтой хэдий ч гипервизор сайн ажилладаг. Бидний туршилтын үр дүнгээс үзэхэд хулгайлах энэхүү сонголт нь 10% -иас хэтрэхгүй бөгөөд виртуал машин доторх програмуудын гүйцэтгэлд мэдэгдэхүйц нөлөө үзүүлэх ёсгүй.
  • LA параметрийг буруу тооцоолсон. Илүү нарийвчлалтай, тодорхой мөч бүрт үүнийг зөв тооцдог боловч нэг минутын турш дунджаар тооцвол дутуу үнэлэгддэг. Жишээлбэл, хэрэв гипервизорын гуравны нэг виртуал машин бүх процессороо яг хагас минутын турш хэрэглэдэг бол гипервизорын минут тутамд LA 0,15 болно; Ийм дөрвөн виртуал машин нэгэн зэрэг ажиллахад 0,6. Тэд тус бүр дээр хагас минутын турш LA индикаторын дагуу 25% -ийн зэрлэг хулгай байсан гэдгийг цаашид татаж авах боломжгүй юм.
  • Дахин хэлэхэд, хэн нэгэн хэт их идэж байна гэж шийдэж, хэн нэгнийг хүлээхийг зөвшөөрсөн хуваарь гаргагчийн улмаас. Энэ хооронд би контекстийг сольж, тасалдлыг зохицуулж, системийн бусад чухал зүйлсийг хариуцна. Үүний үр дүнд зарим виртуал машинуудад ямар ч асуудал харагдахгүй байхад зарим нь гүйцэтгэлийн ноцтой доройтолд ордог.

4. Бусад гажуудал

Виртуал машин дээр процессорын цагийн шударга өгөөжийг гажуудуулах олон сая шалтгаан бий. Жишээлбэл, hyperthreading болон NUMA нь тооцоололд хүндрэл учруулдаг. Төлөвлөгч нь контекстийг солих үед тооцооллыг улам хүндрүүлдэг коэффициентууд - жинг ашигладаг тул тэд процессыг гүйцэтгэх цөмийн сонголтыг бүрэн төөрөлдүүлдэг.

Турбо нэмэгдүүлэх эсвэл эсрэгээр эрчим хүч хэмнэх горим гэх мэт технологиос шалтгаалсан гажуудал бий бөгөөд энэ нь ашиглалтыг тооцоолохдоо сервер дээрх давтамж, тэр ч байтугай цаг хугацааг зохиомлоор нэмэгдүүлэх, багасгах боломжтой юм. Турбо өсгөлтийг идэвхжүүлснээр нөгөө процессорын гүйцэтгэл нэмэгдсэний улмаас нэг процессорын гүйцэтгэл буурдаг. Одоогийн байдлаар процессорын давтамжийн талаарх мэдээллийг виртуал машин руу дамжуулахгүй байгаа бөгөөд хэн нэгэн түүний цагийг хулгайлж байна гэж үзэж байна (жишээлбэл, энэ нь 2 GHz хүссэн боловч хагасыг нь авсан).

Ерөнхийдөө гажуудал үүсэх олон шалтгаан байж болно. Та тодорхой систем дээр өөр зүйл олж болно. Миний дээр дурдсан линкүүдийг өгсөн номноос эхэлж, гипервизороос perf, sysdig, systemtap гэх мэт хэрэглүүрүүдийг ашиглан статистик мэдээлэл авах нь дээр. хэдэн арван.

5. Дүгнэлт

  1. Паравиртуалчлалын улмаас тодорхой хэмжээний хулгай гарч болзошгүй бөгөөд үүнийг хэвийн гэж үзэж болно. Энэ утга нь 5-10% байж болно гэж тэд интернетэд бичдэг. Виртуал машин доторх програмууд болон түүний физик төхөөрөмжид өгөх ачаалал зэргээс шалтгаална. Энд програмууд виртуал машин дотор хэрхэн мэдрэгдэж байгааг анхаарах нь чухал юм.
  2. Виртуал машин доторх гипервизор болон хулгайн ачааллын харьцаа нь хоорондоо үргэлж холбоотой байдаггүй бөгөөд янз бүрийн ачааллын үед хулгайн тооцоолол хоёулаа алдаатай байж болно.
  3. Төлөвлөгч нь маш их зүйлийг шаарддаг процессуудад муу хандлагатай байдаг. Тэр ихийг хүссэн хүнд бага өгөхийг хичээдэг. Том виртуал машинууд нь муу юм.
  4. Бага зэрэг хулгайлах нь паравиртуалчлалгүйгээр ч гэсэн норм байж болно (виртуал машин доторх ачаалал, хөршүүдийн ачааллын шинж чанар, утаснуудын ачааллын хуваарилалт болон бусад хүчин зүйлсийг харгалзан).
  5. Хэрэв та тодорхой системд хулгай хийхийг олохыг хүсч байвал янз бүрийн хувилбаруудыг судалж, хэмжигдэхүүнүүдийг цуглуулж, сайтар дүн шинжилгээ хийж, ачааллыг хэрхэн жигд хуваарилах талаар бодох хэрэгтэй. Аливаа тохиолдлуудаас хазайх боломжтой бөгөөд үүнийг туршилтаар баталгаажуулах эсвэл цөмийн дибаглагчаас үзэх шаардлагатай.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх