Das musst du sowieso nicht catvorher awk: einfach awk '<script>' /proc/cpuinfoso : awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo. Und Sie steigen ohne "minus eins" ein.
Tomasz Gandor
Um die Frage direkt zu beantworten, leiten Sie tail -n 1die letzte Zeile weiter und drucken Sie sie aus.
Beachten Sie, dass beide doppelt so viele Kerne zählen, wie tatsächlich vorhanden sind, wenn Sie sich auf einem System mit Hyperthreading befinden (z. B. P4 oder Core i7).
Abenddämmerung -inaktiv-
24
@duskwuff: Das ist genau das, was Sie in den meisten Fällen wollen.
Frank Kusters
8
grep -c '^processor' /proc/cpuinfoauf zsh.
Steven Lu
40
cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1gibt auch die falsche Nummer zurück, wenn die CPU-Nummern 0-basiert sind.
Phazor
3
Die erste Zeile gibt 1 Kern weniger als vorhanden zurück. Besser cat / proc / cpuinfo | awk '/ ^ processor / {print $ 3}' | wc -l
Mirko Ebert
650
Die Verarbeitung des Inhalts von /proc/cpuinfoist unnötig barock. Verwenden Sie nproc, das Teil von coreutils ist, daher sollte es bei den meisten Linux-Installationen verfügbar sein.
Der Befehl gibt nprocdie Anzahl der für den aktuellen Prozess verfügbaren Verarbeitungseinheiten aus, die möglicherweise geringer ist als die Anzahl der Online-Prozessoren.
Um die Anzahl aller installierten Kerne / Prozessoren zu ermitteln, verwenden Sie nproc --all
Auf meinem alten Ubuntu (10.10) ist nproc nicht verfügbar. Es muss eine neue Ergänzung sein.
Bukzor
3
Leider nprocist nicht ein Teil von boot2docker
kgadek
269
Die portabelste Lösung, die ich gefunden habe, ist der getconfBefehl:
getconf _NPROCESSORS_ONLN
Dies funktioniert sowohl unter Linux als auch unter Mac OS X. Ein weiterer Vorteil gegenüber einigen anderen Ansätzen besteht darin, dass es getconf schon lange gibt. Einige der älteren Linux-Maschinen, auf denen ich entwickeln muss, verfügen nicht über die Befehle nprocoder lscpu, aber sie haben sie getconf.
Anmerkung des Herausgebers: Während das getconfDienstprogramm POSIX-mandatiert ist , sind die spezifischen _NPROCESSORS_ONLNund _NPROCESSORS_CONFWerte nicht. Wie bereits erwähnt, funktionieren sie sowohl auf Linux-Plattformen als auch unter macOS. Bei FreeBSD / PC-BSD müssen Sie die führende weglassen _.
Dies funktionierte für mich unter Red Hat Entreprise Linux 5.4, Centos 6.5 & 7 und Mac OSX 10.9 (Mavericks). Es scheint das portabelste zu sein, da lscpu auf diesen Systemen nicht standardmäßig installiert ist. Vielen Dank!
@BCran konnte ich _NPROCESSORS_ONLNin POSIX nicht finden . Kannst du darauf verlinken?
Ciro Santilli 法轮功 冠状 病 六四 事件 9
3
@CiroSantilli g 事件 法轮功 纳米比亚 威 视 Von github.com/gstrauss/plasma/blob/master/plasma_sysconf.c sieht es so aus, als hätte ich mich geirrt: Es ist nur optional. "sysconf _SC_NPROCESSORS_ONLN und _SC_NPROCESSORS_CONF werden nicht standardmäßig benötigt, sondern auf zahlreichen Unix-Plattformen bereitgestellt und von Open Group als optional dokumentiert."
BCran
100
Vorwort:
Das Problem bei den /proc/cpuinfoAntworten auf der Basis besteht darin, dass sie Informationen analysieren, die für den menschlichen Verzehr bestimmt waren, und daher kein stabiles Format für das Parsen von Maschinen aufweisen : Das Ausgabeformat kann je nach Plattform und Laufzeitbedingungen unterschiedlich sein. Die Verwendung lscpu -punter Linux (und sysctlunter MacOS) umgeht dieses Problem .
getconf _NPROCESSORS_ONLNIch getconf NPROCESSORS_ONLNunterscheide nicht zwischen logischen und physischen CPUs.
Hier ist ein sh(POSIX-kompatibles) Snippet, das unter Linux und MacOS funktioniert, um die Anzahl der - online - logischen oder physischen CPUs zu bestimmen . Einzelheiten finden Sie in den Kommentaren.
Verwendet lscpufür Linux und sysctlfür MacOS.
Terminologie-Hinweis : CPU bezieht sich auf die kleinste Verarbeitungseinheit, wie sie vom Betriebssystem gesehen wird. Nicht-Hyper-Threading-Kerne entsprechen jeweils 1 CPU, während Hyper-Threading-Kerne mehr als 1 (normalerweise: 2) - logische - CPU enthalten.
Linux verwendet die folgende Taxonomie [1] , beginnend mit der kleinsten Einheit: CPU < Kern < Socket < Buch < Knoten,
wobei jede Ebene 1 oder mehr Instanzen der nächstniedrigeren Ebene umfasst.
#!/bin/sh# macOS: Use `sysctl -n hw.*cpu_max`, which returns the values of # interest directly.# CAVEAT: Using the "_max" key suffixes means that the *maximum*# available number of CPUs is reported, whereas the# current power-management mode could make *fewer* CPUs # available; dropping the "_max" suffix would report the# number of *currently* available ones; see [1] below.## Linux: Parse output from `lscpu -p`, where each output line represents# a distinct (logical) CPU.# Note: Newer versions of `lscpu` support more flexible output# formats, but we stick with the parseable legacy format # generated by `-p` to support older distros, too.# `-p` reports *online* CPUs only - i.e., on hot-pluggable # systems, currently disabled (offline) CPUs are NOT# reported.# Number of LOGICAL CPUs (includes those reported by hyper-threading cores)# Linux: Simply count the number of (non-comment) output lines from `lscpu -p`, # which tells us the number of *logical* CPUs.
logicalCpuCount=$([ $(uname)='Darwin']&&
sysctl -n hw.logicalcpu_max ||
lscpu -p | egrep -v '^#'| wc -l)# Number of PHYSICAL CPUs (cores).# Linux: The 2nd column contains the core ID, with each core ID having 1 or# - in the case of hyperthreading - more logical CPUs.# Counting the *unique* cores across lines tells us the# number of *physical* CPUs (cores).
physicalCpuCount=$([ $(uname)='Darwin']&&
sysctl -n hw.physicalcpu_max ||
lscpu -p | egrep -v '^#'| sort -u -t,-k 2,4| wc -l)# Print the values.
cat <<EOF
# of logical CPUs: $logicalCpuCount# of physical CPUS: $physicalCpuCount
EOF
Beachten Sie, dass von BSD abgeleitete Systeme außer macOS - z. B. FreeBSD - nur den hw.ncpuSchlüssel für unterstützen sysctl, der unter macOS veraltet ist. Ich bin mir nicht sicher, welcher der neuen Schlüssel hw.npuentspricht : hw.(logical|physical)cpu_[max].
Tipp an @teambob für die Korrektur des Befehls für die Anzahl der physischen CPUs lscpu.
Vorsichtsmaßnahme : Die lscpu -pAusgabe enthält KEINE "Buch" -Spalte (auf der manSeite werden "Bücher" als Entität zwischen Socket und Knoten in der taxonomischen Hierarchie erwähnt). Wenn auf einem bestimmten Linux-System "Bücher" im Spiel sind ( weiß jemand wann und wie? ), Wird der Befehl für die Anzahl der physischen CPUs möglicherweise unter -report gemeldet (dies basiert auf der Annahme, dass lscpuIDs gemeldet werden , die über höhere nicht eindeutig sind Entitäten auf -ebene , z. B.: 2 verschiedene Kerne aus 2 verschiedenen Sockets können dieselbe ID haben.
Wenn Sie den obigen Code beispielsweise als Shell-Skript speicherncpus , ihn ausführbar machen chmod +x cpusund in einem Ordner in Ihrem Ordner ablegen $PATH, wird folgende Ausgabe angezeigt:
$ cpus
logical 4
physical 4
[1] Xaekai beleuchtet, was ein Buch ist: "Ein Buch ist ein Modul, das eine Leiterplatte mit CPU-Sockeln, RAM-Sockeln, E / A-Verbindungen entlang der Kante und einem Haken für die Kühlsystemintegration enthält. Sie werden in IBM-Mainframes verwendet Weitere Informationen: http://ewh.ieee.org/soc/cpmt/presentations/cpmt0810a.pdf "
Ja, tut mir leid, Sie haben Recht mit dem Sortierbefehl. Ich kann keine Informationen über Bücher außerhalb des lscpu-Handbuchs finden. Ich denke, es ist verwandt mit NUMA en.wikipedia.org/wiki/Non-uniform_memory_access
teambob
2
Ich denke, die meisten Lösungen hier ignorieren Multi-Socket-Maschinen, im Gegensatz zu dieser. Vielen Dank!
Dividebyzero
1
In Bezug auf Linux gibt es viele Kontexte, in denen lscpu nicht verfügbar ist, z. B. Installationsimages. Ich mag es .. wünschte, es wäre allgegenwärtig.
Brian Chrisman
43
lscpu sammelt Informationen zur CPU-Architektur aus / proc / cpuinfon in einem für Menschen lesbaren Format:
# lscpuArchitecture: x86_64
CPU op-mode(s):32-bit,64-bit
ByteOrder:LittleEndian
CPU(s):8On-line CPU(s) list:0-7Thread(s) per core:1Core(s) per socket:4
CPU socket(s):2
NUMA node(s):1Vendor ID:GenuineIntel
CPU family:6Model:15Stepping:7
CPU MHz:1866.669BogoMIPS:3732.83Virtualization: VT-x
L1d cache:32K
L1i cache:32K
L2 cache:4096K
NUMA node0 CPU(s):0-7
ist "^ core id" für insgesamt physische Kerne oder nur p-Kerne auf einem Prozessor?
Richard
1
Es gibt eine Kern-ID-Zeile pro eindeutigem physischen Kern im System. Ich weiß nicht, ob die Zahlen für einen zweiten physischen Prozessor bei Null von
vorne beginnen werden
1
Wenn Sie mehr als einen physischen Prozessor haben, müssen Sie auch die "physische ID" überprüfen.
Anne
Die erste Zeile hat bei mir nicht funktioniert. Das funktioniert bei mir. cat /proc/cpuinfo | awk '/^processor/{print $3}'| wc -lund zeigt die richtige Nummer.
Jaylweb
11
Für die Gesamtzahl der physischen Kerne:
grep '^core id'/proc/cpuinfo |sort -u|wc -l
Multiplizieren Sie auf Computern mit mehreren Sockets (oder immer) das obige Ergebnis mit der Anzahl der Sockets:
Die Verwendung von getconf ist in der Tat die portabelste Methode. Die Variable hat jedoch in BSD und Linux unterschiedliche Namen für getconf. Daher müssen Sie beide testen, wie in diesem Inhalt vorgeschlagen:
https://gist.github.com/jj1bdx/5746298
(enthält auch) ein Solaris-Fix mit ksh)
Bei mir gibt dies die Anzahl der Hyperthreads zurück. Ich müsste auch die Anzahl der physischen Kerne und die Anzahl der Sockets kennen.
user2465201
OK - der exakt gleiche Befehl mit hw.physicalcpu ergibt die Kernanzahl. Ich bin mir noch nicht sicher über die Anzahl der Sockets ... Es gibt auch eine "logische" und "aktive" CPU-Anzahl, aber ich bin mir nicht sicher, was das bedeutet.
user2465201
Schnelles Update - das scheint nicht so portabel zu sein. Ich habe es auf einer Linux-Box versucht und es scheint nur die Verzeichnisse / proc zu lesen, die sich für das Linux-System alle vom Mac unterscheiden - zum Beispiel gibt es kein hw-Unterverzeichnis.
Davon abgesehen
5
Es ist sehr einfach. Verwenden Sie einfach diesen Befehl:
Zählen Sie die Anzahl der eindeutigen logischen CPUs, die vom Linux-Kernel verwendet werden. Die -pOption generiert eine Ausgabe zum einfachen Parsen und ist mit früheren Versionen von kompatibel lscpu.
Ermittlung der Anzahl der verfügbaren Verarbeitungseinheiten (nicht unbedingt gleich der Anzahl der Kerne). Dies ist hyperthreading-bewusst.
nproc
Ich möchte nicht zu weit in den Kaninchenbau gehen, aber Sie können auch die Anzahl der konfigurierten Prozessoren (im Gegensatz zu einfach verfügbaren / Online-Prozessoren) über bestimmen getconf _NPROCESSORS_CONF. Um die Gesamtzahl der CPUs (offline und online) zu bestimmen, möchten Sie die Ausgabe von analysieren lscpu -ap.
Dies ist die richtige Antwort, wenn Sie physische Kerne wünschen.
Dinesh
3
Ich dachte cat /proc/cpuinfoauch, ich würde die richtige Antwort erhalten, aber ich habe kürzlich gesehen, dass mein ARM Quad Core Cortex A53 System nur einen einzigen Kern aufweist. Es scheint, dass / proc / cpuinfo nur die aktiven Kerne anzeigt, während:
cat /sys/devices/system/cpu/present
ist ein besseres Maß dafür, was da ist. Du kannst 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 online, offlineund presentsysfs Einträge zurück , den Index des CPUs, so dass ein Rückgabewert von 0nur Mitteln Kern 0, während eines Rückgabewertes von 1-3Mitteln Kernen 1,2 und 3.
Im Folgenden sollten Sie die Anzahl der "echten" Kerne auf einem Hyperthread- und einem Nicht-Hyperthread-System angeben. Zumindest hat es in all meinen Tests funktioniert.
-1, dies kehrt 0auf einem einzelnen Kern mit einem Opteron 4170 HE zurück, aber 4auf einer 8-Kern-Box mit einem Opteron 3280. ... Ein Teil von mir wünscht sich wirklich, dass dieser Einzeiler funktionieren würde!
+1, länger als die Lösung mit "lscpu -p = Core, Socket", funktioniert jedoch direkt beim Parsen von / proc / cpuinfo, ohne dass lscpu erforderlich ist.
Fravadona
1
Zählen Sie die "Kern-ID" pro "physische ID" -Methode mit awk mit Fallback auf "Prozessor", wenn "Kern-ID" nicht verfügbar ist (wie Himbeere).
echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }'/proc/cpuinfo)
Das hat gut funktioniert. Als ich die erste Antwort versuchte, bekam ich 3 CPUs als Ausgang. Ich weiß, dass ich 4 CPUs im System habe, also habe ich nur einen grepfür den Prozessor erstellt und die Ausgabe sah folgendermaßen aus:
Version: Intel (R) Xeon (R) CPU E5-2667 v4 bei 3,20 GHz
Version: Intel (R) Xeon (R) CPU E5-2667 v4 bei 3,20 GHz
Welches ist die richtige Socket-Anzahl? E5-2667Wenn Sie nachschlagen 8 cores, sagt mir das, was jeder Socket hat , also multiplizieren Sie und landen Sie bei 16 coresacross 2 sockets.
Wo lscpugibst du mir 20 CPUs- was völlig falsch ist - nicht sicher warum. (Gleiches gilt für cat /proc/cpu- endet mit 20.
Gibt es eine Möglichkeit, dies als Befehl in Python zu verwenden? Zum Beispiel habe ich python -m numexpr.ncores ausprobiert, aber das funktioniert nicht.
MonsieurBeilto
1
@ MonsieurBeilto Bitte schauen Sie sich die aktualisierte Antwort an!
kmario23
Die von zurückgegebene Anzahl cpu_countist falsch, es wird nicht die Anzahl der Kerne zurückgegeben, sondern lediglich die Anzahl der Hyperthreads auf Intel-CPUs
Antti Haapala
1
Wenn Sie nur physische Kerne zählen möchten, hat dieser Befehl dies für mich getan.
cat
vorherawk
: einfachawk '<script>' /proc/cpuinfo
so :awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo
. Und Sie steigen ohne "minus eins" ein.tail -n 1
die letzte Zeile weiter und drucken Sie sie aus.Antworten:
zählt die Anzahl der Zeilen beginnend mit "Prozessor" in
/proc/cpuinfo
Für Systeme mit Hyper-Threading können Sie verwenden
welches zurückgeben sollte (zum Beispiel)
8
(während der obige Befehl zurückgeben würde16
)quelle
grep -c '^processor' /proc/cpuinfo
auf zsh.cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1
gibt auch die falsche Nummer zurück, wenn die CPU-Nummern 0-basiert sind.Die Verarbeitung des Inhalts von
/proc/cpuinfo
ist unnötig barock. Verwenden Sie nproc, das Teil von coreutils ist, daher sollte es bei den meisten Linux-Installationen verfügbar sein.Der Befehl gibt
nproc
die Anzahl der für den aktuellen Prozess verfügbaren Verarbeitungseinheiten aus, die möglicherweise geringer ist als die Anzahl der Online-Prozessoren.Um die Anzahl aller installierten Kerne / Prozessoren zu ermitteln, verwenden Sie
nproc --all
Auf meiner 8-Kern-Maschine:
quelle
nproc
ist nicht ein Teil von boot2dockerDie portabelste Lösung, die ich gefunden habe, ist der
getconf
Befehl:Dies funktioniert sowohl unter Linux als auch unter Mac OS X. Ein weiterer Vorteil gegenüber einigen anderen Ansätzen besteht darin, dass es getconf schon lange gibt. Einige der älteren Linux-Maschinen, auf denen ich entwickeln muss, verfügen nicht über die Befehle
nproc
oderlscpu
, aber sie haben siegetconf
.Anmerkung des Herausgebers: Während das
getconf
Dienstprogramm POSIX-mandatiert ist , sind die spezifischen_NPROCESSORS_ONLN
und_NPROCESSORS_CONF
Werte nicht. Wie bereits erwähnt, funktionieren sie sowohl auf Linux-Plattformen als auch unter macOS. Bei FreeBSD / PC-BSD müssen Sie die führende weglassen_
.quelle
_NPROCESSORS_ONLN
in POSIX nicht finden . Kannst du darauf verlinken?Vorwort:
Das Problem bei den
/proc/cpuinfo
Antworten auf der Basis besteht darin, dass sie Informationen analysieren, die für den menschlichen Verzehr bestimmt waren, und daher kein stabiles Format für das Parsen von Maschinen aufweisen : Das Ausgabeformat kann je nach Plattform und Laufzeitbedingungen unterschiedlich sein. Die Verwendunglscpu -p
unter Linux (undsysctl
unter MacOS) umgeht dieses Problem .getconf _NPROCESSORS_ONLN
Ichgetconf NPROCESSORS_ONLN
unterscheide nicht zwischen logischen und physischen CPUs.Hier ist ein
sh
(POSIX-kompatibles) Snippet, das unter Linux und MacOS funktioniert, um die Anzahl der - online - logischen oder physischen CPUs zu bestimmen . Einzelheiten finden Sie in den Kommentaren.Verwendet
lscpu
für Linux undsysctl
für MacOS.Terminologie-Hinweis : CPU bezieht sich auf die kleinste Verarbeitungseinheit, wie sie vom Betriebssystem gesehen wird. Nicht-Hyper-Threading-Kerne entsprechen jeweils 1 CPU, während Hyper-Threading-Kerne mehr als 1 (normalerweise: 2) - logische - CPU enthalten.
Linux verwendet die folgende Taxonomie [1] , beginnend mit der kleinsten Einheit:
CPU < Kern < Socket < Buch < Knoten,
wobei jede Ebene 1 oder mehr Instanzen der nächstniedrigeren Ebene umfasst.
[1] macOS-
sysctl (3)
DokumentationBeachten Sie, dass von BSD abgeleitete Systeme außer macOS - z. B. FreeBSD - nur den
hw.ncpu
Schlüssel für unterstützensysctl
, der unter macOS veraltet ist. Ich bin mir nicht sicher, welcher der neuen Schlüsselhw.npu
entspricht :hw.(logical|physical)cpu_[max]
.Tipp an @teambob für die Korrektur des Befehls für die Anzahl der physischen CPUs
lscpu
.Vorsichtsmaßnahme : Die
lscpu -p
Ausgabe enthält KEINE "Buch" -Spalte (auf derman
Seite werden "Bücher" als Entität zwischen Socket und Knoten in der taxonomischen Hierarchie erwähnt). Wenn auf einem bestimmten Linux-System "Bücher" im Spiel sind ( weiß jemand wann und wie? ), Wird der Befehl für die Anzahl der physischen CPUs möglicherweise unter -report gemeldet (dies basiert auf der Annahme, dasslscpu
IDs gemeldet werden , die über höhere nicht eindeutig sind Entitäten auf -ebene , z. B.: 2 verschiedene Kerne aus 2 verschiedenen Sockets können dieselbe ID haben.Wenn Sie den obigen Code beispielsweise als Shell-Skript speichern
cpus
, ihn ausführbar machenchmod +x cpus
und in einem Ordner in Ihrem Ordner ablegen$PATH
, wird folgende Ausgabe angezeigt:[1] Xaekai beleuchtet, was ein Buch ist: "Ein Buch ist ein Modul, das eine Leiterplatte mit CPU-Sockeln, RAM-Sockeln, E / A-Verbindungen entlang der Kante und einem Haken für die Kühlsystemintegration enthält. Sie werden in IBM-Mainframes verwendet Weitere Informationen: http://ewh.ieee.org/soc/cpmt/presentations/cpmt0810a.pdf "
quelle
lscpu
sammelt Informationen zur CPU-Architektur aus / proc / cpuinfon in einem für Menschen lesbaren Format:Siehe auch /unix/468766/understanding-output-of-lscpu .
quelle
Das hat bei mir funktioniert.
tail -nX
Mit dieser Option können Sie nur die letzten X-Zeilen erfassen.Wenn Sie Hyperthreading haben, sollte dies funktionieren, um die Anzahl der physischen Kerne zu ermitteln.
quelle
cat /proc/cpuinfo | awk '/^processor/{print $3}'| wc -l
und zeigt die richtige Nummer.Für die Gesamtzahl der physischen Kerne:
Multiplizieren Sie auf Computern mit mehreren Sockets (oder immer) das obige Ergebnis mit der Anzahl der Sockets:
@ mklement0 hat unten eine nette Antwort mit lscpu. Ich habe eine prägnantere Version in den Kommentaren geschrieben
quelle
Sie können auch Python verwenden! So ermitteln Sie die Anzahl der physischen Kerne:
So ermitteln Sie die Anzahl der Hyperthread-Kerne:
quelle
Plattformübergreifende Lösung für Linux, MacOS, Windows:
quelle
So zähle ich die Anzahl der physischen Kerne, die unter Linux online sind:
oder kurz:
Beispiel (1 Steckdose):
Beispiel (2 Steckdosen):
Beispiel (4 Steckdosen):
quelle
Die Verwendung von getconf ist in der Tat die portabelste Methode. Die Variable hat jedoch in BSD und Linux unterschiedliche Namen für getconf. Daher müssen Sie beide testen, wie in diesem Inhalt vorgeschlagen: https://gist.github.com/jj1bdx/5746298 (enthält auch) ein Solaris-Fix mit ksh)
Ich persönlich benutze:
Und wenn Sie dies in Python möchten, können Sie einfach die von syscall getconf verwendeten verwenden, indem Sie das Betriebssystemmodul importieren:
Was
nproc
, es ist Teil des GNU Coreutils, also nicht in BSD standardmäßig. Nach einigen anderen Methoden wird auch sysconf () verwendet.quelle
Wenn Sie dies tun möchten, damit es unter Linux und OS X funktioniert, können Sie Folgendes tun:
quelle
Es ist sehr einfach. Verwenden Sie einfach diesen Befehl:
quelle
CPU(s):
.Sie können eine der folgenden Methoden verwenden, um die Anzahl der physischen CPU-Kerne zu bestimmen .
Zählen Sie die Anzahl der eindeutigen Kern-IDs (ungefähr gleichwertig mit
grep -P '^core id\t' /proc/cpuinfo | sort -u | wc -l
).awk '/^core id\t/ {cores[$NF]++} END {print length(cores)}' /proc/cpuinfo
Multiplizieren Sie die Anzahl der 'Kerne pro Sockel' mit der Anzahl der Sockel.
lscpu | awk '/^Core\(s\) per socket:/ {cores=$NF}; /^Socket\(s\):/ {sockets=$NF}; END{print cores*sockets}'
Zählen Sie die Anzahl der eindeutigen logischen CPUs, die vom Linux-Kernel verwendet werden. Die
-p
Option generiert eine Ausgabe zum einfachen Parsen und ist mit früheren Versionen von kompatibellscpu
.lscpu -p | awk -F, '$0 !~ /^#/ {cores[$1]++} END {print length(cores)}'
Um noch einmal zu wiederholen, was andere gesagt haben, gibt es eine Reihe verwandter Eigenschaften.
So bestimmen Sie die Anzahl der verfügbaren Prozessoren:
Ermittlung der Anzahl der verfügbaren Verarbeitungseinheiten (nicht unbedingt gleich der Anzahl der Kerne). Dies ist hyperthreading-bewusst.
Ich möchte nicht zu weit in den Kaninchenbau gehen, aber Sie können auch die Anzahl der konfigurierten Prozessoren (im Gegensatz zu einfach verfügbaren / Online-Prozessoren) über bestimmen
getconf _NPROCESSORS_CONF
. Um die Gesamtzahl der CPUs (offline und online) zu bestimmen, möchten Sie die Ausgabe von analysierenlscpu -ap
.quelle
Ich dachte
cat /proc/cpuinfo
auch, ich würde die richtige Antwort erhalten, aber ich habe kürzlich gesehen, dass mein ARM Quad Core Cortex A53 System nur einen einzigen Kern aufweist. Es scheint, dass / proc / cpuinfo nur die aktiven Kerne anzeigt, während:cat /sys/devices/system/cpu/present
ist ein besseres Maß dafür, was da ist. Du kannst 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
online
,offline
undpresent
sysfs Einträge zurück , den Index des CPUs, so dass ein Rückgabewert von0
nur Mitteln Kern 0, während eines Rückgabewertes von1-3
Mitteln Kernen 1,2 und 3.Siehe https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu
quelle
Im Folgenden sollten Sie die Anzahl der "echten" Kerne auf einem Hyperthread- und einem Nicht-Hyperthread-System angeben. Zumindest hat es in all meinen Tests funktioniert.
quelle
0
auf einem einzelnen Kern mit einem Opteron 4170 HE zurück, aber4
auf einer 8-Kern-Box mit einem Opteron 3280. ... Ein Teil von mir wünscht sich wirklich, dass dieser Einzeiler funktionieren würde!Nicht meine Webseite, aber dieser Befehl von http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902 funktioniert gut für mich auf Centos. Es zeigt den tatsächlichen CPU-Wert an, auch wenn das 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
quelle
Zählen Sie die "Kern-ID" pro "physische ID" -Methode mit awk mit Fallback auf "Prozessor", wenn "Kern-ID" nicht verfügbar ist (wie Himbeere).
quelle
Das hat gut funktioniert. Als ich die erste Antwort versuchte, bekam ich 3 CPUs als Ausgang. Ich weiß, dass ich 4 CPUs im System habe, also habe ich nur einen
grep
für den Prozessor erstellt und die Ausgabe sah folgendermaßen aus:quelle
gibt mir
Welches ist die richtige Socket-Anzahl?
E5-2667
Wenn Sie nachschlagen8 cores
, sagt mir das, was jeder Socket hat , also multiplizieren Sie und landen Sie bei16 cores
across2 sockets
.Wo
lscpu
gibst du mir20 CPUs
- was völlig falsch ist - nicht sicher warum. (Gleiches gilt fürcat /proc/cpu
- endet mit20
.quelle
Schneller ohne Gabel
Diese Arbeit mit fast allen Schale.
Um kompatibel zu bleiben mit Schale, Strich, Busyboxund andere habe ich
ncore=$((ncore+1))
stattdessen verwendet((ncore++))
.Bash Ausführung
quelle
Wenn es in Ordnung ist, dass Sie Python verwenden können, hat das
numexpr
Modul eine Funktion dafür:auch das:
Um diese Informationen an der Eingabeaufforderung abzufragen, verwenden Sie:
Oder es ist einfach möglich, diese Informationen von der
multiprocessing.cpu_count()
Funktion abzurufenOder noch einfacher verwenden
os.cpu_count()
quelle
cpu_count
ist falsch, es wird nicht die Anzahl der Kerne zurückgegeben, sondern lediglich die Anzahl der Hyperthreads auf Intel-CPUsWenn Sie nur physische Kerne zählen möchten, hat dieser Befehl dies für mich getan.
Ziemlich einfach, scheint aber die tatsächlichen physischen Kerne zu zählen, wobei die logische Anzahl ignoriert wird
quelle
Python 3 bietet auch einige einfache Möglichkeiten, um es zu erhalten:
4
4
quelle
Verwenden Sie die folgende Abfrage, um die wichtigsten Details abzurufen
quelle
Zusammenfassung: Um physische CPUs zu erhalten, gehen Sie wie folgt vor :
Um physische und logische CPUs zu erhalten, gehen Sie wie folgt vor:
/proc
<< Dies ist die goldene Quelle für alle Informationen, die Sie über Prozesse und benötigen/proc/cpuinfo
<< ist die goldene Quelle für CPU-Informationen.quelle