Saya ingin mengetahui berapa inti yang dimiliki sistem saya, jadi saya mencari pertanyaan yang sama di Google. Saya mendapat beberapa perintah seperti lscpu
perintah. Ketika saya mencoba perintah ini, itu memberi saya hasil berikut:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 1998.000
BogoMIPS: 5302.48
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
NUMA node0 CPU(s): 0-3
Secara khusus, output ini menunjukkan:
- CPU: 4
- Inti per soket: 4
- Keluarga CPU: 6
Manakah dari mereka yang menunjukkan inti dari sistem Linux?
Apakah ada perintah lain untuk memberi tahu jumlah inti, atau apakah saya berasumsi bahwa itu sepenuhnya salah?
Jawaban:
Anda harus melihat soket dan inti per soket. Dalam hal ini Anda memiliki 1 CPU fisik (socket) yang memiliki 4 core (core per socket).
sumber
nproc
saya mendapatkan 4 kembali. Menggunakancat /proc/cpuinfo
saya mendapatkan 4, dan dengan demikian sepertinya jawaban ini salah, setidaknya untuk situasi saya.Untuk mendapatkan gambar yang lengkap, Anda perlu melihat jumlah utas per inti, inti per soket dan soket . Jika Anda mengalikan angka-angka ini, Anda akan mendapatkan jumlah CPU di sistem Anda.
CPU adalah apa yang Anda lihat ketika Anda menjalankan
htop
(ini tidak sama dengan CPU fisik).Ini adalah contoh dari mesin desktop:
Dan server:
Output
nproc
sesuai dengan jumlah CPU darilscpu
. Untuk mesin desktop di atas, ini harus sesuai dengan 8 CPU yang dilaporkan olehlscpu
:Output dari
/proc/cpuinfo
harus sesuai dengan informasi ini, misalnya pada sistem desktop di atas kita dapat melihat ada 8 prosesor (CPU) dan 4 core (core id 0-3):The
cpu cores
dilaporkan oleh/proc/cpuinfo
berkorespondensi keCore(s) per socket
dilansirlscpu
. Untuk mesin desktop di atas, ini harus sesuai dengan 4 Core per socket yang dilaporkan oleh lscpu:Untuk secara spesifik menjawab pertanyaan Anda, Anda memberi tahu berapa inti yang Anda miliki dengan mengalikan jumlah inti yang Anda miliki per soket dengan jumlah soket yang Anda miliki.
Sebagai contoh sistem di atas desktop memiliki 4 core:
Sementara server memiliki 16:
Utilitas lain yang bermanfaat adalah
dmidecode
yang mengeluarkan informasi per soket. Dalam hal sistem server yang tercantum di atas, kami mengharapkan untuk melihat 8 core per socket dan 16 thread per socket:The
lscpu
perintah memiliki sejumlah pilihan yang berguna yang Anda mungkin ingin memeriksa, misalnya:Lihat
man lscpu
detailnya.Singkatnya:
sumber
lscpu --all --extended
akan menjadi tambahan yang berguna tetapi saya tidak lagi memiliki akses ke mesin-mesin khusus ini.lscpu --all --parse=CORE,SOCKET | grep -Ev "^#" | sort -u | wc -l
Socket(s) * Core(s) per socket
. Mengingat apa yang baru saja saya katakan, saya kiraecho Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))
akan lebih baik sehingga orang dapat melihat dengan tepat apa yang sedang dikalikan ...Anda dapat memperoleh informasi ini dengan
nproc(1)
perintahItu tidak memerlukan hak root.
sumber
Agar jawabannya tidak membingungkan, Anda perlu memahami beberapa konsep arsitektur komputer sederhana:
Ada berbagai jenis instruksi. Logika keputusan di dalam CPU akan mengirimkan instruksi yang berbeda ke unit perangkat keras yang berbeda . Sebagai contoh, instruksi aritmatika sebenarnya dilakukan oleh ALU (unit aritmatika / logika), sedangkan instruksi yang memuat / menyimpan dari memori dieksekusi oleh semacam unit memori .
Sebuah inti merujuk pada satu set perangkat keras eksekusi aktual (yaitu setiap inti memiliki ALU, unit memori, dll ...)
Anda dapat memiliki banyak CPU yang berbagi satu inti - ini disebut hyperthreading.
Sebuah socket adalah slot fisik pada motherboard di mana chip dimasukkan. Chip ini memiliki sejumlah inti di dalamnya.
Contoh:
Contoh OP:
Contoh lain:
Dua soket fisik, masing-masing berisi chip dengan 4 inti fisik, membuat total 8 inti. Dua utas dapat mengeluarkan instruksi untuk masing-masing inti (mesin ini memiliki hiphreading), artinya harus ada dua CPU yang melekat pada masing-masing inti, sehingga total 8 * 2 = 16 CPU
Mesin pertama dapat mengeksekusi tepat empat instruksi pada waktu dan periode tertentu. Mesin kedua dapat menjalankan antara 8 dan 16 instruksi pada waktu tertentu: 16 akan dicapai hanya ketika setiap pasangan CPU menjalankan berbagai jenis instruksi dan dengan demikian dapat berbagi inti tanpa menunggu.
sumber
Anda juga dapat menggunakan perintah
cat /proc/cpuinfo
yang akan menampilkan sepotong data untuk setiap inti. Setiap chunk dimulai dengan info ini:Core diberi nomor mulai dari 0, jadi jika chunk terakhir mengatakan
processor : 3
seperti dalam kasus ini, mesin Anda memiliki 4 core.sumber
grep -c ^processor /proc/cpuinfo
(getconf adalah bagian dari glibc)
sumber
getconf _NPROCESSORS_CONF
membuat Anda jumlah prosesor yang dikonfigurasi. Anda bisa mendapatkan nilai dari kedua makro ini di dalam kode sumber C juga, dengan menggunakansysconf()
fungsinya. Ketikkanman sysconf
untuk informasi lebih lanjut.sumber
t 4
dilakukan untuk dmidecode? Bagaimana jumlah & garis yang diaktifkan berlipat ganda? Apakah contoh Anda menunjukkan 2 core, atau 6, atau 12, atau 24, atau nomor lain?4
adalahprocessor
, lihat linux.die.net/man/8/dmidecode . Tetapi menggunakan4
sebagai argumen adalah praktik yang buruk.bash: dmidecode: command not found
Itu yang kamu butuhkan. Ini adalah jumlah inti online, terlepas dari apakah hyperthreading aktif atau tidak.
Cara mudah lainnya.
sumber
ls -d /sys/devices/system/cpu/cpu* | wc -l
menunjukkan 49 karena ada direktori dicpuidle
antaracpuN
direktori.Saya menemukan cara ini:
sumber
Hanya ingin menambahkan beberapa info ke jawaban @htaccess.
Dalam CentOS 6.x, dmidecode tidak menampilkan informasi jumlah Core / Thread, dan sebenarnya menganggap 'CPU' sebagai 'CPU' atau 'Core' di lscpu, bukan 'socket'.
sumber
Keluarga CPU tidak relevan di sini.
Dalam kasus Anda, Anda memiliki total 4 core penuh.
Yang juga penting, adalah "Utas per inti". Tapi Anda punya 1, jadi tidak dalam kasus Anda.
sumber
Cores = Cores per socket X Sockets
, lihat deskripsi dalam respons saya.Cara mudah untuk mengetahui jumlah CPU adalah dengan mengeluarkan perintah di bawah ini:
sumber