命令行中的处理器/内核的数量

我正在运行以下命令来获取Linux中处理器/内核的数量:

cat /proc/cpuinfo | grep processor | wc -l 

它的作品,但它看起来不漂亮。 你会如何改进呢?

nproc是你在找什么。

更多信息: http : //www.cyberciti.biz/faq/linux-get-number-of-cpus-core-command/

最简单的工具带有glibc,称为getconf

 $ getconf _NPROCESSORS_ONLN 4 

我认为你给的方法是Linux上最便携的。 而不是产生不必要的cat和过程,你可以缩短一点:

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

如果你想这样做,所以它适用于Linux和OS X,你可以这样做:

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

在较新的内核上,你也可以使用/sys/devices/system/cpu/ interface来获得更多的信息:

 $ 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 

有关所有这些含义的更多信息,请参阅官方文档 。

util-linux项目提供的lscpu(1)命令也可能是有用的:

 $ 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 

当有人要求“处理器/内核的数量”时,有两个答案被请求。 “处理器”的数量将是机器上插槽中安装的物理编号。

“核心”的数量将是物理核心。 超线程(虚拟)核心将不会被包括在内(至less在我看来)。 作为使用线程池编写大量程序的人,您确实需要知道物理核心数量与核心数量/超线程数量。 也就是说,你可以修改下面的脚本来获得你需要的答案。

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

在配有2个Xeon X5650物理处理器的机器上,每个处理器都有6个支持超线程的物理内核:

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

在配备2个mdeol Xeon E5472处理器的机器上,每个处理器有4个不支持超线程的物理内核

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

这是为那些想要一个便携的方式来计算* bsd,* nix或solaris上的cpu核心(没有在aix和hp-ux上testing过,但应该可以工作)。 它一直为我工作。

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

solaris grepegrep没有-o选项,所以使用sed来代替。

另一个一行, 计算超线程核心

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

如果你需要一个独立于操作系统的方法,可以在Windows和Linux上运行。 使用python

 $ python -c 'import multiprocessing as m; print m.cpu_count()' 16