[PATCH] D94734: [lit] Use os.cpu_count() to cleanup TODO
Julian Lettner via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 25 11:48:01 PST 2021
This revision was automatically updated to reflect the committed changes.
yln marked an inline comment as done.
Closed by commit rG9946b169c379: [lit] Use os.cpu_count() to cleanup TODO (authored by yln).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D94734/new/
https://reviews.llvm.org/D94734
Files:
llvm/utils/lit/lit/cl_arguments.py
llvm/utils/lit/lit/run.py
llvm/utils/lit/lit/util.py
Index: llvm/utils/lit/lit/util.py
===================================================================
--- llvm/utils/lit/lit/util.py
+++ llvm/utils/lit/lit/util.py
@@ -109,32 +109,23 @@
return s
-# TODO(yln): multiprocessing.cpu_count()
-# TODO(python3): len(os.sched_getaffinity(0)) and os.cpu_count()
-def detectCPUs():
- """Detects the number of CPUs on a system.
-
- Cribbed from pp.
+def usable_core_count():
+ """Return the number of cores the current process can use, if supported.
+ Otherwise, return the total number of cores (like `os.cpu_count()`).
+ Default to 1 if undetermined.
"""
- # Linux, Unix and MacOS:
- if hasattr(os, 'sysconf'):
- if 'SC_NPROCESSORS_ONLN' in os.sysconf_names:
- # Linux & Unix:
- ncpus = os.sysconf('SC_NPROCESSORS_ONLN')
- if isinstance(ncpus, int) and ncpus > 0:
- return ncpus
- else: # OSX:
- return int(subprocess.check_output(['sysctl', '-n', 'hw.ncpu'],
- stderr=subprocess.STDOUT))
- # Windows:
- if 'NUMBER_OF_PROCESSORS' in os.environ:
- ncpus = int(os.environ['NUMBER_OF_PROCESSORS'])
- if ncpus > 0:
- # With more than 32 processes, process creation often fails with
- # "Too many open files". FIXME: Check if there's a better fix.
- return min(ncpus, 32)
- return 1 # Default
+ try:
+ n = len(os.sched_getaffinity(0))
+ except AttributeError:
+ n = os.cpu_count() or 1
+
+ # On Windows, with more than 32 processes, process creation often fails with
+ # "Too many open files". FIXME: Check if there's a better fix.
+ if platform.system() == 'Windows':
+ return min(n, 32)
+
+ return n
def mkdir(path):
Index: llvm/utils/lit/lit/run.py
===================================================================
--- llvm/utils/lit/lit/run.py
+++ llvm/utils/lit/lit/run.py
@@ -110,7 +110,7 @@
# threads counts toward the current process limit. Try to raise the (soft)
# process limit so that tests don't fail due to resource exhaustion.
def _increase_process_limit(self):
- ncpus = lit.util.detectCPUs()
+ ncpus = lit.util.usable_core_count()
desired_limit = self.workers * ncpus * 2 # the 2 is a safety factor
# Importing the resource module will likely fail on Windows.
Index: llvm/utils/lit/lit/cl_arguments.py
===================================================================
--- llvm/utils/lit/lit/cl_arguments.py
+++ llvm/utils/lit/lit/cl_arguments.py
@@ -23,7 +23,7 @@
metavar="N",
help="Number of workers used for testing",
type=_positive_int,
- default=lit.util.detectCPUs())
+ default=lit.util.usable_core_count())
parser.add_argument("--config-prefix",
dest="configPrefix",
metavar="NAME",
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D94734.319076.patch
Type: text/x-patch
Size: 2947 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210125/12b539b7/attachment.bin>
More information about the llvm-commits
mailing list