2016-11-07 12 views
6

मैं libvirt से निम्नलिखित सीपीयू मान सकते हैं:"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

यह जवाब देने के लिए एक आश्चर्यजनक मुश्किल सवाल था! एक अच्छा के लिए कर्नेल कोड डालने के बाद, मुझे पता चला है कि यहां क्या हो रहा है और यह जानने के लिए काफी अच्छा है कि क्या हो रहा है।

आम तौर पर लिनक्स पर एक प्रक्रिया के लिए, समग्र CPU उपयोग केवल उपयोगकर्ता स्पेस और कर्नेल स्पेस पर बिताए गए समय का योग होता है। तो बेवकूफ एक user_time + system_time के बराबर cpu_time की उम्मीद कर सकता था। मैंने जो खोजा है वह यह है कि लिनक्स वीसीपीयू धागे द्वारा बिताए गए समय को अतिथि कोड को निष्पादित करता है जो उपयोगकर्तापैस या कर्नेलस्पेस समय से अलग से निष्पादित करता है।

इस प्रकार cpu_time == user_time + system_time + guest_time

तो तुम system_time + user_time के मेजबान की ओर QEMU/केवीएम की भूमि के ऊपर देने के रूप में सोच सकते हैं। और cpu_time - (user_time + guest_time) अतिथि ओएस अपने CPUs चला रहे वास्तविक समय के रूप में दे रहा है।

सीपीयू उपयोग की गणना करने के लिए, शायद आप प्रत्येक एन सेकंड में cpu_time रिकॉर्ड करना चाहते हैं और दो नमूनों के बीच डेल्टा की गणना करना चाहते हैं। उदाहरण के लिए usage % = 100 * (cpu_time 2 - cpu_time 1)/N

+0

मेरी राय में फैनस्टिक जवाब! –

संबंधित मुद्दे