我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:
cat /proc/cpuinfo | awk '/^processor/{print $3}'
最后一个元素应该是cpu数量减1。
当前回答
这个线程中的大多数答案都与逻辑核心有关。
在Ubuntu 18上使用BaSH。x,我发现这可以很好地确定物理cpu的数量:
numcpu="$(lscpu | grep -i 'socket(s)' | awk '{print $(2)}')"
它应该可以在大多数Linux发行版上运行。
其他回答
可以通过以下两种方式确定CPU的物理核数。
Count the number of unique core ids (roughly equivalent to grep -P '^core id\t' /proc/cpuinfo | sort -u | wc -l). awk '/^core id\t/ {cores[$NF]++} END {print length(cores)}' /proc/cpuinfo Multiply the number of 'cores per socket' by the number of sockets. lscpu | awk '/^Core\(s\) per socket:/ {cores=$NF}; /^Socket\(s\):/ {sockets=$NF}; END{print cores*sockets}' Count the number of unique logical CPU's as used by the Linux kernel. The -p option generates output for easy parsing and is compatible with earlier versions of lscpu. lscpu -p | awk -F, '$0 !~ /^#/ {cores[$1]++} END {print length(cores)}'
重申一下其他人所说的,有一些相关的属性。
要确定可用的处理器数量:
getconf _NPROCESSORS_ONLN
grep -cP '^processor\t' /proc/cpuinfo
确定可用的处理单元数量(不一定与内核数量相同)。这是超线程感知的。
nproc
我不想太深入,但是您还可以通过getconf _NPROCESSORS_CONF确定已配置处理器的数量(而不是简单的可用/在线处理器)。要确定CPU的总数(离线和在线),您需要解析lscpu -ap的输出。
对于物理核总数:
grep '^core id' /proc/cpuinfo |sort -u|wc -l
在多插座机器(或总是)上,将上面的结果乘以插座的数量:
echo $(($(grep "^physical id" /proc/cpuinfo | awk '{print $4}' | sort -un | tail -1)+1))
@mklement0使用lscpu给出了一个很好的答案。我在评论中写了一个更简洁的版本
这个线程中的大多数答案都与逻辑核心有关。
在Ubuntu 18上使用BaSH。x,我发现这可以很好地确定物理cpu的数量:
numcpu="$(lscpu | grep -i 'socket(s)' | awk '{print $(2)}')"
它应该可以在大多数Linux发行版上运行。
下面将给出超线程和非超线程系统上的“真实”内核数。至少它在我所有的测试中都有效。
awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 }; END { print CORES*P }' /proc/cpuinfo
使用awk计算每个“物理id”方法的“核心id”,如果“核心id”不可用,则返回“处理器”计数(如覆盆子)
echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }' /proc/cpuinfo)