CPU de 32 bits e 64 bits no Linux

15

Estou confuso. Rodar o Fedora Linux, lscpugera:

Architecture:            i686
CPU op-mode(s):          32-bit, 64-bit
...

Mas quando tento instalar um programa de 64 bits (Chrome), recebo um erro como:

O pacote /....x86_64.rpm possui uma arquitetura incompatível x86_64. As arquiteturas válidas são ['i686', 'i586', 'i486', i386 ']

Estou menos interessado em poder instalar o Chrome e mais interessado em lscpudizer por que minha CPU pode funcionar no modo de 64 bits; claramente isso não significa que eu possa executar programas de 64 bits. Alguém pode esclarecer?

Zak
fonte
você pode compartilhar saída cat /proc/cpu, acho que na inicialização você pode selecionar se você quer inicializar no modo de 64 ou 32 bits
Raza
1
Você está usando um sistema operacional de 32 bits ou de 64 bits?
Renan
@ Salton eu tenho um /proc/cpuinfo. Mas isso levanta questões mais curiosas. Os *_lmsinalizadores indicam os meus processadores suportam modo longo, mas os tamanhos de endereço são "36 bits físico," ..
Zak

Respostas:

32

lscpuestá lhe dizendo que sua arquitetura é i686 (uma CPU Intel de 32 bits) e que sua CPU suporta os modos operacionais de 32 e 64 bits. Você não poderá instalar aplicativos criados em x64, pois eles foram criados especificamente para arquiteturas x64.

Sua CPU específica pode lidar com os pacotes construídos i386 ou i686. Existem várias maneiras de verificar sua arquitetura e preferências do sistema operacional.

lscpu

Como você já sabe, você pode usar o comando lscpu. Funciona bem em fornecer uma idéia aproximada do que sua CPU é capaz.

$ 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

Na verdade, esses são os dados fornecidos pelo kernel que a maioria das ferramentas, como as lscpuusadas para exibir. Acho essa saída um pouco agradável no fato de mostrar algumas informações sobre o número do modelo sobre sua CPU em particular. Também mostrará uma seção para cada núcleo que sua CPU possa ter.

Aqui está a saída para um único 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:

Aqui está a aparência das três primeiras linhas de cada seção para um 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

A saída de /proc/cpuinfotambém pode informar o tipo de arquitetura que sua CPU está fornecendo através dos vários sinalizadores que mostra. Observe estas linhas do comando acima:

$ 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

Os sinalizadores que terminam _lmindicam que seu processador suporta "modo longo". Modo longo é outro nome para 64 bits.

uname

Este comando pode ser usado para determinar qual plataforma seu kernel foi construído para suportar. Por exemplo:

Kernel 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

Kernel 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 saída pode ser refinados usando um pouco mais os interruptores, [-m|--machine], [-p|--processor], e [-i|--hardware-platform].

Aqui está essa saída para os mesmos sistemas acima.

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: Também há uma versão resumida da uname -mqual você pode executar como um comando independente arch. Retorna exatamente a mesma coisa que uname -m. Você pode ler mais sobre o archcomando na documentação do coreutils .

excerto

arch imprime o nome do hardware da máquina e é equivalente a 'uname -m'.

hwinfo

Provavelmente a melhor ferramenta para analisar seu hardware precisa ser hwinfo. Este pacote pode mostrar praticamente qualquer coisa que você queira / precise saber sobre qualquer hardware, diretamente do terminal. Isso me salvou dezenas de vezes quando eu precisava de algumas informações de um chip na placa-mãe de um sistema ou precisava saber a revisão de uma placa em um slot PCI.

Você pode consultá-lo nos diferentes subsistemas de um computador. No nosso caso, veremos o cpusubsistema.

$ 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

Novamente, semelhante a /proc/cpuinfoeste comando mostra a composição de cada núcleo individual em um sistema multinúcleo. Aqui está a primeira linha de cada seção de um núcleo, apenas para lhe dar uma idéia.

$ 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

Essa é provavelmente a maneira mais óbvia de dizer qual arquitetura sua CPU está apresentando ao sistema operacional. Fazendo uso getconf, você está consultando a variável do sistema LONG_BIT. Esta não é uma variável de ambiente.

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lshw

Mais uma ferramenta, semelhante em recursos a hwinfo. Você pode consultar praticamente qualquer coisa que queira saber sobre o hardware subjacente. Por exemplo:

# 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: cpu@0
   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: cpu@0
   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

Modos operacionais da CPU?

Vários dos comandos relatam que o que parece ser uma CPU de 32 bits suporta os modos de 32 e 64 bits. Isso pode ser um pouco confuso e enganoso, mas se você entender o histórico das CPUs, especificamente da Intel, saberá que elas têm um histórico de jogos com seus produtos, onde uma CPU pode ter um conjunto de instruções compatível com 16 bits, mas pode endereçar mais RAM que 2 ^ 16.

O mesmo está acontecendo com essas CPUs. A maioria das pessoas sabe que uma CPU de 32 bits pode endereçar apenas 2 ^ 32 = 4GB de RAM. Mas existem versões de CPUs que podem resolver mais. Essas CPUs costumavam usar um kernel Linux com o sufixo PAE - Extensão de Endereço Físico . O uso de um kernel habilitado para PAE junto com este hardware permitiria endereçar até 64 GB em um sistema de 32 bits.

Você pode pensar bem, por que preciso de uma arquitetura de 64 bits? O problema com essas CPUs é que um único espaço de processo é limitado a 2 ^ 32, portanto, se você tiver um grande programa computacional de simulação que necessite de mais do que os 2 ^ 32 de espaço endereçável na RAM, isso não ajudará você com isso.

Dê uma olhada na página da Wikipédia na microarquitetura P6 (i686) para obter mais informações.

TL; DR - Então, o que diabos é a arquitetura da minha CPU?

Em geral, pode ficar confuso porque vários dos comandos e metodologias acima estão usando o termo "arquitetura" livremente. Se você estiver interessado em saber se o SO subjacente é de 32 ou 64 bits, use estes comandos:

  • lscpu
  • getconf LONG_BIT
  • uname

Se, por outro lado, você deseja conhecer a arquitetura da CPU, use estes comandos:

  • / proc / cpuinfo
  • hwinfo
  • lshw

Especificamente, você deseja procurar campos em que ele diz coisas como "width: 64" ou "width: 32" se estiver usando uma ferramenta como lshw, ou procurar os sinalizadores:

  • lm: Modo longo (x86-64: amd64, também conhecido como Intel 64, ou seja, compatível com 64 bits)
  • lahf_lm: LAHF / SAHF no modo longo

Os presentes desses 2 sinalizadores informam que a CPU é de 64 bits. A ausência deles diz que é de 32 bits.

Veja esses URLs para obter informações adicionais sobre os sinalizadores da CPU.

Referências

páginas de manual

artigos:

slm
fonte
Você pode explicar por que um sistema operacional de 32 bits pode ter um "modo op" de 64 bits? Sua resposta implica que pode.
31813 djangofan
Está correto. Veja minhas atualizações, lmk se isso fizer sentido.
Slm
Claramente uma ótima resposta. Muito obrigado! Intel jogando jogos
Zak
Portanto, só para esclarecer, lscpué um pouco enganador, pois "Architecture: i686" se refere à execução de um sistema operacional de 32 bits.
Zak
1
Pesquisando essas informações, havia muita confusão em torno desse tópico em particular. Esta pergunta aparece em muitos sites do SE. Muitas das respostas nesses sites também estavam confusas sobre esse tópico. Portanto, essa foi uma tentativa de tentar fornecer uma resposta abrangente ao tópico, não apenas para responder à pergunta do OP.
Slm
4

Se o seu kernel for um kernel linux de 32 bits, você não poderá executar programas de 64 bits, mesmo que seu processador o suporte.

Instale um kernel de 64 bits (e todo o SO, é claro) para executar 64 bits

ptr
fonte
Se o seu processador suportar VT-x / AMD, você ainda poderá usar programas de 64 bits em um sistema operacional 32 usando software de virtualização como Virtualbox / WMware.
M3nda 31/05
1

Para completar: como na maioria das arquiteturas de 64 bits, é possível executar o código de 32 bits, tanto no espaço do kernel quanto no espaço do usuário, não se deve esquecer que, na verdade, existem 4 combinações possíveis:

  • Espaço do usuário de 32 bits em um kernel de 32 bits
  • Espaço do usuário de 64 bits em um kernel de 64 bits
  • Espaço do usuário de 32 bits em um kernel de 64 bits
  • tanto de 64 bits e do espaço do utilizador 32-bit (s) sobre um núcleo de 64 bits

unameé a maneira usual de determinar a variante do kernel. Para o espaço do usuário, fileé muito bom em reconhecer executáveis: file $SHELLou file /sbin/initsão expressões convenientes. Apenas a existência de ambos /lib/*.so e /lib64/*.so geralmente é uma boa indicação de que o sistema ostenta as duas variantes de espaço do usuário.

peterph
fonte
Na verdade, existem 5. A primeira combinação pode ser "... no hardware de 32 bits" ou "... no hardware de 64 bits". Os 3 restantes requerem hardware de 64 bits.
Ben Voigt
Sim, de alguma forma, considerei o hardware de 64 bits implicitamente escrevendo na maioria das arquiteturas de 64 bits .
Peterph #
0

Para saber se o Ubuntu instalado é de 32 ou 64 bits:

a) getconf LONG_BIT

b) uname -m

Se mostrar i686 ou i386, significa 32 bits. Se mostrar x86_64, significa 64 bits.

Se a CPU é de 32 bits, o Ubuntu deve ser de 32 bits. Se a CPU é de 64 bits, pode funcionar em 64 ou 32 bits. Então, podemos escolher: o Ubuntu pode ter 32 bits ou 64 bits.

Para saber se a CPU é de 32 ou 64 bits:

a) grep -w lm / proc / cpuinfo

Se vemos lm em vermelho é de 64 bits. Caso contrário, é de 32 bits.

b) sudo lshw | grep "descrição: CPU" -A 12 | largura grep

Diz claramente o que queremos saber.

Um comando para as duas informações:

lscpu

Apenas precisamos dar uma olhada nas 2 primeiras linhas da saída: "Architecture" informa sobre a versão Linux instalada: "i686" representa um dos 32 bits, enquanto "x86_64" representa 64 bits. O “modo operacional da CPU” informa sobre a CPU. "32 bits" representa um dos 32 bits, enquanto "32 bits, 64 bits" ou "64 bits" representa um de 64 bits.

Fasdiasi
fonte