Mode operasi CPU 32-bit, 64-bit di Linux

15

Saya bingung. Menjalankan Fedora Linux, lscpumenghasilkan:

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

Tetapi ketika saya mencoba menginstal program 64-bit (Chrome) saya mendapatkan error seperti:

Paket / ..........x86_64.rpm memiliki arsitektur x86_64 yang tidak kompatibel. Arsitektur yang valid adalah ['i686', 'i586', 'i486', i386 ']

Saya kurang tertarik untuk dapat menginstal Chrome dan lebih tertarik pada mengapa lscpumengatakan bahwa CPU saya dapat berjalan dalam mode 64-bit; jelas ini tidak bisa berarti saya dapat menjalankan program 64-bit. Adakah yang bisa menjelaskan?

Zak
sumber
Anda dapat berbagi output cat /proc/cpu, saya pikir pada saat bootup Anda dapat memilih jika Anda ingin boot dalam mode 64 atau 32 bit
Raza
1
Apakah Anda menggunakan OS 32-bit atau 64-bit?
Renan
@Salton saya punya /proc/cpuinfo. Tapi ini menimbulkan lebih banyak pertanyaan aneh. The *_lmbendera menunjukkan kedua prosesor saya mendukung modus lama, namun ukuran alamat yang "36 bit fisik," ..
Zak

Jawaban:

32

lscpumemberitahu Anda bahwa arsitektur Anda adalah i686 (sebuah CPU Intel 32-bit), dan bahwa CPU Anda mendukung mode pengoperasian 32-bit dan 64-bit. Anda tidak akan dapat menginstal aplikasi yang dibangun x64 karena dibuat khusus untuk arsitektur x64.

CPU khusus Anda dapat menangani paket bawaan i386 atau i686. Ada beberapa cara untuk memverifikasi arsitektur & preferensi OS Anda.

lscpu

Seperti yang sudah Anda ketahui, Anda dapat menggunakan perintah lscpu. Ini bekerja dengan baik untuk memberi Anda gambaran kasar tentang kemampuan CPU Anda.

$ 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

Ini sebenarnya adalah data yang disediakan oleh kernel yang sebagian besar dari alat-alat seperti lscpugunakan untuk menampilkan. Saya menemukan output ini sedikit bagus pada kenyataan bahwa itu menunjukkan kepada Anda beberapa info nomor model tentang CPU khusus Anda. Juga akan menunjukkan bagian untuk setiap inti yang mungkin dimiliki CPU Anda.

Berikut ini output untuk satu inti:

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

Inilah yang terlihat seperti 3 baris pertama dari setiap bagian untuk inti:

$ 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

Output dari /proc/cpuinfojuga dapat memberi tahu Anda jenis arsitektur yang disediakan CPU Anda melalui berbagai flag yang ditampilkan. Perhatikan baris-baris ini dari perintah di atas:

$ 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

Bendera yang berakhir dengan _lmmemberi tahu Anda bahwa prosesor Anda mendukung "mode panjang". Mode panjang adalah nama lain untuk 64-bit.

nama kamu

Perintah ini dapat digunakan untuk menentukan platform apa yang dibangun oleh kernel Anda. Sebagai contoh:

Kernel 64-bit

$ 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 32-bit

$ 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

Output ini dapat disempurnakan sedikit lebih jauh dengan menggunakan switch, [-m|--machine], [-p|--processor], dan [-i|--hardware-platform].

Inilah output untuk sistem yang sama di atas.

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

CATATAN: Ada juga versi bentuk pendek uname -myang dapat Anda jalankan sebagai perintah yang berdiri sendiri arch,. Ini mengembalikan hal yang sama persis dengan uname -m. Anda dapat membaca lebih lanjut tentang archperintah dalam dokumentasi coreutils .

kutipan

arch mencetak nama perangkat keras mesin, dan setara dengan 'uname -m'.

hwinfo

Mungkin alat terbaik untuk menganalisis perangkat keras Anda harus hwinfo. Paket ini dapat menunjukkan kepada Anda apa saja yang Anda ingin / perlu ketahui tentang perangkat keras Anda, langsung dari terminal. Ini menyelamatkan saya puluhan kali ketika saya membutuhkan info dari sebuah chip pada motherboard sistem atau perlu mengetahui revisi papan di slot PCI.

Anda dapat menanyakannya terhadap berbagai subsistem komputer. Dalam kasus kami, kami akan melihat cpusubsistem.

$ 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

Sekali lagi, mirip dengan /proc/cpuinfoperintah ini menunjukkan kepada Anda susunan setiap inti individu dalam sistem multi-inti. Inilah baris pertama dari setiap bagian inti, hanya untuk memberi Anda ide.

$ 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

Ini mungkin cara yang paling jelas untuk mengetahui arsitektur apa yang disajikan CPU Anda ke OS. Memanfaatkan getconf, Anda mempertanyakan variabel sistem LONG_BIT. Ini bukan variabel lingkungan.

# 64-bit system
$ getconf LONG_BIT
64

# 32-bit system
$ getconf LONG_BIT
32

lih

Namun alat lain, mirip dengan kemampuan hwinfo. Anda dapat menanyakan hampir semua hal yang ingin Anda ketahui tentang perangkat keras yang mendasarinya. Sebagai contoh:

# 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

Mode operasi CPU?

Beberapa perintah melaporkan bahwa apa yang tampak sebagai CPU 32-bit mendukung mode 32-bit & 64-bit. Ini bisa sedikit membingungkan dan menyesatkan, tetapi jika Anda memahami sejarah CPU, khususnya Intel, Anda akan tahu bahwa mereka memiliki sejarah bermain game dengan produk mereka di mana CPU mungkin memiliki set instruksi yang mendukung 16-bit, tetapi dapat mengatasi lebih banyak RAM yang 2 ^ 16.

Hal yang sama terjadi pada CPU ini. Kebanyakan orang tahu bahwa CPU 32-bit hanya dapat mengatasi 2 ^ 32 = 4GB RAM. Tetapi ada versi CPU yang bisa mengatasi lebih banyak. CPU ini sering menggunakan kernel Linux dengan akhiran PAE - Physical Address Extension . Menggunakan kernel yang diaktifkan PAE bersama dengan perangkat keras ini akan memungkinkan Anda untuk mengatasi hingga 64GB pada sistem 32-bit.

Anda mungkin berpikir dengan baik lalu mengapa saya perlu arsitektur 64-bit? Masalah dengan CPU ini adalah bahwa ruang proses tunggal terbatas pada 2 ^ 32, jadi jika Anda memiliki simulasi besar atau program komputasi yang membutuhkan lebih dari 2 ^ 32 ruang addressable dalam RAM, maka ini tidak akan membantu Anda dengan itu.

Lihatlah halaman wikipedia di mikroarsitektur P6 (i686) untuk informasi lebih lanjut.

TL; DR - Jadi, apa sih arsitektur CPU saya?

Secara umum ini bisa membingungkan karena sejumlah perintah dan metodologi di atas menggunakan istilah "arsitektur" secara longgar. Jika Anda tertarik untuk mengetahui apakah OS yang mendasarinya adalah 32-bit atau 64-bit gunakan perintah ini:

  • lscpu
  • getconf LONG_BIT
  • nama kamu

Jika di sisi lain Anda ingin tahu arsitektur CPU gunakan perintah ini:

  • / proc / cpuinfo
  • hwinfo
  • lih

Khususnya Anda ingin mencari bidang di mana dikatakan hal-hal seperti "width: 64" atau "width: 32" jika Anda menggunakan alat seperti lshw, atau mencari benderanya:

  • lm: Long Mode (x86-64: amd64, juga dikenal sebagai Intel 64, yaitu mampu 64-bit)
  • lahf_lm: LAHF / SAHF dalam mode panjang

Hadiah 2 bendera ini memberi tahu Anda bahwa CPU 64-bit. Ketidakhadiran mereka memberi tahu Anda bahwa itu 32-bit.

Lihat URL ini untuk informasi tambahan tentang flag CPU.

Referensi

halaman manual

artikel:

slm
sumber
Bisakah Anda menjelaskan mengapa OS 32-bit dapat memiliki "op-mode" 64-bit? Jawaban Anda menyiratkan bahwa itu bisa.
djangofan
Itu benar. Lihat pembaruan saya, lmk jika itu masuk akal.
slm
Jelas jawaban yang bagus. Terima kasih banyak! Intel bermain game
Zak
Jadi hanya untuk memperjelas, lscpuagak menyesatkan dalam "Arsitektur: i686" sebenarnya mengacu pada menjalankan OS 32-bit.
Zak
1
Googling untuk informasi ini ada banyak kebingungan seputar topik khusus ini. Pertanyaan ini muncul di banyak situs SE. Banyak jawaban di situs-situs itu juga bingung tentang topik ini. Jadi ini adalah upaya untuk mencoba dan memberikan jawaban yang mencakup semua topik, bukan hanya untuk menjawab pertanyaan OP.
slm
4

Jika kernel Anda adalah kernel linux 32 bit, Anda tidak akan dapat menjalankan program 64 bit, bahkan jika prosesor Anda mendukungnya.

Instal kernel 64 bit (dan seluruh OS tentunya) untuk menjalankan 64 bit

ptr
sumber
Jika CPU Anda mendukung VT-x / AMD - Anda masih dapat menggunakan program 64 bit di bawah 32 OS menggunakan perangkat lunak virtualisasi seperti Virtualbox / WMware.
m3nda
1

Untuk kelengkapan: karena pada sebagian besar arsitektur 64-bit dimungkinkan untuk menjalankan kode 32-bit, baik di ruang kernel dan ruang pengguna, orang tidak boleh lupa bahwa sebenarnya ada 4 kemungkinan kombinasi:

  • Ruang pengguna 32-bit pada kernel 32-bit
  • Ruang pengguna 64-bit pada kernel 64-bit
  • Ruang pengguna 32-bit pada kernel 64-bit
  • baik 64-bit dan 32-bit ruang pengguna (s) pada kernel 64-bit

unameadalah cara yang biasa untuk menentukan varian kernel. Untuk ruang pengguna, filecukup baik dalam mengenali executable: file $SHELLatau file /sbin/initidiom yang nyaman. Hanya keberadaan keduanya /lib/*.so dan /lib64/*.so biasanya merupakan indikasi yang baik, bahwa sistem olahraga kedua varian ruang pengguna.

peterph
sumber
Sebenarnya ada 5. Kombinasi pertama dapat berupa "... pada perangkat keras 32-bit" atau "... pada perangkat keras 64-bit". 3 sisanya membutuhkan perangkat keras 64-bit.
Ben Voigt
Ya saya entah bagaimana menganggap perangkat keras 64-bit secara implisit dengan menulis pada sebagian besar arsitektur 64-bit .
peterph
0

Untuk mengetahui apakah Ubuntu yang diinstal adalah 32 atau 64 bit:

a) getconf LONG_BIT

b) uname -m

Jika itu menunjukkan i686 atau i386 itu berarti 32 bit. Jika ini menunjukkan x86_64 itu berarti 64 bit.

Jika CPU 32 bit Ubuntu harus dari 32 bit. Jika CPU 64 bit, ia bisa bekerja dalam 64 atau 32 bit. Jadi kita dapat memilih: Ubuntu dapat terdiri dari 32 bit atau 64 bit.

Untuk mengetahui apakah CPU 32 atau 64 bit:

a) grep -w lm / proc / cpuinfo

Jika kita melihat lm berwarna merah adalah 64 bit. Sebaliknya 32 bit.

b) sudo lshw | grep "description: CPU" -A 12 | lebar grep

Itu mengatakan dengan jelas apa yang ingin kita ketahui.

Perintah untuk kedua info:

lscpu

Kita hanya perlu melihat ke 2 baris pertama dari output: "Arsitektur" menginformasikan tentang versi Linux yang diinstal: "i686 ″ mewakili salah satu dari 32 bit, sedangkan" x86_64 ″ adalah singkatan dari 64 bit. "CPU op-mode (s)" menginformasikan tentang CPU. "32-bit" mewakili salah satu dari 32 bit, sedangkan "32-bit, 64-bit" atau "64-bit" adalah singkatan dari 64 bit.

Fasdiasi
sumber