lscpu
sagt Ihnen, dass Ihre Architektur i686 ist (eine Intel 32-Bit-CPU) und dass Ihre CPU sowohl 32-Bit- als auch 64-Bit-Betriebsmodi unterstützt. Sie können keine x64-basierten Anwendungen installieren, da sie speziell für x64-Architekturen entwickelt wurden.
Ihre spezielle CPU kann entweder die von i386 oder i686 erstellten Pakete verarbeiten. Es gibt eine Reihe von Möglichkeiten, Ihre Architektur- und Betriebssystemeinstellungen zu überprüfen.
lscpu
Wie Sie bereits wissen, können Sie den Befehl lscpu verwenden. Es funktioniert gut, um Ihnen eine ungefähre Vorstellung davon zu geben, wozu Ihre CPU in der Lage ist.
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 1199.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
/proc/cpuinfo
Dies sind eigentlich die vom Kernel bereitgestellten Daten, die die meisten Tools wie lscpu
zum Anzeigen verwenden. Ich finde diese Ausgabe ein wenig nett, da sie Ihnen einige Modellnummerninformationen zu Ihrer speziellen CPU zeigt. Außerdem zeigt es Ihnen einen Abschnitt für jeden Kern, den Ihre CPU haben könnte.
Hier ist die Ausgabe für einen einzelnen Kern:
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 37
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
stepping : 5
cpu MHz : 1466.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 11
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 syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid
bogomips : 5319.74
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
So sehen die ersten 3 Zeilen jedes Abschnitts für einen Kern aus:
$ grep processor -A 3 /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 37
--
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 37
--
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 37
--
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 37
Die Ausgabe von /proc/cpuinfo
kann Ihnen auch anhand der verschiedenen angezeigten Flags mitteilen, welche Art von Architektur Ihre CPU bereitstellt. Beachten Sie diese Zeilen aus dem obigen Befehl:
$ grep /proc/cpuinfo | head -1
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 syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid
Die Flags, die auf _lm
enden sagen Ihnen, dass Ihr Prozessor den "langen Modus" unterstützt. Langmodus ist ein anderer Name für 64-Bit.
uname
Dieser Befehl kann verwendet werden, um festzustellen, für welche Plattform Ihr Kernel entwickelt wurde, um ihn zu unterstützen. Zum Beispiel:
64-Bit-Kernel
$ uname -a
Linux grinchy 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
32-Bit-Kernel
$ uname -a
Linux skinner.bubba.net 2.6.18-238.19.1.el5.centos.plus #1 SMP Mon Jul 18 10:07:01 EDT 2011 i686 i686 i386 GNU/Linux
Diese Ausgabe kann mit den Schaltern [-m|--machine]
noch etwas verfeinert werden , [-p|--processor]
, und [-i|--hardware-platform]
.
Hier ist diese Ausgabe für dieselben oben genannten Systeme.
64-Bit
$ uname -m; uname -p; uname -i
x86_64
x86_64
x86_64
32-Bit
$ uname -m; uname -p; uname -i
i686
i686
i386
HINWEIS: Es gibt auch eine Kurzform von uname -m
den Sie als eigenständigen Befehl ausführen können, arch
. Es gibt genau dasselbe zurück wie uname -m
. Sie können mehr über arch
lesen Befehl in der Coreutils-Dokumentation.
Auszug
arch gibt den Namen der Maschinenhardware aus und entspricht „uname -m“.
hwinfo
Das wahrscheinlich beste Tool zur Analyse Ihrer Hardware ist hwinfo
. Dieses Paket kann Ihnen so ziemlich alles zeigen, was Sie über Ihre Hardware wissen möchten/müssen, direkt vom Terminal aus. Es erspart mir Dutzende von Malen, wenn ich Informationen von einem Chip auf der Hauptplatine eines Systems brauche oder die Version einer Platine in einem PCI-Steckplatz wissen muss.
Sie können es für die verschiedenen Subsysteme eines Computers abfragen. In unserem Fall betrachten wir den cpu
Subsystem.
$ hwinfo --cpu
01: None 00.0: 10103 CPU
[Created at cpu.301]
Unique ID: rdCR.a2KaNXABdY4
Hardware Class: cpu
Arch: X86-64
Vendor: "GenuineIntel"
Model: 6.37.5 "Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz"
Features: 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,syscall,nx,rdtscp,lm,constant_tsc,arch_perfmon,pebs,bts,rep_good,xtopology,nonstop_tsc,aperfmperf,pni,pclmulqdq,dtes64,monitor,ds_cpl,vmx,smx,est,tm2,ssse3,cx16,xtpr,pdcm,sse4_1,sse4_2,popcnt,aes,lahf_lm,ida,arat,tpr_shadow,vnmi,flexpriority,ept,vpid
Clock: 2666 MHz
BogoMips: 5319.74
Cache: 3072 kb
Units/Processor: 16
Config Status: cfg=new, avail=yes, need=no, active=unknown
Wieder ähnlich wie bei /proc/cpuinfo
Dieser Befehl zeigt Ihnen den Aufbau jedes einzelnen Kerns in einem Multi-Core-System. Hier ist die erste Zeile von jedem Abschnitt eines Kerns, nur um Ihnen eine Vorstellung zu geben.
$ hwinfo --cpu | grep CPU
01: None 00.0: 10103 CPU
Model: 6.37.5 "Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz"
02: None 01.0: 10103 CPU
Model: 6.37.5 "Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz"
03: None 02.0: 10103 CPU
Model: 6.37.5 "Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz"
04: None 03.0: 10103 CPU
Model: 6.37.5 "Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz"
getconf
Dies ist wahrscheinlich der offensichtlichste Weg, um festzustellen, welche Architektur Ihre CPU dem Betriebssystem präsentiert. Verwendung von getconf
, Ihre Abfrage der Systemvariablen LONG_BIT. Dies ist keine Umgebungsvariable.
# 64-bit system
$ getconf LONG_BIT
64
# 32-bit system
$ getconf LONG_BIT
32
lshw
Noch ein weiteres Tool mit ähnlichen Fähigkeiten wie hwinfo
. Sie können so ziemlich alles abfragen, was Sie über die zugrunde liegende Hardware wissen möchten. Zum Beispiel:
# 64-bit Kernel
$ lshw -class cpu
*-cpu
description: CPU
product: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
vendor: Intel Corp.
physical id: 6
bus info: [email protected]
version: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
slot: None
size: 1199MHz
capacity: 1199MHz
width: 64 bits
clock: 133MHz
capabilities: fpu fpu_exception wp 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 syscall nx rdtscp x86-64 constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt aes lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid cpufreq
configuration: cores=2 enabledcores=2 threads=4
# 32-bit Kernel
$ lshw -class cpu
*-cpu:0
description: CPU
product: Intel(R) Core(TM)2 CPU 4300 @ 1.80GHz
vendor: Intel Corp.
physical id: 400
bus info: [email protected]
version: 6.15.2
serial: 0000-06F2-0000-0000-0000-0000
slot: Microprocessor
size: 1800MHz
width: 64 bits
clock: 800MHz
capabilities: boot fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe x86-64 constant_tsc pni monitor ds_cpl est tm2 ssse3 cx16 xtpr lahf_lm
configuration: id=1
*-logicalcpu:0
description: Logical CPU
physical id: 1.1
width: 64 bits
capabilities: logical
*-logicalcpu:1
description: Logical CPU
physical id: 1.2
width: 64 bits
capabilities: logical
CPU-Operationsmodus(e)?
Einige der Befehle berichten, dass eine scheinbar 32-Bit-CPU 32-Bit- und 64-Bit-Modi unterstützt. Dies kann ein wenig verwirrend und irreführend sein, aber wenn Sie die Geschichte von CPUs verstehen, insbesondere von Intel, werden Sie wissen, dass sie eine Geschichte von Spielen mit ihren Produkten haben, bei denen eine CPU möglicherweise einen Befehlssatz hat, der 16-Bit unterstützt. kann aber mehr RAM als 2 ^ 16 adressieren.
Das Gleiche passiert mit diesen CPUs. Die meisten Leute wissen, dass eine 32-Bit-CPU nur 2 ^ 32 =4 GB RAM adressieren kann. Aber es gibt Versionen von CPUs, die mehr adressieren können. Diese CPUs verwenden häufig einen Linux-Kernel mit dem Suffix PAE - Physical Address Extension. Die Verwendung eines PAE-fähigen Kernels zusammen mit dieser Hardware würde es Ihnen ermöglichen, bis zu 64 GB auf einem 32-Bit-System zu adressieren.
Sie denken vielleicht, warum brauche ich dann eine 64-Bit-Architektur? Das Problem bei diesen CPUs besteht darin, dass der Speicherplatz eines einzelnen Prozesses auf 2 ^ 32 begrenzt ist. Wenn Sie also ein großes Simulations- oder Rechenprogramm haben, das mehr als 2 ^ 32 adressierbaren Speicherplatz im RAM benötigt, hätte Ihnen dies nicht geholfen damit.
Weitere Informationen finden Sie auf der Wikipedia-Seite zur P6-Mikroarchitektur (i686).
TL;DR - Also, was zum Teufel ist die Architektur meiner CPU?
Im Allgemeinen kann es verwirrend werden, da eine Reihe der oben genannten Befehle und Methoden den Begriff "Architektur" lose verwenden. Wenn Sie daran interessiert sind, ob das zugrunde liegende Betriebssystem 32-Bit oder 64-Bit ist, verwenden Sie diese Befehle:
- lscpu
- getconf LONG_BIT
- uname
Wenn Sie andererseits die Architektur der CPU wissen möchten, verwenden Sie diese Befehle:
- /proc/cpuinfo
- hwinfo
- lshw
Insbesondere sollten Sie nach Feldern suchen, in denen Dinge wie „Breite:64“ oder „Breite:32“ stehen, wenn Sie ein Tool wie lshw
verwenden , oder suchen Sie nach den Flags:
lm
:Long Mode (x86-64:amd64, auch bekannt als Intel 64, also 64-Bit-fähig)lahf_lm
:LAHF/SAHF im Langmodus
Die Gegenwart dieser 2 Flags sagt Ihnen, dass die CPU 64-Bit ist. Ihre Abwesenheit sagt Ihnen, dass es 32-Bit ist.
Weitere Informationen zu den CPU-Flags finden Sie unter diesen URLs.
- Was bedeuten die Flags in /proc/cpuinfo?
- CPU-Feature-Flags und ihre Bedeutung
Referenzen
Manpages
- lscpu-Manpage
- /proc/cpuinfo Referenzseite
- uname-Manpage
- hwinfo-Manpage
- Manpage von getconf
Artikel:
- Überprüfen Sie, ob eine Maschine auf einem 64-Bit- oder 32-Bit-Prozessor/Linux-Betriebssystem läuft?
- Finden Sie heraus, ob der Prozessor 32-Bit oder 64 (Linux) ist
- Benötigen Sie Hilfe:32-Bit-/64-Bit-Prüfung für Linux
Wenn Ihr Kernel ein 32-Bit-Linux-Kernel ist, können Sie keine 64-Bit-Programme ausführen, selbst wenn Ihr Prozessor dies unterstützt.
Installieren Sie einen 64-Bit-Kernel (und natürlich das gesamte Betriebssystem), um 64-Bit auszuführen
Der Vollständigkeit halber:Da es auf den meisten 64-Bit-Architekturen möglich ist, 32-Bit-Code sowohl im Kernelspace als auch im Userspace auszuführen, sollte man nicht vergessen, dass es tatsächlich 4 mögliche Kombinationen gibt:
- 32-Bit-Benutzerbereich auf einem 32-Bit-Kernel
- 64-Bit-Benutzerbereich auf einem 64-Bit-Kernel
- 32-Bit-Benutzerbereich auf einem 64-Bit-Kernel
- beides 64-Bit- und 32-Bit-Benutzerbereich(e) auf einem 64-Bit-Kernel
uname
ist der übliche Weg zur Bestimmung der Kernelvariante. Für den Benutzerbereich file
ist ziemlich gut darin, ausführbare Dateien zu erkennen:file $SHELL
oder file /sbin/init
sind bequeme Redewendungen. Nur die Existenz von beidem /lib/*.so
und /lib64/*.so
ist in der Regel ein guter Hinweis darauf, dass das System beide Userspace-Varianten unterstützt.