summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Srbecky <dsrbecky@google.com> 2021-04-16 10:30:33 +0100
committer David Srbecky <dsrbecky@google.com> 2021-04-19 21:11:15 +0000
commitea1a849fda20e5110ab1073355036c1ad56597af (patch)
tree17d5b12e6ecea27bbf168c83b49ad0f0f3bb4a99
parentba0ef1a3e7ee1173b5928ce40b9c2a6b780fffb4 (diff)
Use only half of the cores in testrunner by default on target.
This is what we currently do on buildbots to avoid timeouts. Set the appropriate default here and let the buildbots use the default. This will make it device independent so we don't have to hard-code the value on buildbot (in case device with different core count is used). It will also make it easier to investigate the timeouts in the future, hopefully allowing us fully utilize the devices on the build bots. Allow the user to specify -j0 to explicitly use the default. Bug: 142039427 Test: test.py on target Change-Id: Ic7018c1a3239db25de148543bead62db16d02829
-rwxr-xr-xtest/testrunner/testrunner.py34
1 files changed, 14 insertions, 20 deletions
diff --git a/test/testrunner/testrunner.py b/test/testrunner/testrunner.py
index 23bd37de7e..ffb5112cfd 100755
--- a/test/testrunner/testrunner.py
+++ b/test/testrunner/testrunner.py
@@ -127,7 +127,7 @@ failed_tests = []
skipped_tests = []
# Flags
-n_thread = -1
+n_thread = 0
total_test_count = 0
verbose = False
dry_run = False
@@ -272,11 +272,12 @@ def setup_test_env():
_user_input_variants['address_sizes_target']['target'] = _user_input_variants['address_sizes']
global n_thread
- if n_thread == -1:
+ if n_thread == 0:
if 'target' in _user_input_variants['target']:
- n_thread = get_default_threads('target')
+ # Use only half of the cores since fully loading the device tends to lead to timeouts.
+ n_thread = get_target_cpu_count() // 2
else:
- n_thread = get_default_threads('host')
+ n_thread = get_host_cpu_count()
print_text("Concurrency: " + str(n_thread) + "\n")
global extra_arguments
@@ -1002,22 +1003,15 @@ def parse_test_name(test_name):
return {parsed[12]}
-def get_default_threads(target):
- if target == 'target':
- adb_command = 'adb shell cat /sys/devices/system/cpu/present'
- cpu_info_proc = subprocess.Popen(adb_command.split(), stdout=subprocess.PIPE)
- cpu_info = cpu_info_proc.stdout.read()
- if type(cpu_info) is bytes:
- cpu_info = cpu_info.decode('utf-8')
- cpu_info_regex = r'\d*-(\d*)'
- match = re.match(cpu_info_regex, cpu_info)
- if match:
- return int(match.group(1))
- else:
- raise ValueError('Unable to predict the concurrency for the target. '
- 'Is device connected?')
- else:
- return multiprocessing.cpu_count()
+def get_target_cpu_count():
+ adb_command = 'adb shell getconf _NPROCESSORS_ONLN'
+ cpu_info_proc = subprocess.Popen(adb_command.split(), stdout=subprocess.PIPE)
+ return int(cpu_info_proc.stdout.read())
+
+
+def get_host_cpu_count():
+ return multiprocessing.cpu_count()
+
def parse_option():
global verbose