Tôi đang chạy lệnh sau để lấy số lượng bộ xử lý / lõi trong Linux:
cat /proc/cpuinfo | grep processor | wc -l
Nó hoạt động nhưng nó không trông thanh lịch. Bạn sẽ đề xuất cải thiện nó như thế nào?
Tôi đang chạy lệnh sau để lấy số lượng bộ xử lý / lõi trong Linux:
cat /proc/cpuinfo | grep processor | wc -l
Nó hoạt động nhưng nó không trông thanh lịch. Bạn sẽ đề xuất cải thiện nó như thế nào?
Câu trả lời:
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/
nproc
có 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.
nproc --all
cho tất cả các Đơn vị xử lý đã cài đặt. Không có --all
, nproc
chỉ 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.
Công cụ đơn giản nhất đi kèm với glibc và được gọi là getconf
:
$ getconf _NPROCESSORS_ONLN
4
nproc
, điều này hoạt động (theo mặc định) trên mac os x.
_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.
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 cat
và 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
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)
psrinfo -p
thay thế
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.
online
tập tin, đơn giản hơn so với những gì nproc không)
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
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
Đ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
& egrep
không có -o
tùy chọn nên sed
được sử dụng thay thế.