GNU/Linux >> LINUX-Kenntnisse >  >> Linux

32-Bit-, 64-Bit-CPU-Betriebsmodus unter Linux

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.


Linux
  1. Linux-Betriebssystemdienst „cpuspeed“

  2. Der Adressraum des 32-Bit-Prozesses unter 64-Bit-Linux

  3. Linux-Befehl zum Zurückgeben der Anzahl von Bits (32 oder 64)?

  4. Suchen von 32-Bit-Bibliotheken unter 64-Bit-Linux

  5. Wie kann man feststellen, ob eine Linux-Binärdatei 32-Bit oder 64-Bit ist?

So zeigen Sie die CPU-Temperatur unter Linux an

iostat-Befehl unter Linux

Ist Ihr Ubuntu ein 32-Bit- oder ein 64-Bit-Betriebssystem?

So erkennen Sie, ob Sie einen 32-Bit- oder 64-Bit-Computer unter Linux und Windows haben

So erkennen Sie, ob es sich um eine 32-Bit- oder 64-Bit-Version von Linux handelt

Wie kann ich überprüfen, ob das Linux-System 32-Bit oder 64-Bit ist?