"nproc"이 "nproc --all"보다 적은 내용을 표시하는 이유는 무엇입니까?

"nproc"이 "nproc --all"보다 적은 내용을 표시하는 이유는 무엇입니까?

이것은 인터넷에서 찾은 nprocvs 및 기타 명령의 출력입니다. nproc --all나는 아직도 왜 그런지 이해하지 못합니다. CentOS 6.5 및 기타 CentOS 6.5를 실행하는 QEMU\KVM VM입니다.

다음은 다른 명령의 출력입니다.

[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 ~]#

답변1

에 표시된 바와 같이선행은 이루기가 어렵다~의답변, nproc현재 프로세스에 사용 가능한 CPU 수와 총 CPU 수를 구별합니다.

Linux 시스템에서 OpenMP가 관련되지 않은 경우 현재 프로세스에 사용 가능한 CPU는 프로세스의 선호도 마스크에 의해 결정됩니다. 이를 보려면 다음을 실행하세요 taskset.

taskset -p $$

또는 schedtool:

schedtool $$

( taskset패키지의 일부 util-linux이므로 기본적으로 설치되어야 합니다. schedtool자체 패키지이므로 사용하려면 설치해야 할 수도 있습니다.)

귀하의 경우 이는 쉘이 단일 프로세서로 제한되어 있음을 나타냅니다. 이는 nproc출력 입니다 1.

답변2

매뉴얼 상단에서 nproc:

현재 프로세스에 사용 가능한 처리 장치 수를 인쇄합니다. 이는 온라인 프로세서 수보다 적을 수 있습니다.

그 다음에

--all

설치된 프로세서 수를 인쇄합니다.

GNU 정보 문서에는 다음과 같은 내용이 더 자세히 나와 있습니다.

현재 프로세스에 사용 가능한 처리 장치 수를 인쇄합니다. 이는 온라인 프로세서 수보다 적을 수 있습니다. 이 정보에 액세스할 수 없으면 설치된 프로세서 수가 인쇄됩니다. OMP_NUM_THREADS또는 환경 변수가 설정된 경우 OMP_THREAD_LIMIT각각 최소 및 최대 반환 값을 결정합니다. 결과는 0보다 큰 것이 보장됩니다.

그리고

--all

인쇄 시스템에 설치된 프로세서 수. 이는 온라인 수 또는 현재 프로세스에 사용 가능한 수보다 클 수 있습니다. 이 경우 OMP_NUM_THREADS또는 환경 변수는 존중되지 않습니다.OMP_THREAD_LIMIT

관련 정보