2016-11-07 115 views
6

我可以從libvirt的拉動下CPU值:「cpu_time」在libvirt中完全代表什麼?

virsh domstats vm1 --cpu-total 
Domain: 'vm1' 
    cpu.time=6173016809079111 
    cpu.user=26714880000000 
    cpu.system=248540680000000 

virsh cpu-stats vm1 --total 
Total: 
    cpu_time  6173017.263233824 seconds 
    user_time  26714.890000000 seconds 
    system_time  248540.700000000 seconds 

什麼是CPU_TIME數字究竟代表在這裏?

我正在計算使用此數據的CPU利用率百分比。

謝謝

回答

9

這是一個非常難以回答的問題!在仔細研究了內核代碼之後,我已經知道了這裏發生了什麼,並且很好地瞭解發生了什麼。

通常,對於Linux上的進程,總體CPU使用率僅僅是用戶空間花費的時間與花費在內核空間上的時間之和。所以天真的人會預期user_time + system_time等於cpu_time。我發現,Linux跟蹤vCPU線程執行guest代碼的時間與用戶空間或內核空間時間分開。

因此cpu_time == user_time + system_time + guest_time

所以,你能想到的system_time + user_time爲給在主機端QEMU/KVM的開銷。和cpu_time - (user_time + guest_time)給出了客戶操作系統正在運行其CPU的實際時間量。

要計算CPU使用率,您可能只想每N秒記錄一次cpu_time並計算兩個採樣之間的增量。如usage % = 100 * (cpu_time 2 - cpu_time 1)/N

+0

Fanastic在我看來,回答! –

相關問題