Jumlah prosesor / inti di baris perintah


Jawaban:


138

nproc adalah apa yang Anda cari.

Lebih lanjut di sini: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/


11
Bagus - tapi tidak ada di mana-mana seperti / proc / cpuinfo. nprocapakah ada di VM ubuntu saya, tetapi tidak di mesin berbasis RedHat 5.5 saya.
Digital Trauma

8
Pastikan nproc --alluntuk semua Unit Pemrosesan yang diinstal. Tanpa --all, nprochanya memperlihatkan Unit Pemrosesan yang tersedia untuk proses saat ini. Baca halaman manual untuk lebih jelasnya. MMV.
JamesThomasMoon1979

96

Alat paling sederhana hadir dengan glibc dan disebut getconf:

$ getconf _NPROCESSORS_ONLN
4

8
Lebih baik lagi, ini adalah utilitas POSIX: pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html .
BCran

2
tidak seperti nproc, ini berfungsi (secara default) di mac os x.
Alec Jacobson

Sayangnya, meskipun utilitas ini tersedia di Solaris, _NPROCESSORS_ONLN(atau apa pun dengan cpu, proc, dll) tercantum dalam outputnya. Saya berharap karena ini adalah alat posix yang berfungsi di Linux / Solaris jadi saya tidak perlu menggunakan percabangan.
Brian Vandenberg

39

Saya pikir metode yang Anda berikan adalah yang paling portabel di Linux. Alih-alih memijah catdan wcmemproses yang tidak perlu , Anda dapat mempersingkatnya sedikit:

$ grep --count ^processor /proc/cpuinfo
2

25

Jika Anda ingin melakukannya agar berfungsi di linux dan OS X, Anda dapat melakukan:

CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)

skrip portabel yang bagus :)
mircealungu

2
Di Solaris Anda perlu menggunakan psrinfo -psebagai gantinya
mems

14

Pada kernel yang lebih baru, Anda juga dapat menggunakan /sys/devices/system/cpu/antarmuka untuk mendapatkan lebih banyak informasi:

$ ls /sys/devices/system/cpu/
cpu0  cpufreq  kernel_max  offline  possible  present  release
cpu1  cpuidle  modalias    online   power     probe    uevent
$ cat /sys/devices/system/cpu/kernel_max 
255
$ cat /sys/devices/system/cpu/offline 
2-63
$ cat /sys/devices/system/cpu/possible 
0-63
$ cat /sys/devices/system/cpu/present 
0-1
$ cat /sys/devices/system/cpu/online 
0-1

Lihat dokumen resmi untuk informasi lebih lanjut tentang apa arti semua ini.


2
nproc menggunakan ini, kebanyakan ($ OMP_NUM_THREADS lalu readdir sysfs). Saya pikir yang ini adalah antarmuka yang lebih baik.
Tobu

2
Dan getconf juga mengandalkan antarmuka ini ( onlinefilenya, lebih sederhana daripada yang dilakukan nproc)
Tobu

6

Ketika seseorang menanyakan "jumlah prosesor / inti" ada 2 jawaban yang diminta. Jumlah "prosesor" akan menjadi nomor fisik yang dipasang di soket pada mesin.

Jumlah "inti" akan menjadi inti fisik. Core hyperthreaded (virtual) tidak akan disertakan (setidaknya menurut saya). Sebagai seseorang yang menulis banyak program dengan kumpulan utas, Anda benar-benar perlu mengetahui jumlah inti fisik vs inti / hyperthreads. Karena itu, Anda dapat memodifikasi skrip berikut untuk mendapatkan jawaban yang Anda butuhkan.

#!/bin/bash

MODEL=`cat /cpu/procinfo | grep "model name" | sort | uniq`
ALL=`cat /proc/cpuinfo | grep "bogo" | wc -l`
PHYSICAL=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
CORES=`cat /proc/cpuinfo | grep "cpu cores" | sort | uniq | cut -d':' -f2`
PHY_CORES=$(($PHYSICAL * $CORES))
echo "Type $MODEL"
echo "Processors $PHYSICAL"
echo "Physical cores $PHY_CORES"
echo "Including hyperthreading cores $ALL"

Hasil pada mesin dengan 2 model prosesor fisik Xeon X5650 masing-masing dengan 6 inti fisik yang juga mendukung hyperthreading:

Type model name : Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz
Processors 2
Physical cores 12
Including hyperthreading cores 24

Pada mesin dengan prosesor 2 mdeol Xeon E5472 masing-masing dengan 4 inti fisik yang tidak mendukung hyperthreading

Type model name : Intel(R) Xeon(R) CPU           E5472  @ 3.00GHz
Processors 2
Physical cores 8
Including hyperthreading cores 8

Ini adalah jawaban paling menyeluruh yang memberi saya informasi yang saya cari.
woodenToaster

4

The lscpu(1)perintah yang disediakan oleh util-linux proyek juga mungkin berguna:

$ 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:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
Stepping:              9
CPU MHz:               3406.253
CPU max MHz:           3600.0000
CPU min MHz:           1200.0000
BogoMIPS:              5787.10
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0-3

1

Ini untuk mereka yang menginginkan cara portabel untuk menghitung inti cpu di * bsd, * nix atau solaris (belum diuji di aix dan hp-ux tetapi seharusnya berfungsi). Itu selalu berhasil untuk saya.

dmesg | \
egrep 'cpu[. ]?[0-9]+' | \
sed 's/^.*\(cpu[. ]*[0-9]*\).*$/\1/g' | \
sort -u | \
wc -l | \
tr -d ' '

solaris grep& egreptidak memiliki -oopsi jadi seddigunakan sebagai gantinya.


1

Satu baris lainnya, tanpa menghitung inti hyper-threaded :

lscpu | awk -F ":" '/Core/ { c=$2; }; /Socket/ { print c*$2 }' 

0

Jika Anda membutuhkan metode os independen, bekerja di Windows dan Linux. Gunakan python

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.