From eece6f7885114f6988f9e95428388044f573a5bb Mon Sep 17 00:00:00 2001 From: Douglas Raillard Date: Thu, 7 Apr 2022 14:58:46 +0100 Subject: [PATCH] lisa.target: Speedup Target.disable_idle_states() FEATURE Use devlib async concurrent commands to speedup idle state enabling/disabling. --- lisa/target.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lisa/target.py b/lisa/target.py index 2bec89051..b32c69b4e 100644 --- a/lisa/target.py +++ b/lisa/target.py @@ -41,6 +41,7 @@ import devlib from devlib.exception import TargetStableError from devlib.utils.misc import which from devlib.platform.gem5 import Gem5SimulationPlatform +from devlib.utils.asyn import asyncf, asynccontextmanager from lisa.utils import Loggable, HideExekallID, resolve_dotted_name, get_subclasses, import_all_submodules, LISA_HOME, RESULT_DIR, LATEST_LINK, setup_logging, ArtifactPath, nullcontext, ExekallTaggable, memoized, destroyablecontextmanager, ContextManagerExit, update_params_from from lisa._assets import ASSETS_PATH @@ -1052,16 +1053,21 @@ class Target(Loggable, HideExekallID, ExekallTaggable, Configurable): logger.warning('Could not disable idle states, cpuidle devlib module is not loaded') cm = nullcontext else: - @destroyablecontextmanager - def cm(): + @asynccontextmanager + async def cm(): + cpus = tuple(range(self.plat_info['cpus-count'])) try: - for cpu in range(self.plat_info['cpus-count']): - cpuidle.disable_all(cpu) + await self.async_manager.map_concurrently( + cpuidle.disable_all.asyn, + cpus, + ) yield except ContextManagerExit: logger.info('Re-enabling idle states for all domains') - for cpu in range(self.plat_info['cpus-count']): - cpuidle.enable_all(cpu) + await self.async_manager.map_concurrently( + cpuidle.enable_all.asyn, + cpus, + ) return cm() -- GitLab