2016-11-07 8 views
6

kann ich die folgenden CPU Werte von libvirt ziehen:Was bedeutet "cpu_time" genau in 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 

Was bedeutet die CPU_TIME Figur hier genau darstellen?

Ich bin auf der Suche nach CPU-Auslastung als Prozentsatz mithilfe dieser Daten zu berechnen.

Danke

Antwort

9

Dies war eine überraschend schwierige Frage zu beantworten! Nachdem ich den Kernel-Code für eine Weile überflutet habe, habe ich herausgefunden, was hier vor sich geht und es ist ziemlich nett zu lernen, was vor sich geht.

Normalerweise ist die Gesamt-CPU-Auslastung für einen Prozess unter Linux einfach die Summe der Zeit, die im Benutzerbereich verbracht wird, und der Zeit, die für den Kernel-Bereich aufgewendet wird. So naiv hätte man user_time + system_time gleich cpu_time erwartet. Was ich entdeckt habe, ist, dass Linux die Zeit aufspürt, die vCPU-Threads für die Ausführung von Gastcode getrennt vom Benutzer- oder Kernelraum benötigen.

So cpu_time == user_time + system_time + guest_time

So können Sie sich vorstellen system_time + user_time als den Aufwand für QEMU/KVM auf der Host-Seite zu geben. Und cpu_time - (user_time + guest_time) gibt die tatsächliche Zeit an, die das Gastbetriebssystem seine CPUs laufen ließ.

Um die CPU-Auslastung zu berechnen, möchten Sie wahrscheinlich nur alle 0 Sekunden cpu_time aufzeichnen und das Delta zwischen zwei Samples berechnen. zB usage % = 100 * (cpu_time 2 - cpu_time 1)/N

+0

Fanatische Antwort meiner Meinung nach! –