Commit 342298278e ("linux: Revert the use of sched_getaffinity on get_nproc") aka glibc-2.35~480 introduced a regression in environments where neither /sys/devices/system/cpu/ nor /proc/stat is available: $ nproc 128 $ getconf -a | grep _NPROCESSORS_ _NPROCESSORS_CONF 2 _NPROCESSORS_ONLN 2 This happened because that commit made get_nprocs() and get_nprocs_conf() bluntly return 2 when neither /sys/devices/system/cpu/ nor /proc/stat is available. I suggest changing these functions to check various sources of information in the following order: get_nprocs: /sys/devices/system/cpu/online -> sched_getaffinity -> /proc/stat -> 2 get_nprocs_conf: /sys/devices/system/cpu/ -> /proc/stat -> sched_getaffinity -> 2
The master branch has been updated by Dmitry Levin <ldv@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=e1d32b836410767270a3adf1f82b1a47e6e4cd51 commit e1d32b836410767270a3adf1f82b1a47e6e4cd51 Author: Dmitry V. Levin <ldv@altlinux.org> Date: Sat Feb 5 08:00:00 2022 +0000 linux: fix accuracy of get_nprocs and get_nprocs_conf [BZ #28865] get_nprocs() and get_nprocs_conf() use various methods to obtain an accurate number of processors. Re-introduce __get_nprocs_sched() as a source of information, and fix the order in which these methods are used to return the most accurate information. The primary source of information used in both functions remains unchanged. This also changes __get_nprocs_sched() error return value from 2 to 0, but all its users are already prepared to handle that. Old fallback order: get_nprocs: /sys/devices/system/cpu/online -> /proc/stat -> 2 get_nprocs_conf: /sys/devices/system/cpu/ -> /proc/stat -> 2 New fallback order: get_nprocs: /sys/devices/system/cpu/online -> /proc/stat -> sched_getaffinity -> 2 get_nprocs_conf: /sys/devices/system/cpu/ -> /proc/stat -> sched_getaffinity -> 2 Fixes: 342298278e ("linux: Revert the use of sched_getaffinity on get_nproc") Closes: BZ #28865 Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Fixed in 2.36.
The release/2.34/master branch has been updated by Dmitry Levin <ldv@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=007e054d786be340699c634e3a3b30ab1fde1a7a commit 007e054d786be340699c634e3a3b30ab1fde1a7a Author: Dmitry V. Levin <ldv@altlinux.org> Date: Sat Feb 5 08:00:00 2022 +0000 linux: fix accuracy of get_nprocs and get_nprocs_conf [BZ #28865] get_nprocs() and get_nprocs_conf() use various methods to obtain an accurate number of processors. Re-introduce __get_nprocs_sched() as a source of information, and fix the order in which these methods are used to return the most accurate information. The primary source of information used in both functions remains unchanged. This also changes __get_nprocs_sched() error return value from 2 to 0, but all its users are already prepared to handle that. Old fallback order: get_nprocs: /sys/devices/system/cpu/online -> /proc/stat -> 2 get_nprocs_conf: /sys/devices/system/cpu/ -> /proc/stat -> 2 New fallback order: get_nprocs: /sys/devices/system/cpu/online -> /proc/stat -> sched_getaffinity -> 2 get_nprocs_conf: /sys/devices/system/cpu/ -> /proc/stat -> sched_getaffinity -> 2 Fixes: 342298278e ("linux: Revert the use of sched_getaffinity on get_nproc") Closes: BZ #28865 Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> (cherry picked from commit e1d32b836410767270a3adf1f82b1a47e6e4cd51)
The release/2.35/master branch has been updated by Dmitry Levin <ldv@sourceware.org>: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=491f2ef1f0ff849490f374917957018d07ee0586 commit 491f2ef1f0ff849490f374917957018d07ee0586 Author: Dmitry V. Levin <ldv@altlinux.org> Date: Sat Feb 5 08:00:00 2022 +0000 linux: fix accuracy of get_nprocs and get_nprocs_conf [BZ #28865] get_nprocs() and get_nprocs_conf() use various methods to obtain an accurate number of processors. Re-introduce __get_nprocs_sched() as a source of information, and fix the order in which these methods are used to return the most accurate information. The primary source of information used in both functions remains unchanged. This also changes __get_nprocs_sched() error return value from 2 to 0, but all its users are already prepared to handle that. Old fallback order: get_nprocs: /sys/devices/system/cpu/online -> /proc/stat -> 2 get_nprocs_conf: /sys/devices/system/cpu/ -> /proc/stat -> 2 New fallback order: get_nprocs: /sys/devices/system/cpu/online -> /proc/stat -> sched_getaffinity -> 2 get_nprocs_conf: /sys/devices/system/cpu/ -> /proc/stat -> sched_getaffinity -> 2 Fixes: 342298278e ("linux: Revert the use of sched_getaffinity on get_nproc") Closes: BZ #28865 Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> (cherry picked from commit e1d32b836410767270a3adf1f82b1a47e6e4cd51)