Index: tools/run_perf.py |
diff --git a/tools/run_perf.py b/tools/run_perf.py |
index db4245f499fc07c3a32f435a78ec08d5f06f58a3..f2c881e7e463eb733d6d919f00263b3f76aa4938 100755 |
--- a/tools/run_perf.py |
+++ b/tools/run_perf.py |
@@ -612,6 +612,19 @@ class Platform(object): |
class DesktopPlatform(Platform): |
def __init__(self, options): |
super(DesktopPlatform, self).__init__(options) |
+ self.command_prefix = [] |
+ if options.prioritize or options.affinitize != None: |
+ self.command_prefix = ["sudo", "schedtool"] |
+ if options.prioritize: |
+ self.command_prefix += ["-p", "-20"] |
Michael Achenbach
2016/04/27 14:55:00
My documentation says:
-p STATIC_PRIORITY u
Mircea Trofin
2016/04/27 15:56:35
Ugh. should be -n, not -p. Thanks.
|
+ if options.affinitize != None: |
+ # schedtool expects a bit pattern when setting affinity, where each |
+ # bit set to '1' corresponds to a core where the process may run on. |
+ # 0 corresponds to CPU 0. Since the 'affinitize' parameter is a core number, we need |
+ # to map to said bit pattern. |
+ core = (1 << int(options.affinitize)) - 1 |
+ self.command_prefix += ["-a", str(core)] |
Michael Achenbach
2016/04/27 14:55:00
So if options.affinitize == 2, this is set to "-a
Mircea Trofin
2016/04/27 15:56:35
Oh, that's a bug, indeed. It should be core = if
Michael Achenbach
2016/04/27 17:23:29
Could you add in a comment an example of how this
Mircea Trofin
2016/04/28 02:07:24
Done.
|
+ self.command_prefix += ["-e"] |
def PreExecution(self): |
pass |
@@ -627,10 +640,11 @@ class DesktopPlatform(Platform): |
suffix = ' - without patch' if no_patch else '' |
shell_dir = self.shell_dir_no_patch if no_patch else self.shell_dir |
title = ">>> %%s (#%d)%s:" % ((count + 1), suffix) |
+ command = self.command_prefix + runnable.GetCommand(shell_dir, self.extra_flags) |
try: |
output = commands.Execute( |
- runnable.GetCommand(shell_dir, self.extra_flags), |
- timeout=runnable.timeout, |
+ command, |
+ timeout=runnable.timeout, |
) |
except OSError as e: # pragma: no cover |
print title % "OSError" |
@@ -822,6 +836,14 @@ def Main(args): |
help="JavaScript engine binary. By default, d8 under " |
"architecture-specific build dir. " |
"Not supported in conjunction with outdir-no-patch.") |
+ parser.add_option("--prioritize", |
+ help="Raise the priority to nice -20 for the benchmarking process." |
+ "Requires Linux, schedtool, and sudo privileges.", |
+ default=False, action="store_true") |
+ parser.add_option("--affinitize", |
+ help="Run benchmarking process on the specified core." |
+ "Requires Linux, schedtool, and sudo privileges.", |
+ default=None) |
(options, args) = parser.parse_args(args) |