GNU/Linux >> Tutoriales Linux >  >> Linux

Modo operativo de CPU de 32 bits y 64 bits en Linux

lscpu le dice que su arquitectura es i686 (una CPU Intel de 32 bits) y que su CPU admite modos operativos de 32 y 64 bits. No podrá instalar aplicaciones construidas x64 ya que están diseñadas específicamente para arquitecturas x64.

Su CPU en particular puede manejar los paquetes integrados i386 o i686. Hay varias formas de verificar sus preferencias de arquitectura y sistema operativo.

lscpu

Como ya sabe, puede usar el comando lscpu. Funciona bien para darte una idea aproximada de lo que tu CPU es capaz de hacer.

$ 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

Estos son en realidad los datos proporcionados por el kernel que la mayoría de las herramientas como lscpu utilizar para mostrar. Encuentro esta salida un poco agradable en el hecho de que le muestra información sobre el número de modelo de su CPU en particular. También te mostrará una sección por cada núcleo que pueda tener tu CPU.

Aquí está la salida para un solo núcleo:

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

Así es como se ven las primeras 3 líneas de cada sección para un núcleo:

$ 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 salida de /proc/cpuinfo también puede indicarle el tipo de arquitectura que proporciona su CPU a través de las diversas banderas que muestra. Observe estas líneas del comando anterior:

$ 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

Las banderas que terminan en _lm decirle que su procesador admite "modo largo". El modo largo es otro nombre para 64 bits.

nombre

Este comando se puede usar para determinar qué plataforma fue compatible con su kernel. Por ejemplo:

núcleo de 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

núcleo de 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

Esta salida se puede refinar un poco más usando los interruptores, [-m|--machine] , [-p|--processor] y [-i|--hardware-platform] .

Aquí está esa salida para los mismos sistemas anteriores.

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

NOTA: También hay una versión abreviada de uname -m que puede ejecutar como un comando independiente, arch . Devuelve exactamente lo mismo que uname -m . Puedes leer más sobre el arch comando en la documentación de coreutils.

extracto

arch imprime el nombre del hardware de la máquina y es equivalente a 'uname -m'.

hwinfo

Probablemente la mejor herramienta para analizar su hardware sea hwinfo . Este paquete puede mostrarle prácticamente cualquier cosa que quiera/necesite saber sobre su hardware, directamente desde la terminal. Me salvó docenas de veces cuando necesitaba información de un chip en la placa base de un sistema o necesitaba saber la revisión de una placa en una ranura PCI.

Puede consultarlo contra los diferentes subsistemas de una computadora. En nuestro caso, veremos el cpu subsistema.

$ 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

De nuevo, similar a /proc/cpuinfo este comando le muestra la composición de cada núcleo individual en un sistema multinúcleo. Esta es la primera línea de cada sección de un núcleo, solo para darte una idea.

$ 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

Esta es probablemente la forma más obvia de saber qué arquitectura presenta su CPU al sistema operativo. Haciendo uso de getconf , está consultando la variable del sistema LONG_BIT. Esta no es una variable de entorno.

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lshw

Otra herramienta más, similar en capacidades a hwinfo . Puede consultar prácticamente cualquier cosa que desee saber sobre el hardware subyacente. Por ejemplo:

# 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

¿Modo(s) operativo(s) de la CPU?

Varios de los comandos informan que lo que parece ser una CPU de 32 bits admite modos de 32 bits y 64 bits. Esto puede ser un poco confuso y engañoso, pero si comprende la historia de las CPU, Intel específicamente, sabrá que tienen un historial de juegos con sus productos donde una CPU puede tener un conjunto de instrucciones que admite 16 bits. pero puede abordar más RAM que 2^16.

Lo mismo está pasando con estas CPU. La mayoría de la gente sabe que una CPU de 32 bits solo puede manejar 2^32 =4 GB de RAM. Pero hay versiones de CPU que pueden abordar más. Estas CPU suelen hacer uso de un kernel de Linux con el sufijo PAE - Extensión de dirección física. El uso de un kernel habilitado para PAE junto con este hardware le permitiría abordar hasta 64 GB en un sistema de 32 bits.

Podría pensar bien, entonces, ¿por qué necesito una arquitectura de 64 bits? El problema con estas CPU es que el espacio de un solo proceso está limitado a 2 ^ 32, por lo que si tiene un programa computacional o de simulación grande que necesitaba más de 2 ^ 32 de espacio direccionable en RAM, entonces esto no le habría ayudado. con eso.

Eche un vistazo a la página de wikipedia sobre la microarquitectura P6 (i686) para obtener más información.

TL;DR - Entonces, ¿qué diablos es la arquitectura de mi CPU?

En general, puede resultar confuso porque varios de los comandos y metodologías anteriores usan el término "arquitectura" de forma imprecisa. Si está interesado en saber si el sistema operativo subyacente es de 32 bits o de 64 bits, use estos comandos:

  • lscpu
  • getconf LONG_BIT
  • nombre

Si por el contrario quieres conocer la arquitectura de la CPU utiliza estos comandos:

  • /proc/cpuinfo
  • hwinfo
  • lshw

Específicamente, desea buscar campos donde diga cosas como "ancho:64" o "ancho:32" si está usando una herramienta como lshw , o busque las banderas:

  • lm :Modo largo (x86-64:amd64, también conocido como Intel 64, es decir, compatible con 64 bits)
  • lahf_lm :LAHF/SAHF en modo largo

Los presentes de estas 2 banderas le indican que la CPU es de 64 bits. Sus ausencias te dice que es de 32 bits.

Consulte estas URL para obtener información adicional sobre los indicadores de CPU.

  • ¿Qué significan las banderas en /proc/cpuinfo?
  • Indicadores de funciones de CPU y sus significados

Referencias

páginas man

  • página man de lscpu
  • /proc/cpuinfo página de referencia
  • página man de uname
  • página man de hwinfo
  • página man de getconf

artículos:

  • ¿Comprobar si una máquina funciona con un procesador de 64 o 32 bits/SO Linux?
  • Averigüe si el procesador es de 32 bits o 64 (Linux)
  • Necesito ayuda:verificación de 32 bits/64 bits para Linux

Si su kernel es un kernel Linux de 32 bits, no podrá ejecutar programas de 64 bits, incluso si su procesador lo admite.

Instale un kernel de 64 bits (y todo el sistema operativo, por supuesto) para ejecutar 64 bits


Para completar:dado que en la mayoría de las arquitecturas de 64 bits es posible ejecutar código de 32 bits, tanto en el espacio del kernel como en el espacio del usuario, no se debe olvidar que en realidad hay 4 combinaciones posibles:

  • espacio de usuario de 32 bits en un kernel de 32 bits
  • espacio de usuario de 64 bits en un kernel de 64 bits
  • espacio de usuario de 32 bits en un núcleo de 64 bits
  • ambos Espacio(s) de usuario de 64 y 32 bits en un kernel de 64 bits

uname es la forma habitual de determinar la variante del kernel. Para espacio de usuario, file es bastante bueno para reconocer ejecutables:file $SHELL o file /sbin/init son modismos convenientes. Solo la existencia de ambos /lib/*.so y /lib64/*.so Suele ser una buena indicación que el sistema tiene ambas variantes de espacio de usuario.


Linux
  1. Cómo limitar el uso de la CPU de un proceso en Linux

  2. ¿Está ejecutando una aplicación de 32 bits en Linux de 64 bits?

  3. Cómo compilar un binario de 32 bits en una máquina Linux de 64 bits con gcc/cmake

  4. ¿Hay alguna forma de obtener time_t de 64 bits en programas de 32 bits en Linux?

  5. ¿Cómo sé si estoy ejecutando Linux de 32 o 64 bits?

Cómo ver la temperatura de la CPU en Linux

Comando iostat en Linux

¿Tu Ubuntu es un sistema operativo de 32 bits o de 64 bits?

Cómo saber si tiene una computadora de 32 o 64 bits en Linux y Windows

Cómo saber si la versión de Linux es de 32 bits o de 64 bits

¿Cómo verificar que el sistema Linux sea de 32 bits o de 64 bits?