Saya ingin mengetahui berapa banyak core sistem saya punya, jadi saya mencari pertanyaan yang sama di Google. Saya punya beberapa perintah seperti lscpu
perintah.
Ketika saya mencoba perintah ini, itu memberi saya hasil sebagai 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:
Mana yang menunjukkan inti dari sistem Linux?
Apakah ada perintah lain untuk memberitahu jumlah core, atau aku asumsi itu benar-benar salah?
Untuk mendapatkan gambaran yang lengkap yang anda butuhkan untuk melihat jumlah thread per core, core per soket dan soket. Jika anda mengalikan angka-angka ini anda akan mendapatkan jumlah Cpu pada sistem anda.
Cpu = Thread per core X core per soket soket X
Cpu adalah apa yang anda lihat ketika anda menjalankan htop
(ini tidak sama dengan Cpu fisik).
Berikut adalah contoh dari sebuah mesin desktop:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Dan server:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
Output dari nproc
sesuai dengan CPU dari lscpu
. Untuk mesin desktop di atas ini harus sesuai dengan 8 CPU(s) yang dilaporkan oleh lscpu
:
$ nproc --all
8
Output dari /proc/cpuinfo
harus sesuai informasi ini, misalnya di desktop sistem di atas dapat kita lihat ada 8 prosesor (Cpu) dan 4 core (inti id 0-3):
$ grep -E 'processor|core id' /proc/cpuinfo
processor : 0
core id : 0
processor : 1
core id : 0
processor : 2
core id : 1
processor : 3
core id : 1
processor : 4
core id : 2
processor : 5
core id : 2
processor : 6
core id : 3
processor : 7
core id : 3
The core cpu
yang dilaporkan oleh /proc/cpuinfo
sesuai dengan Inti(s) per soket
yang dilaporkan oleh lscpu
. Untuk mesin desktop di atas ini harus sesuai dengan 4 Inti(s) per socket dilaporkan oleh lscpu:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
Untuk secara khusus menjawab pertanyaan anda memberitahu anda berapa banyak core yang anda miliki dengan mengalikan jumlah core yang anda miliki per socket dengan jumlah soket yang anda miliki.
Core = Core per soket Soket X
Misalnya sistem di atas desktop memiliki 4 core:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4
Sementara server telah 16:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16
Lain yang berguna utilitas dmidecode
yang output per socket informasi. Dalam kasus sistem server yang tercantum di atas, kami mengharapkan untuk melihat 8 core per soket dan 16 benang per socket:
$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
Socket Designation: CPU1
Core Count: 8
Thread Count: 16
Socket Designation: CPU2
Core Count: 8
Thread Count: 16
The lscpu
perintah memiliki sejumlah pilihan yang berguna yang anda mungkin ingin memeriksa, misalnya:
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
Melihat manusia lscpu
untuk rincian.
Secara ringkas:
Anda harus melihat pada soket dan core per socket. Dalam hal ini anda memiliki 1 CPU fisik (socket) yang memiliki 4 core (core per socket).
Anda bisa mendapatkan informasi ini dengan nproc(1)
perintah
$ nproc --all
12
Ini tidak memerlukan akses root.
Untuk jawaban yang tidak membingungkan, anda perlu memahami beberapa komputer sederhana konsep arsitektur:
Menjalankan proses ("program") pada sistem linux anda. Setiap proses terdiri dari satu atau lebih benang
Setiap benang terpisah urutan instruksi****. Dua benang yang dapat dieksekusi secara paralel.
Setiap instruksi diberikan ke CPU untuk dieksekusi. CPU memiliki logika bahwa angka keluar apa-bit instruksi maksud dan memutuskan apa yang harus dilakukan dengan itu.
Ada berbagai jenis petunjuk. Keputusan logika di dalam CPU akan mengirimkan instruksi yang berbeda untuk berbeda hardware unit. Misalnya, aritmatika instruksi yang benar-benar dilakukan oleh ALU (arithmetic/logic unit), sementara petunjuk yang memuat/menyimpan dari memori yang dieksekusi oleh semacam memori satuan.
A inti mengacu pada satu set yang sebenarnya eksekusi perangkat keras (yaitu setiap core memiliki ALU, sebuah unit memori, dll...)
Anda dapat memiliki beberapa Cpu yang berbagi satu inti ini disebut hyperthreading.
Ide: thread Yang sedang melakukan aritmatika, sedangkan benang B memuat sesuatu dari memori. Ketika itu's benar, benang A dan B secara efisien dapat berbagi satu inti tanpa mengganggu satu sama lain's cara (menggunakan ALU, B menggunakan memory unit). Tentu saja, kadang-kadang kedua program akan ingin ALU, dan kemudian mereka harus menunggu untuk satu sama lain...
A socket adalah fisik slot pada motherboard yang menjadi chip yang dimasukkan. Chip ini memiliki jumlah core di dalamnya.
OP's contoh:
CPU(s): 4
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Contoh lain:
CPU(s): 16
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 2
Fisik dua soket, masing-masing berisi sebuah chip dengan 4 core fisik, sehingga total 8 core. Dua benang dapatkan untuk mengeluarkan instruksi untuk masing-masing inti (mesin ini memiliki hyperthreading), yang berarti harus ada dua Cpu yang terpasang untuk masing-masing core, membuat total 8 * 2 = 16 Cpu
Mesin pertama yang dapat mengeksekusi tepatnya empat petunjuk pada waktu tertentu, periode. Kedua mesin dapat menjalankan antara 8 dan 16 petunjuk pada waktu tertentu: 16 akan tercapai hanya bila masing-masing pasangan Cpu mengeksekusi berbagai jenis petunjuk dan agar dapat berbagi core tanpa menunggu.
Anda juga dapat menggunakan perintah cat /proc/cpuinfo
yang akan menampilkan sepotong data untuk masing-masing core. Masing-masing sepotong dimulai dengan info ini:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz
(...)
Core diberi nomor mulai dari 0, jadi jika yang terakhir sepotong kata prosesor : 3
seperti dalam kasus ini, komputer anda memiliki 4 core.
[root@xxxxx ~]# dmidecode -t 4 | egrep -i "Designation|Intel|core|thread"
Socket Designation: CPU1
Manufacturer: Intel
HTT (Multi-threading)
Version: Intel(R) Xeon(R) CPU L5640 @ 2.27GHz
Core Count: 6
Core Enabled: 6
Thread Count: 12
Socket Designation: CPU2
Manufacturer: Intel
HTT (Multi-threading)
Version: Intel(R) Xeon(R) CPU L5640 @ 2.27GHz
Core Count: 6
Core Enabled: 6
Thread Count: 12
$ grep -c processor /proc/cpuinfo
8
Yang's semua yang anda butuhkan. Itu adalah jumlah core online, terlepas jika hyperthreading on atau off.
$ ls -d /sys/devices/system/cpu/cpu* | wc -l
8
Cara lain yang mudah.
CPU keluarga adalah tidak relevan di sini.
Dalam kasus anda, anda memiliki total 4 core.
Apa yang juga dapat menjadi penting, adalah "Thread(s) per core". Tapi anda harus 1, sehingga tidak dalam kasus anda.
Cara sederhana untuk mengetahui jumlah dari Cpu adalah dengan mengeluarkan perintah berikut:
cat /proc/interrupts | egrep -i 'cpu'