Bagaimana untuk mengetahui jumlah core dari sistem di Linux?

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:

  • CPU(s): 4
  • Inti(s) per socket: 4
  • CPU keluarga: 6

Mana yang menunjukkan inti dari sistem Linux?

Apakah ada perintah lain untuk memberitahu jumlah core, atau aku asumsi itu benar-benar salah?

Mengomentari pertanyaan (2)

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 perlu menyadari dari soket, core dan benang
  • Anda perlu berhati-hati dari istilah CPU seperti itu berarti hal yang berbeda dalam konteks yang berbeda
Komentar (5)
Larutan

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).

Komentar (2)

Anda bisa mendapatkan informasi ini dengan nproc(1) perintah

$ nproc --all
12

Ini tidak memerlukan akses root.

Komentar (8)

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.

Contoh:

OP's contoh:

CPU(s):                4
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
  • satu fisik socket, yang berisi sebuah chip dengan
  • 4 core fisik (berpikir ALUs 4 dan 4 unit memori total)
  • Hanya 1 thread bisa mengeluarkan instruksi untuk inti (tidak hyperthreading), yang berarti ada
  • satu CPU per core, atau 4 * 1 = 4 Cpu

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.

Komentar (1)

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.

Komentar (2)
getconf _NPROCESSORS_ONLN

(getconf adalah bagian dari glibc)

Komentar (2)
[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
Komentar (3)
$ 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.

Komentar (1)

Saya menemukan cara ini:

echo $((`cat /sys/devices/system/cpu/present | sed 's/0-//'` + 1))
Komentar (0)

Hanya ingin menambahkan beberapa info untuk @htaccess 's jawaban.

Di CentOS 6.x, dmidecode tidak output Core/Thread count info, dan itu benar-benar hal 'CPU' sebagai 'CPU' atau 'Core' di lscpu, tidak 'socket'.

Komentar (2)

CPU keluarga adalah tidak relevan di sini.

  • CPU(s) = fisik soket
  • Inti(s) per socket - seperti yang dikatakan
  • jadi total jumlah core = CPU(s) * Inti(s) per socket

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.

Komentar (2)

Cara sederhana untuk mengetahui jumlah dari Cpu adalah dengan mengeluarkan perintah berikut:

cat /proc/interrupts | egrep -i 'cpu'
Komentar (2)