Số lượng bộ xử lý / lõi trong dòng lệnh


Câu trả lời:


138

nproc là những gì bạn đang tìm kiếm.

Thêm tại đây: http://www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/


11
Đẹp - nhưng không phổ biến như / proc / cpuinfo. nproccó trên máy ảo ubuntu của tôi, nhưng không có trên máy chạy RedHat 5.5 của tôi.
Digital Trauma

8
Đảm bảo nproc --allcho tất cả các Đơn vị xử lý đã cài đặt. Không có --all, nprocchỉ hiển thị Đơn vị xử lý có sẵn cho quy trình hiện tại. Đọc trang người đàn ông để biết thêm chi tiết. MMV.
JamesThomasMoon1979

96

Công cụ đơn giản nhất đi kèm với glibc và được gọi là getconf:

$ getconf _NPROCESSORS_ONLN
4

8
Tốt hơn nữa, đó là một tiện ích POSIX: pubs.opengroup.org/onlinepubs/009604499/utilities/getconf.html .
BCran

2
không giống như nproc, điều này hoạt động (theo mặc định) trên mac os x.
Alec Jacobson

Thật không may, trong khi tiện ích này có sẵn trên Solaris, _NPROCESSORS_ONLN(hoặc bất kỳ thứ gì có cpu, proc, v.v.) được liệt kê trong đầu ra của nó. Tôi đã hy vọng vì đây là một công cụ posix, nó sẽ hoạt động trên Linux / Solaris nên tôi không phải sử dụng phân nhánh.
Brian Vandenberg

39

Tôi nghĩ rằng phương pháp bạn đưa ra là dễ di chuyển nhất trên Linux. Thay vì tạo ra các quy trình catvà không cần thiết wc, bạn có thể rút ngắn nó một chút:

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

25

Nếu bạn muốn làm điều này để nó hoạt động trên linux và OS X, bạn có thể làm:

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

script di động đẹp :)
mircealungu

2
Trên Solaris, bạn cần sử dụng psrinfo -pthay thế
mems

14

Trên các hạt nhân mới hơn, bạn cũng có thể sử dụng /sys/devices/system/cpu/giao diện này để biết thêm thông tin:

$ 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

Xem tài liệu chính thức để biết thêm thông tin về ý nghĩa của tất cả những điều này.


2
nproc chủ yếu sử dụng điều này ($ OMP_NUM_THREADS rồi đến readdir sysfs). Tôi nghĩ cái này là giao diện tốt hơn.
Tobu

2
Và getconf cũng dựa trên giao diện này ( onlinetập tin, đơn giản hơn so với những gì nproc không)
Tobu

6

Khi ai đó hỏi "số lượng bộ vi xử lý / lõi" sẽ có 2 câu trả lời được yêu cầu. Số lượng "bộ xử lý" sẽ là số vật lý được cài đặt trong các ổ cắm trên máy.

Số lượng "lõi" sẽ là lõi vật lý. Các lõi siêu phân luồng (ảo) sẽ không được đưa vào (ít nhất là theo suy nghĩ của tôi). Là một người viết nhiều chương trình với nhóm luồng, bạn thực sự cần biết số lượng lõi vật lý so với lõi / siêu luồng. Điều đó nói rằng, bạn có thể sửa đổi tập lệnh sau để nhận được câu trả lời mà bạn cần.

#!/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"

Kết quả trên một chiếc máy có 2 bộ vi xử lý vật lý kiểu Xeon X5650, mỗi bộ có 6 nhân vật lý cũng hỗ trợ siêu phân luồng:

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

Trên máy có 2 bộ vi xử lý Xeon E5472 mdeol, mỗi bộ có 4 lõi vật lý không hỗ trợ siêu phân luồng

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

Đây là câu trả lời thấu đáo nhất đã cho tôi thông tin mà tôi đang tìm kiếm.
woodToaster

4

Các lscpu(1)lệnh được cung cấp bởi util-linux dự án cũng có thể có ích:

$ 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

Điều này dành cho những người muốn đếm số lõi cpu trên * bsd, * nix hoặc solaris (chưa thử nghiệm trên aix và hp-ux nhưng sẽ hoạt động). Nó luôn luôn làm việc cho tôi.

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

solaris grep& egrepkhông có -otùy chọn nên sedđược sử dụng thay thế.


1

Một lớp lót khác, không tính các lõi siêu phân luồng :

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

0

Nếu bạn cần một phương pháp độc lập hệ điều hành, hoạt động trên Windows và Linux. Sử dụng python

$ python -c 'import multiprocessing as m; print m.cpu_count()'
16
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.