684 Stimmen

Wie erhält man die Anzahl der CPUs/Kerne in Linux über die Befehlszeile?

Ich habe dieses Skript, aber ich weiß nicht, wie ich das letzte Element im Ausdruck erhalten kann:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

Das letzte Element sollte die Anzahl der CPUs minus 1 sein.

15 Stimmen

Das müssen Sie nicht cat antes de awk trotzdem: einfach awk '<script>' /proc/cpuinfo und so weiter: awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo . Und du kommst ohne "minus eins" rein.

2 Stimmen

Um die Frage direkt zu beantworten, leiten Sie das nach tail -n 1 der die letzte Zeile übernimmt und ausgibt.

1 Stimmen

3voto

Aman Manchanda Punkte 31

Ich dachte auch cat /proc/cpuinfo würde mir die richtige Antwort geben, aber ich habe kürzlich gesehen, dass mein ARM Quad-Core Cortex A53 System nur einen einzigen Kern anzeigt. Es scheint, dass /proc/cpuinfo nur die aktiven Kerne anzeigt, während:

cat /sys/devices/system/cpu/present

ist ein besseres Maß für das, was da ist. Sie können auch

cat /sys/devices/system/cpu/online

um zu sehen, welche Kerne online sind, und

cat /sys/devices/system/cpu/offline

um zu sehen, welche Kerne offline sind. Die Website online , offline y present sysfs-Einträge geben den Index des CPUS zurück, so dass ein Rückgabewert von 0 bedeutet einfach Kern 0, während ein Rückgabewert von 1-3 bedeutet Kerne 1, 2 und 3.

Véase https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu

3voto

foomiser Punkte 37

Die folgenden Angaben sollten Ihnen die Anzahl der "echten" Kerne sowohl auf einem Hyperthreading- als auch auf einem Nicht-Hyperthreading-System anzeigen. Zumindest hat es in allen meinen Tests funktioniert.

awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 };  END { print CORES*P }' /proc/cpuinfo

2voto

MrPotatoHead Punkte 721

Die meisten Antworten in diesem Thread beziehen sich auf logisch Kerne.

Mit BaSH auf Ubuntu 18.x funktioniert das gut, um zu bestimmen Anzahl der physischen CPUs:

numcpu="$(lscpu | grep -i 'socket(s)' | awk '{print $(2)}')"

Es sollte auf den meisten Linux-Distributionen funktionieren.

2voto

nakhodkin Punkte 1099

In Anbetracht Ihres spezifischen Beispielcodeausschnitts, der Informationen über verfügbare CPU-Kerne ausgibt, z. B.

$ cat /proc/cpuinfo | awk '/^processor/{print $3}'

Zwei Ansätze

Ableitung des Gesamtwerts auf der Grundlage des höchsten Wertes der CPU-Kernkennung

Unter Ausnutzung der Tatsache, dass die CPU-Kerne einen fortlaufende Nummer an ihnen befestigt und unter einer processor Feld. Aufgrund der Tatsache, dass die Informationen über jeden einzelnen CPU-Kern in proc Datei befindet sich in einer Liste, die nach processor aufsteigend, können Sie einfach den letzten Eintrag dieser Folge nehmen und den numerischen Wert im Feld processor Feld z.B.

$ cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -n 1

ANMERKUNG: Da /proc/cpuinfo enthält eine Anzahl von Einträgen, die der Anzahl der Cpus entspricht, eine processor Der Anfangswert des Feldes ist 0, vergessen Sie nicht, den Wert des letzten Prozessorkerns um 1 zu erhöhen.

$ last_cpu_core_id=$(/proc/cpuinfo | awk '/^processor/{print $3}' | tail -n 1)
$ echo $((last_cpu_core_id + 1))

Anzahl der Zeilen der Ausgabe zählen

Dieser Ansatz unterscheidet sich von dem ersten insofern, als wir uns nicht wirklich um einen bestimmten Wert der CPU-Kern-ID kümmern, sondern nur die Ausgabezeilen zählen. Bei der Zählung beginnt der Prozess normalerweise bei 1, was unsere Lösung vereinfacht.

Verwendung von grep

$ cat /proc/cpuinfo | grep processor | wc -l

Alternativ dazu sollten wir uns nicht unbedingt an die processor Feld an sich, sondern nutzt die Tatsache, dass jeder Eintrag, der die Details eines einzelnen Prozessorkerns beschreibt, durch einen Zeilenumbruch getrennt ist, z. B.

cat /proc/cpuinfo | grep -v '^\w' | wc -l

mit awk

cat /proc/cpuinfo | awk '($1 == "processor") {count++ } END { print count }'

2voto

Chaim Geretz Punkte 806

Nicht meine Webseite, sondern dieser Befehl von http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902 funktioniert bei mir unter Centos einwandfrei. Es zeigt tatsächliche cpus, auch wenn Hyperthreading aktiviert ist.

cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X