Ich weiß nicht, ob es hilft, aber Sie können das mpstat
Dienstprogramm verwenden, um eine Aufschlüsselung der CPU-Auslastung nach einzelnen Prozessoren (oder Kernen) zu erhalten. Zum Beispiel:
$ mpstat -P ALL 1
12:49:59 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
12:50:00 PM all 7.89 0.00 1.25 0.88 0.00 0.00 0.00 89.97 1359.00
12:50:00 PM 0 14.00 0.00 0.00 0.00 0.00 0.00 0.00 86.00 1043.00
12:50:00 PM 1 15.84 0.00 7.92 3.96 0.00 0.99 0.00 71.29 297.00
12:50:00 PM 2 3.96 0.00 0.00 1.98 0.00 0.99 0.00 93.07 0.00
12:50:00 PM 3 3.96 0.00 0.99 2.97 0.00 0.00 0.00 92.08 0.00
12:50:00 PM 4 4.00 0.00 0.00 0.00 0.00 0.00 0.00 96.00 0.00
12:50:00 PM 5 4.95 0.00 0.99 0.00 0.00 0.00 0.00 94.06 18.00
12:50:00 PM 6 10.89 0.00 0.99 0.00 0.00 0.00 0.00 88.12 0.00
12:50:00 PM 7 5.05 0.00 0.00 0.00 0.00 0.00 0.00 94.95 0.00
In diesem Beispiel können Sie die CPU sehen 0
, 1
und 6
machen mehr Arbeit , als der Rest von ihnen. Manchmal werden Sie feststellen, dass sich eine einzelne CPU in der Nähe von (oder auf) 100% befindet, während sich andere auf Null befinden. Dies kann ein Indikator für ein Programm (oder einen Teil eines Programms) sein, das ein Thread ist und jeweils nur eine CPU verwenden kann.
mpstat
Verwenden Sie zur Installation auf einem Fedora-, RHEL- oder CentOS-System yum install sysstat
.
# aptitude search mpstat #
.aptitude search systat
stattdessen.sysstat
unter Debian und Ubuntu bereitgestellt . Ich würde erwarten, dass die meisten von Debian abgeleiteten Distributionen denselben Paketnamen verwenden. Beginnen Sie bei von Debian abgeleiteten Distributionen mitapt-cache search --full mpstat
.Sofern nicht explizit festgelegt wurde, dass ein Prozess nicht an eine bestimmte CPU gebunden werden soll, kann davon ausgegangen werden, dass alle Kerne jederzeit verwendet werden. Der Scheduler weist den Prozessen den nächsten verfügbaren Kern zu. Beispiel: "System Monitor" (Teil von GNOME) zeigt meine Last auf allen 4 Kernen meines Computers fast gleich an.
quelle
Sie werden also sehen, dass es hier Antworten gibt, die Ihnen mitteilen, wie Ihre Kerne genutzt werden.
JEDOCH - das macht dir nicht wirklich etwas aus. Sie haben eine grundlegende Annahme getroffen, die einfach nicht zutrifft - dass Ihre Jobs dazu neigen, sich auf eine Teilmenge der Kerne zu konzentrieren.
Stattdessen werden Ihre Jobs auf alle Kerne verteilt, es sei denn, Sie implementieren etwas, das sie irgendwie "festhält". (Hinweis: Ich empfehle das nicht. Sag nur "Es sei denn".)
Hier ist eine alternative Strategie: Identifizieren Sie für Ihr bestimmtes System die LOAD-Ebene, wenn Sie der Meinung sind, dass es für andere Benutzer "akzeptabel" ist, weitere Jobs hinzuzufügen. Erstellen Sie dann etwas, das nur dann einen neuen Hintergrundjob sendet, wenn die Auslastung unter diesem Grenzwert liegt.
Auf diese Weise wird die Lösung unabhängig von der Anzahl der Kerne, portabler, flexibler und einfacher zu optimieren sein.
quelle
Wenn Sie dies tun möchten, damit es unter Linux und OS X funktioniert, können Sie Folgendes tun:
quelle
Sie können eine ungefähre Schätzung erhalten
top
, indem Sie "U
" ausführen, Ihren Benutzernamen eingeben und dann die CPU-Auslastung Ihrer wichtigsten Prozesse addieren.quelle
top
kann mit dem Schalter -b im Stapelbetrieb ausgeführt werden. Kombinieren Sie es mit der Option -n, um die Anzahl der Iterationen zu erhalten, die Sie benötigen.top
Ausgabe analysiere, oder Google, um zu sehen, ob jemand es bereits getan hat. Ich bin jedoch nicht davon überzeugt, dass sich die Mühe lohnt, da ich denke, dass ich aufgrund der Geschwindigkeit, mit der die Kontextumschaltung erfolgt, für jeden Lauf unterschiedliche Ausgaben erhalte. Ist die Systemlast nicht ein ausreichend guter Indikator? Es zeigt effektiv an, wie viele virtuelle Kerne für die Verarbeitung der Prozesswarteschlange erforderlich sind (Prozesse, die auf die CPU warten).