Por que 'nproc' mostra menos que 'nproc --all'?

2

Aqui está a saída de nproc vs nproc --all e outro comando encontrado na internet. Eu ainda não consigo entender o porquê. É uma VM KEM do QEMU com o CentOS 6.5 executando outros CentOS 6.5.

Abaixo estão as saídas de alguns outros comandos:

[root@h1-nms ~]# nproc
1
[root@h1-nms ~]# nproc --all
3
[root@h1-nms ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                3
On-line CPU(s) list:   0-2
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             3
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 13
Stepping:              3
CPU MHz:               2194.710
BogoMIPS:              4389.42
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-2
[root@h1-nms ~]# getconf _NPROCESSORS_ONLN
3
[root@h1-nms ~]# cat /proc/$$/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             32000                32000                processes
Max open files            64000                64000                files
Max locked memory         65536000             65536000             bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       191509               191509               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
[root@h1-nms ~]# grep "" /sys/devices/system/cpu/cpu*/online
/sys/devices/system/cpu/cpu1/online:1
/sys/devices/system/cpu/cpu2/online:1
[root@h1-nms ~]# uname -a
Linux h1-nms 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@h1-nms ~]# cat /etc/*-release
CentOS release 6.5 (Final)
CentOS release 6.5 (Final)
CentOS release 6.5 (Final)
[root@h1-nms ~]#
    
por ALZ 02.03.2018 / 16:16

2 respostas

3

Como indicado em Kusalananda 's answer , nproc distingue entre o número de CPUs disponíveis para o processo atual e o número total de CPUs.

Nos sistemas Linux, as CPUs disponíveis para o processo atual, quando o OpenMP não está envolvido, são determinadas pela máscara de afinidade do processo. Para ver isso, execute taskset :

taskset -p $$

ou schedtool :

schedtool $$

( taskset é parte do pacote util-linux e deve ser instalado por padrão; schedtool é seu próprio pacote e talvez precise ser instalado se você quiser usá-lo.)

No seu caso, isso deve mostrar que seu shell está limitado a um único processador, e é por isso que nproc outputs 1 .

    
por 02.03.2018 / 16:30
2

Na parte superior do manual nproc :

Print the number of processing units available to the current process, which may be less than the number of online processors.

então

--all

print the number of installed processors

A documentação do GNU info diz um pouquinho mais:

Print the number of processing units available to the current process, which may be less than the number of online processors. If this information is not accessible, then print the number of processors installed. If the OMP_NUM_THREADS or OMP_THREAD_LIMIT environment variables are set, then they will determine the minimum and maximum returned value respectively. The result is guaranteed to be greater than zero.

e

--all

Print the number of installed processors on the system, which may be greater than the number online or available to the current process. The OMP_NUM_THREADS or OMP_THREAD_LIMIT environment variables are not honored in this case.

    
por 02.03.2018 / 16:27

Tags