Hat mein Computer 1 oder 2 CPUs? (cpuinfo und lscpu unterscheiden sich)

7

Wenn ich laufe, cat /proc/cpuinfoerhalte ich die folgende Ausgabe (nur die entsprechende Zeile enthalten):

cpu cores: 1

Allerdings lscpugibt mir die folgende Ausgabe:

CPU(s): 2

Welcher der beiden ist richtig und was noch wichtiger ist, warum geben sie mir unterschiedliche Ergebnisse?


Die volle Ausgabe von cat /proc/cpuinfoist:

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 15
model       : 3
model name  : Intel(R) Pentium(R) 4 CPU 2.80GHz
stepping    : 4
microcode   : 0xe
cpu MHz     : 2800.135
cache size  : 1024 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 0
initial apicid  : 0
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc pebs bts pni dtes64 monitor ds_cpl cid xtpr
bogomips    : 5600.27
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 32 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 15
model       : 3
model name  : Intel(R) Pentium(R) 4 CPU 2.80GHz
stepping    : 4
microcode   : 0xe
cpu MHz     : 2800.135
cache size  : 1024 KB
physical id : 0
siblings    : 2
core id     : 0
cpu cores   : 1
apicid      : 1
initial apicid  : 1
fdiv_bug    : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe constant_tsc pebs bts pni dtes64 monitor ds_cpl cid xtpr
bogomips    : 5600.27
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 32 bits virtual
power management:

Die volle Ausgabe von lscpuist:

Architecture:          i686
CPU op-mode(s):        32-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    2
Core(s) per socket:    1
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            15
Model:                 3
Stepping:              4
CPU MHz:               2800.135
BogoMIPS:              5600.27
L1d cache:             16K
L2 cache:              1024K

(Dies kann auch unter https://gist.github.com/IQAndreas/f3f9139b8968987d3716 eingesehen werden .)

IQAndreas
quelle
Diese Befehle teilen uns Ihre CPU mit und die Informationen können dann bestimmt werden. Bitte aktualisieren Sie Ihre Frage mit der Ausgabe Ihrer Befehle oder zumindestlscpu | grep Model
Panther
@ bodhi.zazen Die vollständige Ausgabe für beide Befehle wurde der Frage hinzugefügt.
IQAndreas
Ich habe eine Vermutung darüber, was passiert ist. cpuinfohat zwei "Abschnitte", einen für jeden Kern. Ich habe dies verpasst, als ich die Ausgabe in einem kleineren Terminalfenster betrachtete, aber es wurde für mich sehr sichtbar, als die vollständige Ausgabe in eine Gist eingefügt wurde. Kann jemand bestätigen, dass dies tatsächlich die cpuinfoAnzeige der Ausgabe ist?
IQAndreas
Bitte lesen Sie die Ausgabe erneut. Beide zeigen zwei Single-Core-CPUs, ich sehe keinen Widerspruch.
1
Die cpuinfoAusgabe zeigt Informationen pro Ausführungsthread. Eine Intel-CPU mit HyperThreading zeigt einen Ausgabeblock pro "Thread" an. Die cpuinfoAusgabe enthält einen Block pro Kern auf einer Mehrkern-CPU oder einfach einen Block pro bestücktem Socket. Die Ausgabe von cpuinfowird sehr lang, wenn Sie mehrere Intel-CPUs mit jeweils mehreren Kernen und aktiviertem HyperThreading haben.
dan_linder

Antworten:

14

Dies steht im Einklang mit einem einzelnen Prozessor, der einen einzelnen Kern enthält, der zwei Ausführungsthreads durch Hyperthreading enthält . Sie haben also zwei logische Prozessoren, die jedoch den größten Teil ihrer Ressourcen gemeinsam nutzen (Befehlsdecodierung, Arithmetik usw.). Dies ermöglicht eine gewisse Parallelität - ein Thread kann fortschreiten, während der andere blockiert ist (z. B. auf einen Speicherzugriff warten), während die Hardwarekosten niedrig gehalten werden (weniger Komponenten als zwei unabhängige Kerne).

Schauen Sie sich den Rest der Ausgabe von lscpuund den Inhalt von an /proc/cpuinfo. Siehe Also, was sind logische CPU-Kerne (im Gegensatz zu physischen CPU-Kernen)? zum Beispiel.

Gilles 'SO - hör auf böse zu sein'
quelle
In einem Prozessor mit Hyperthreading wird nur der Kern für die Ausführung außerhalb der Reihenfolge gemeinsam genutzt. Jede virtuelle CPU verfügt über eine Befehlsdecodierung.
David