關于美國服務器CPU利用率可以反映出整機的繁忙程度,從整體上了解CPU的使用情況,美聯科技小編本文就帶來關于CPU利用率的介紹。美國服務器CPU是給軟件服務的,這是指用戶進程等調度單元,也就可以知道進程的CPU利用率是多少,因此美國服務器CPU利用率可以分為3個粒度來考慮:
1.單個CPU核心的利用率
2.整機CPU利用率
3.進程的CPU利用率。
這3種CPU利用率有各自的算法,美國服務器操作系統是以時間片來為系統記時的,是最本質的時間單位,其它能看到的更人性化的時間格式都是通過它轉換的。需要注意的是,時間片是個累積量,無論是針對CPU級別還是進程級別,從操作系統被加載到內存并掌權后,操作系統為它們記錄各自的時間片累積數,這個量會一直累積增長,直到關機或進程結束生命周期。
美國服務器CPU利用率是指一段時間內CPU消耗的度量,強調的是經過一段時間內測出來的,就像速度一樣,其概念是單位時間內移動的距離,這也解釋了為什么top命令要有個時間間隔,默認是2秒。總的來說CPU利用率的實現原理是:在單位時間內連續兩次采樣CPU的時間片數,由于其是累積量,因此要取其差以獲取增量,然后再經過后續處理得到不同級別的CPU利用率。
1、單個CPU核心的利用率
通過一定的時間間隔,周期地對某個CPU核心上的idle線程運行的時間片數,和該CPU運行的時間片數進行兩次采樣,分別將兩次采樣值各自取其差,然后進行環比,最后再將比值乘以100%,所得的百分比便是該CPU的空閑率。
服務器中有多個CPU,我們用其中的一個CPU-CPU1來舉例說在時間A對CPU1的idle線程運行的時間片數和CPU1的總運行時間片數采樣,采樣值分別為 cpu1_ idle_ slices_A和cpul_ total sices A,然后在時間B同樣對CPU1的idle線程運行的時間片數和CPU1的總運行時間片數采樣,采樣值分別是 cpu1_idle_ slices_B和cpul_total_ slices_B。那么在B-A這段時間里,CPU1的空閑率公式便為:
(cpu1_idle_slicesB-cpu1_idle_slices_A)/(cpu1_total_slices_Bcpu1_total_slices_)"100%
相應CPU1的利用率便為100減去上面公式的結果。如果CPU1很繁忙,idle線程一直未被調度運行,CPU1的空閑率便是0%,即利用率是100%。
2、整機CPU利用率
通過一定的時間間隔周期對所有美國服務器CPU上idle線程運行的時間片數和所有CPU運行的時間片數進行兩次采樣,分別將兩次采樣值各自取其差,然后進行環比,也就是用這段采樣周期內所有CPU核心上idle線程運行的時間片數之和,比上這段采樣周期內所有CPU運行的時間片數之和,最后再將比值乘以100%,所得的百分比便是所有idle線程在所有CPU上的利用率,也就是系統的整體空閑率。
假如在時間A對所有CPU上的idle線程運行的時間片數和所有CPU運行的時間片數采樣,采樣值分別是 cpuall_idle_ slices_A和 cpual_total_ slices_A,然后在時間B同樣對所有CPU上的idle線程運行的時間片數和所有CPU運行的時間片數采樣,采樣值分別是 cpuall_idle_ slices_B和 cpuall_total slices_B,那么在B-A這段時間里,整機CPU空閑率公式便為:
(cpuall _idle_slices_b-cpuall idle_slices_A)/(cpuall_totalslices_b-cpualltotallslices_A)*100%同樣,相應整機的CPU利用率便為100去上面公式的結果。
以上這兩類CPU利用率主要是看CPU是否運行idle線程,屬于CPU級別的。由于運行哪個任務是由操作系統的任務調度器決定的,也就是只有當操作系統發現沒有任務可運行時才會去執行idle線程,因此只要idle在運行,就表示CPU有多余的空閑資源。
3、進程的CPU利用率
進程的美國服務器CPU利用率同樣是需要兩次采樣才能得到,但卻與前兩種CPU利用率有很大不同,進程在任意時刻只會在一個CPU上運行,當美國服務器上有多個CPU時,保不準進程會在多個CPU之間來回轉移,比如當前CPU負載很高,利用率已接近100%,當下一次該進程重新運行在CPU上時,調度器會根據實際CPU負載情況,將其換到另一個負載輕的CPU上執行。
盡管切換CPU這在一定程度上會影響性能,但由于進程之前所在的CPU的利用率已經是100%,換到空閑CPU上對進程來說,得到了更多的執行機會,可以更早的結束運行,因此利大于弊。
因此無法獲知在兩次采樣期間,進程被換了多少個CPU運行,多個CPU是并行的,它們各自獨立運行了一定的時間片數,雖然可以獲取進程運行的時間片數,但沒辦法知道進程經過了哪些CPU,僅能知道最后一次是在哪個CPU上執行,所以不知道去獲取哪些CPU在這段采樣周期內運行的時間片數。
基于這個原因,進程CPU利用率的計算原理采用了“時間比”,也就是進程的執行時間比上次采樣周期時間,所得的比值再乘以100%。但操作系統為用戶進程記錄的是進程的時間片數,因此要將時間片數轉換為時間。轉換的方法也很簡單,將時間片數除以 syscon_SC_ CLK TCK換成以秒為單位的時間,然后再除以秒為單位的采樣時間。
當然,如果是以秒這種粗粒度的時間去比較,必然會造成一定的誤差,因此,常常換算為以毫秒為單位的時間比。原理是這樣的,具體取決于實現,如果要以微秒為單位采樣也是可以的。
關注美聯科技,了解更多IDC資訊!