GNU/Linux >> Tutoriels Linux >  >> Linux

Mode opérationnel CPU 32 bits, 64 bits sous Linux

lscpu vous indique que votre architecture est i686 (un processeur Intel 32 bits) et que votre processeur prend en charge les modes de fonctionnement 32 bits et 64 bits. Vous ne pourrez pas installer d'applications construites en x64 puisqu'elles sont conçues spécifiquement pour les architectures x64.

Votre processeur particulier peut gérer les packages construits i386 ou i686. Il existe plusieurs façons de vérifier vos préférences d'architecture et de système d'exploitation.

lscpu

Comme vous le savez déjà, vous pouvez utiliser la commande lscpu. Cela fonctionne bien pour vous donner une idée approximative de ce dont votre CPU est capable.

$ 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

Ce sont en fait les données fournies par le noyau que la plupart des outils tels que lscpu utiliser pour afficher. Je trouve cette sortie un peu agréable dans le fait qu'elle vous montre des informations sur le numéro de modèle de votre processeur particulier. Il vous montrera également une section pour chaque cœur que votre CPU peut avoir.

Voici la sortie pour un seul cœur :

$ 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:

Voici à quoi ressemblent les 3 premières lignes de chaque section pour un noyau :

$ 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

La sortie de /proc/cpuinfo peut également vous indiquer le type d'architecture fourni par votre CPU à travers les différents drapeaux qu'il affiche. Notez ces lignes de la commande ci-dessus :

$ 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

Les drapeaux qui se terminent par _lm vous dire que votre processeur prend en charge le "mode long". Le mode long est un autre nom pour 64 bits.

uname

Cette commande peut être utilisée pour déterminer quelle plate-forme votre noyau a été construit pour prendre en charge. Par exemple :

noyau 64 bits

$ 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

noyau 32 bits

$ 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

Cette sortie peut être affinée un peu plus en utilisant les commutateurs, [-m|--machine] , [-p|--processor] , et [-i|--hardware-platform] .

Voici cette sortie pour les mêmes systèmes ci-dessus.

64 bits

$ uname -m; uname -p; uname -i
x86_64
x86_64
x86_64

32 bits

$ uname -m; uname -p; uname -i
i686
i686
i386

REMARQUE : Il existe également une version abrégée de uname -m que vous pouvez exécuter en tant que commande autonome, arch . Il renvoie exactement la même chose que uname -m . Vous pouvez en savoir plus sur le arch commande dans la documentation coreutils.

extrait

arch imprime le nom du matériel de la machine et équivaut à "uname -m".

hwinfo

Le meilleur outil pour analyser votre matériel doit probablement être hwinfo . Ce package peut vous montrer à peu près tout ce que vous voudriez / devez savoir sur n'importe lequel de vos matériels, directement depuis le terminal. Cela m'a évité des dizaines de fois lorsque j'avais besoin d'informations sur une puce de la carte mère d'un système ou que j'avais besoin de connaître la révision d'une carte dans un emplacement PCI.

Vous pouvez l'interroger sur les différents sous-systèmes d'un ordinateur. Dans notre cas, nous examinerons le cpu sous-système.

$ 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

Encore une fois, similaire à /proc/cpuinfo cette commande vous montre la composition de chaque cœur individuel dans un système multicœur. Voici la première ligne de chaque section d'un noyau, juste pour vous donner une idée.

$ 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

C'est probablement le moyen le plus évident de dire quelle architecture votre CPU présente au système d'exploitation. Utilisation de getconf , vous interrogez la variable système LONG_BIT. Ce n'est pas une variable d'environnement.

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lshw

Encore un autre outil, similaire en capacités à hwinfo . Vous pouvez interroger à peu près tout ce que vous voulez savoir sur le matériel sous-jacent. Par exemple :

# 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

Mode(s) de fonctionnement du processeur ?

Plusieurs des commandes signalent que ce qui semble être un processeur 32 bits prend en charge les modes 32 bits et 64 bits. Cela peut être un peu déroutant et trompeur, mais si vous comprenez l'histoire des processeurs, Intel en particulier, vous saurez qu'ils ont l'habitude de jouer à des jeux avec leurs produits où un processeur peut avoir un jeu d'instructions prenant en charge 16 bits, mais peut adresser plus de RAM que 2 ^ 16.

La même chose se passe avec ces processeurs. La plupart des gens savent qu'un processeur 32 bits ne peut adresser que 2 ^ 32 =4 Go de RAM. Mais il existe des versions de processeurs qui peuvent en traiter davantage. Ces processeurs utilisent souvent un noyau Linux avec le suffixe PAE - Physical Address Extension. L'utilisation d'un noyau compatible PAE avec ce matériel vous permettrait d'adresser jusqu'à 64 Go sur un système 32 bits.

Vous pensez peut-être bien alors pourquoi ai-je besoin d'une architecture 64 bits ? Le problème avec ces processeurs est qu'un seul espace de processus est limité à 2 ^ 32, donc si vous avez un grand programme de simulation ou de calcul qui nécessitait plus que les 2 ^ 32 d'espace adressable dans la RAM, cela ne vous aurait pas aidé. avec ça.

Jetez un œil à la page wikipedia sur la microarchitecture P6 (i686) pour plus d'informations.

TL;DR - Qu'est-ce que c'est que l'architecture de mon processeur ?

En général, cela peut prêter à confusion car un certain nombre de commandes et de méthodologies ci-dessus utilisent le terme "architecture" de manière vague. Si vous souhaitez savoir si le système d'exploitation sous-jacent est 32 bits ou 64 bits, utilisez ces commandes :

  • lscpu
  • getconf LONG_BIT
  • uname

Si par contre vous voulez connaître l'architecture du CPU utilisez ces commandes :

  • /proc/cpuinfo
  • hwinfo
  • lshw

Plus précisément, vous souhaitez rechercher des champs où il est écrit des choses comme "width :64" ou "width :32" si vous utilisez un outil comme lshw , ou recherchez les drapeaux :

  • lm  :Mode long (x86-64 :amd64, également connu sous le nom d'Intel 64, c'est-à-dire compatible 64 bits)
  • lahf_lm :LAHF/SAHF en mode long

La présence de ces 2 drapeaux vous indique que le CPU est en 64 bits. Leurs absences vous indiquent que c'est du 32 bits.

Consultez ces URL pour plus d'informations sur les drapeaux CPU.

  • Que signifient les drapeaux dans /proc/cpuinfo ?
  • Indicateurs de fonctionnalité du processeur et leur signification

Références

pages de manuel

  • page de manuel lscpu
  • /proc/cpuinfo page de référence
  • page de manuel uname
  • page de manuel hwinfo
  • page de manuel getconf

articles :

  • Vérifier si une machine fonctionne avec un processeur 64 bits ou 32 bits/un système d'exploitation Linux ?
  • Découvrez si le processeur est 32 bits ou 64 bits (Linux)
  • Besoin d'aide :vérification 32 bits/64 bits pour Linux

Si votre noyau est un noyau Linux 32 bits, vous ne pourrez pas exécuter de programmes 64 bits, même si votre processeur le prend en charge.

Installez un noyau 64 bits (et tout le système d'exploitation bien sûr) pour exécuter 64 bits


Pour être complet :puisque sur la plupart des architectures 64 bits, il est possible d'exécuter du code 32 bits, à la fois dans l'espace noyau et dans l'espace utilisateur, il ne faut pas oublier qu'il existe en fait 4 combinaisons possibles :

  • Espace utilisateur 32 bits sur un noyau 32 bits
  • Espace utilisateur 64 bits sur un noyau 64 bits
  • Espace utilisateur 32 bits sur un noyau 64 bits
  • les deux Espace(s) utilisateur 64 bits et 32 bits sur un noyau 64 bits

uname est la manière habituelle de déterminer la variante du noyau. Pour l'espace utilisateur, file est assez bon pour reconnaître les exécutables :file $SHELL ou file /sbin/init sont des idiomes commodes. Juste l'existence des deux /lib/*.so et /lib64/*.so est généralement une bonne indication que le système comporte les deux variantes d'espace utilisateur.


Linux
  1. Exécuter une application 32 bits sous Linux 64 bits ?

  2. Service d'exploitation Linux "cpuspeed"

  3. Existe-t-il un moyen d'obtenir time_t 64 bits dans des programmes 32 bits sous Linux ?

  4. Recherche de bibliothèques 32 bits sur Linux 64 bits

  5. Comment déterminer si un fichier binaire Linux est 32 bits ou 64 bits ?

Comment afficher la température du processeur sous Linux

Commande iostat sous Linux

Votre Ubuntu est-il un système d'exploitation 32 bits ou 64 bits ?

Comment savoir si vous avez un ordinateur 32 bits ou 64 bits sous Linux et Windows

Comment savoir si la version 32 bits ou 64 bits de Linux

Comment vérifier que le système Linux est 32 bits ou 64 bits ?