云平臺采集的虛擬機CPU利用率與實際的使用率差很多?與這個參數(shù)息息相關(guān)!
一、概述
主流的云平臺都實現(xiàn)了對虛擬機資源使用率的監(jiān)控,如網(wǎng)絡(luò)流入流出帶寬、CPU和內(nèi)存利用率、磁盤利用率等。
在沒有安裝平臺定制的vmtools情況下,很有可能出現(xiàn)平臺監(jiān)控數(shù)據(jù)與虛擬機內(nèi)部數(shù)據(jù)不相符的情況,如云平臺顯示虛擬機CPU使用率長期接近100%,并產(chǎn)生相應(yīng)資源使用率高的告警,但實際登陸到虛擬機內(nèi)部,發(fā)現(xiàn)虛擬機CPU使用率才10%~20%,甚至更小??偟膩碚f就是云平臺檢測到的數(shù)據(jù)并不準(zhǔn)確!
二、影響云平臺監(jiān)控的參數(shù)
開門見山,當(dāng)虛擬機內(nèi)核配置了idle=poll時,會導(dǎo)致qemu采集數(shù)據(jù)不準(zhǔn)確。在筆者接觸的操作系統(tǒng)中,只有部分版本的麒麟系統(tǒng)默認(rèn)配置了idle=poll,大部分系統(tǒng)如centos、redhat、歐拉等系統(tǒng)沒有配置。
三、idle配置的作用
Linux內(nèi)核的idle配置是用于管理系統(tǒng)空閑時的行為的。當(dāng)系統(tǒng)處于空閑狀態(tài)時,CPU可能會浪費很多資源,因此Linux內(nèi)核提供了一些機制來最大化利用系統(tǒng)資源。
具體來說,Linux內(nèi)核的idle配置可以控制以下行為:
- CPU調(diào)度:Linux內(nèi)核的idle配置可以決定如何在CPU上進(jìn)行調(diào)度。當(dāng)系統(tǒng)空閑時,內(nèi)核可以選擇將CPU的時間片分配給其他進(jìn)程,或者將CPU放入睡眠狀態(tài),以降低功耗并延長電池壽命。
- 節(jié)能:通過讓CPU進(jìn)入低功耗模式,Linux內(nèi)核的idle配置可以顯著降低系統(tǒng)的能耗。當(dāng)CPU處于空閑狀態(tài)時,內(nèi)核會降低CPU的頻率,減少電壓并關(guān)閉一些不必要的組件,從而節(jié)省能源。
- 熱管理:通過讓CPU進(jìn)入空閑狀態(tài),Linux內(nèi)核的idle配置可以幫助管理CPU的溫度。當(dāng)CPU處于高負(fù)載狀態(tài)時,它會產(chǎn)生大量熱量,因此將CPU放入空閑狀態(tài)可以使其冷卻并降低溫度。
總之,Linux內(nèi)核的idle配置可以優(yōu)化系統(tǒng)的性能和能效,減少能耗和熱量,并最大化利用系統(tǒng)資源。
開啟idel=poll在虛擬化場景下,對監(jiān)控影響的
原理如下:
虛擬化的場景下,Qemu缺省對GuestOS提供HLT指令作為idle的唯一機制,當(dāng)虛擬機的CPU進(jìn)入idle狀態(tài)時,就會調(diào)用HLT該指令把該CPU掛起,此時會陷入VMM處理,VMM知道該VCPU目前不需要使用了,便將該VCPU所在線程掛起進(jìn)入睡眠狀態(tài)。當(dāng)另一個VCPU需要喚醒該掛起的VCPU時,就在虛擬機內(nèi)發(fā)起IPI中斷(CPU間通信的機制),陷入到VMM中,隨后便是執(zhí)行kvm_vcpu_kick0和schedule0函數(shù),最后注入IPI中斷到目標(biāo)VCPU。
如果一個虛擬機內(nèi)任務(wù)頻繁處于idle和有任務(wù)之間,就會存在大量的vmexit以及IPI中斷,這會對虛擬化層帶來一些開銷。因此虛擬機使用idle=poll啟動選項,能夠完全避免VCPU執(zhí)行HTL指令,因此,該VCPU在物理機上對應(yīng)的線程將一直占用cpu(除非被中斷或者搶占),那么該線不會睡眠。
從物理機角度來看,由于本該掛起進(jìn)入睡眠的VCPU,現(xiàn)在不再睡眠,而是持續(xù)占有CPU。
四、優(yōu)缺點
優(yōu)點:CPU不再睡眠,IPI中斷耗時明顯減少,CPU性能有所提高。
缺點:
1、從物理機角度來看,由于本該掛起進(jìn)入睡眠的VCPU,現(xiàn)在不再睡眠,而是持續(xù)占有CPU。這對云主機可不是件好事情,因為這部分"空閑"CPU配額本該交給別的虛擬機來執(zhí)行,現(xiàn)在卻被禁止了HTL的虛擬機在空轉(zhuǎn),實在是在經(jīng)濟上不劃算。
2、虛擬機中禁止HTL也不是所有情況下都有明顯效果。假如虛擬機中的業(yè)務(wù)場景CPU負(fù)載很高,到了100%,該場景中自然不會調(diào)用HTL(VCPU沒有空閑,自然不會進(jìn)入idle狀態(tài))。因此,修改idle=poll啟動選項就失去了作用。
為了在物理機經(jīng)濟效益和虛擬機性能最大化之間取得折中,目前內(nèi)核的方案是提供了halt_poll_ns機制,即在VCPU HTL之前,先輪詢下有沒有虛擬中斷要來,來的話就馬上注入虛擬機,如果超過輪詢上限都沒有虛擬中斷過來,才真正進(jìn)入睡眠。
華為FusionSphere建議配置halt_poll_ns值為20000
我是運維少年,歡迎關(guān)注我同名的公眾號~
本文使用 文章同步助手 同步