Als strace
ich die Quelle von betrachtete, fand ich die Verwendung des Klon-Flags, CLONE_IDLETASK
das dort beschrieben wird als:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Nach eingehenderem Hinsehen stellte ich fest, dass man clone
der Kernel dieses Flag zwar nicht behandelt , aber tatsächlich während des Startvorgangs verwendet, um inaktive Prozesse (die alle PID 0 haben sollten) für jede CPU auf dem Computer zu erstellen. dh eine Maschine mit 8 CPUs hat mindestens 7 (siehe Frage unten) solche Prozesse "laufen" (Anführungszeichen beachten).
Das führt mich nun zu ein paar Fragen darüber, was dieser "Leerlauf" -Prozess tatsächlich macht. Ich gehe davon aus, dass die NOP-Operation kontinuierlich ausgeführt wird, bis der Zeitrahmen abgelaufen ist und der Kernel einen realen Prozess zum Ausführen oder erneuten Zuweisen des Leerlaufprozesses zuweist (wenn die CPU nicht verwendet wird). Das ist jedoch eine vollständige Vermutung. Damit:
Werden auf einer Maschine mit beispielsweise 8 CPUs 7 solche Leerlaufprozesse erzeugt? (und eine CPU wird vom Kernel selbst gehalten, während keine Userspace-Arbeit ausgeführt wird?)
Ist der Leerlaufprozess wirklich nur ein unendlicher Strom von NOP-Operationen? (oder eine Schleife, die dasselbe tut).
uptime
Berechnet sich die CPU-Auslastung einfach daraus, wie lange der Leerlaufprozess auf der CPU war und wie lange er während eines bestimmten Zeitraums nicht vorhanden war?
PS Es ist wahrscheinlich, dass ein Großteil dieser Frage auf die Tatsache zurückzuführen ist, dass ich nicht vollständig verstehe, wie eine CPU funktioniert. Das heißt, ich verstehe die Assembly, die Zeitrahmen und die Interrupts, aber ich weiß nicht, wie eine CPU zum Beispiel je nach Ausführung mehr oder weniger Energie verbraucht. Ich wäre dankbar, wenn mich auch jemand aufklären könnte.