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
Fanatische Antwort meiner Meinung nach! –