1*760c253cSXin Li# -*- coding: utf-8 -*- 2*760c253cSXin Li# Copyright 2013 The ChromiumOS Authors 3*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be 4*760c253cSXin Li# found in the LICENSE file. 5*760c253cSXin Li 6*760c253cSXin Li"""Setting files for global, benchmark and labels.""" 7*760c253cSXin Li 8*760c253cSXin Li 9*760c253cSXin Lifrom field import BooleanField 10*760c253cSXin Lifrom field import EnumField 11*760c253cSXin Lifrom field import FloatField 12*760c253cSXin Lifrom field import IntegerField 13*760c253cSXin Lifrom field import ListField 14*760c253cSXin Lifrom field import TextField 15*760c253cSXin Lifrom settings import Settings 16*760c253cSXin Li 17*760c253cSXin Li 18*760c253cSXin Liclass BenchmarkSettings(Settings): 19*760c253cSXin Li """Settings used to configure individual benchmarks.""" 20*760c253cSXin Li 21*760c253cSXin Li def __init__(self, name): 22*760c253cSXin Li super(BenchmarkSettings, self).__init__(name, "benchmark") 23*760c253cSXin Li self.AddField( 24*760c253cSXin Li TextField( 25*760c253cSXin Li "test_name", 26*760c253cSXin Li description="The name of the test to run. " 27*760c253cSXin Li "Defaults to the name of the benchmark.", 28*760c253cSXin Li ) 29*760c253cSXin Li ) 30*760c253cSXin Li self.AddField( 31*760c253cSXin Li TextField( 32*760c253cSXin Li "test_args", 33*760c253cSXin Li description="Arguments to be passed to the " "test.", 34*760c253cSXin Li ) 35*760c253cSXin Li ) 36*760c253cSXin Li self.AddField( 37*760c253cSXin Li IntegerField( 38*760c253cSXin Li "iterations", 39*760c253cSXin Li required=False, 40*760c253cSXin Li default=0, 41*760c253cSXin Li description="Number of iterations to run the test. " 42*760c253cSXin Li "If not set, will run each benchmark test the optimum number of " 43*760c253cSXin Li "times to get a stable result.", 44*760c253cSXin Li ) 45*760c253cSXin Li ) 46*760c253cSXin Li self.AddField( 47*760c253cSXin Li TextField( 48*760c253cSXin Li "suite", 49*760c253cSXin Li default="test_that", 50*760c253cSXin Li description="The type of the benchmark.", 51*760c253cSXin Li ) 52*760c253cSXin Li ) 53*760c253cSXin Li self.AddField( 54*760c253cSXin Li IntegerField( 55*760c253cSXin Li "retries", 56*760c253cSXin Li default=0, 57*760c253cSXin Li description="Number of times to retry a " "benchmark run.", 58*760c253cSXin Li ) 59*760c253cSXin Li ) 60*760c253cSXin Li self.AddField( 61*760c253cSXin Li BooleanField( 62*760c253cSXin Li "run_local", 63*760c253cSXin Li description="Run benchmark harness on the DUT. " 64*760c253cSXin Li "Currently only compatible with the suite: " 65*760c253cSXin Li "telemetry_Crosperf.", 66*760c253cSXin Li required=False, 67*760c253cSXin Li default=True, 68*760c253cSXin Li ) 69*760c253cSXin Li ) 70*760c253cSXin Li self.AddField( 71*760c253cSXin Li FloatField( 72*760c253cSXin Li "weight", 73*760c253cSXin Li default=0.0, 74*760c253cSXin Li description="Weight of the benchmark for CWP approximation", 75*760c253cSXin Li ) 76*760c253cSXin Li ) 77*760c253cSXin Li 78*760c253cSXin Li 79*760c253cSXin Liclass LabelSettings(Settings): 80*760c253cSXin Li """Settings for each label.""" 81*760c253cSXin Li 82*760c253cSXin Li def __init__(self, name): 83*760c253cSXin Li super(LabelSettings, self).__init__(name, "label") 84*760c253cSXin Li self.AddField( 85*760c253cSXin Li TextField( 86*760c253cSXin Li "chromeos_image", 87*760c253cSXin Li required=False, 88*760c253cSXin Li description="The path to the image to run tests " 89*760c253cSXin Li "on, for local/custom-built images. See the " 90*760c253cSXin Li "'build' option for official or trybot images.", 91*760c253cSXin Li ) 92*760c253cSXin Li ) 93*760c253cSXin Li self.AddField( 94*760c253cSXin Li TextField( 95*760c253cSXin Li "autotest_path", 96*760c253cSXin Li required=False, 97*760c253cSXin Li description="Autotest directory path relative to chroot which " 98*760c253cSXin Li "has autotest files for the image to run tests requiring autotest " 99*760c253cSXin Li "files.", 100*760c253cSXin Li ) 101*760c253cSXin Li ) 102*760c253cSXin Li self.AddField( 103*760c253cSXin Li TextField( 104*760c253cSXin Li "debug_path", 105*760c253cSXin Li required=False, 106*760c253cSXin Li description="Debug info directory relative to chroot which has " 107*760c253cSXin Li "symbols and vmlinux that can be used by perf tool.", 108*760c253cSXin Li ) 109*760c253cSXin Li ) 110*760c253cSXin Li self.AddField( 111*760c253cSXin Li TextField( 112*760c253cSXin Li "chromeos_root", 113*760c253cSXin Li description="The path to a chromeos checkout which " 114*760c253cSXin Li "contains a src/scripts directory. Defaults to " 115*760c253cSXin Li "the chromeos checkout which contains the " 116*760c253cSXin Li "chromeos_image.", 117*760c253cSXin Li ) 118*760c253cSXin Li ) 119*760c253cSXin Li self.AddField( 120*760c253cSXin Li ListField( 121*760c253cSXin Li "remote", 122*760c253cSXin Li description="A comma-separated list of IPs of chromeos" 123*760c253cSXin Li "devices to run experiments on.", 124*760c253cSXin Li ) 125*760c253cSXin Li ) 126*760c253cSXin Li self.AddField( 127*760c253cSXin Li TextField( 128*760c253cSXin Li "image_args", 129*760c253cSXin Li required=False, 130*760c253cSXin Li default="", 131*760c253cSXin Li description="Extra arguments to pass to " "image_chromeos.py.", 132*760c253cSXin Li ) 133*760c253cSXin Li ) 134*760c253cSXin Li self.AddField( 135*760c253cSXin Li TextField( 136*760c253cSXin Li "cache_dir", 137*760c253cSXin Li default="", 138*760c253cSXin Li description="The cache dir for this image.", 139*760c253cSXin Li ) 140*760c253cSXin Li ) 141*760c253cSXin Li self.AddField( 142*760c253cSXin Li TextField( 143*760c253cSXin Li "compiler", 144*760c253cSXin Li default="gcc", 145*760c253cSXin Li description="The compiler used to build the " 146*760c253cSXin Li "ChromeOS image (gcc or llvm).", 147*760c253cSXin Li ) 148*760c253cSXin Li ) 149*760c253cSXin Li self.AddField( 150*760c253cSXin Li TextField( 151*760c253cSXin Li "chrome_src", 152*760c253cSXin Li description="The path to the source of chrome. " 153*760c253cSXin Li "This is used to run telemetry benchmarks. " 154*760c253cSXin Li "The default one is the src inside chroot.", 155*760c253cSXin Li required=False, 156*760c253cSXin Li default="", 157*760c253cSXin Li ) 158*760c253cSXin Li ) 159*760c253cSXin Li self.AddField( 160*760c253cSXin Li TextField( 161*760c253cSXin Li "build", 162*760c253cSXin Li description="The xbuddy specification for an " 163*760c253cSXin Li "official or trybot image to use for tests. " 164*760c253cSXin Li "'/remote' is assumed, and the board is given " 165*760c253cSXin Li "elsewhere, so omit the '/remote/<board>/' xbuddy " 166*760c253cSXin Li "prefix.", 167*760c253cSXin Li required=False, 168*760c253cSXin Li default="", 169*760c253cSXin Li ) 170*760c253cSXin Li ) 171*760c253cSXin Li 172*760c253cSXin Li 173*760c253cSXin Liclass GlobalSettings(Settings): 174*760c253cSXin Li """Settings that apply per-experiment.""" 175*760c253cSXin Li 176*760c253cSXin Li def __init__(self, name): 177*760c253cSXin Li super(GlobalSettings, self).__init__(name, "global") 178*760c253cSXin Li self.AddField( 179*760c253cSXin Li TextField( 180*760c253cSXin Li "name", 181*760c253cSXin Li description="The name of the experiment. Just an " 182*760c253cSXin Li "identifier.", 183*760c253cSXin Li ) 184*760c253cSXin Li ) 185*760c253cSXin Li self.AddField( 186*760c253cSXin Li TextField( 187*760c253cSXin Li "board", 188*760c253cSXin Li description="The target board for running " 189*760c253cSXin Li "experiments on, e.g. x86-alex.", 190*760c253cSXin Li ) 191*760c253cSXin Li ) 192*760c253cSXin Li self.AddField( 193*760c253cSXin Li BooleanField( 194*760c253cSXin Li "crosfleet", 195*760c253cSXin Li description="Whether to run experiments via crosfleet.", 196*760c253cSXin Li default=False, 197*760c253cSXin Li ) 198*760c253cSXin Li ) 199*760c253cSXin Li self.AddField( 200*760c253cSXin Li ListField( 201*760c253cSXin Li "remote", 202*760c253cSXin Li description="A comma-separated list of IPs of " 203*760c253cSXin Li "chromeos devices to run experiments on.", 204*760c253cSXin Li ) 205*760c253cSXin Li ) 206*760c253cSXin Li self.AddField( 207*760c253cSXin Li BooleanField( 208*760c253cSXin Li "rerun_if_failed", 209*760c253cSXin Li description="Whether to re-run failed test runs or not.", 210*760c253cSXin Li default=False, 211*760c253cSXin Li ) 212*760c253cSXin Li ) 213*760c253cSXin Li self.AddField( 214*760c253cSXin Li BooleanField( 215*760c253cSXin Li "rm_chroot_tmp", 216*760c253cSXin Li default=False, 217*760c253cSXin Li description="Whether to remove the test_that " 218*760c253cSXin Li "result in the chroot.", 219*760c253cSXin Li ) 220*760c253cSXin Li ) 221*760c253cSXin Li self.AddField( 222*760c253cSXin Li ListField( 223*760c253cSXin Li "email", 224*760c253cSXin Li description="Space-separated list of email " 225*760c253cSXin Li "addresses to send email to.", 226*760c253cSXin Li ) 227*760c253cSXin Li ) 228*760c253cSXin Li self.AddField( 229*760c253cSXin Li BooleanField( 230*760c253cSXin Li "rerun", 231*760c253cSXin Li description="Whether to ignore the cache and " 232*760c253cSXin Li "for tests to be re-run.", 233*760c253cSXin Li default=False, 234*760c253cSXin Li ) 235*760c253cSXin Li ) 236*760c253cSXin Li self.AddField( 237*760c253cSXin Li BooleanField( 238*760c253cSXin Li "ignore_cache", 239*760c253cSXin Li description='Alias of "rerun" to ignore cache.', 240*760c253cSXin Li default=False, 241*760c253cSXin Li ) 242*760c253cSXin Li ) 243*760c253cSXin Li self.AddField( 244*760c253cSXin Li BooleanField( 245*760c253cSXin Li "same_specs", 246*760c253cSXin Li default=True, 247*760c253cSXin Li description="Ensure cached runs are run on the " 248*760c253cSXin Li "same kind of devices which are specified as a " 249*760c253cSXin Li "remote.", 250*760c253cSXin Li ) 251*760c253cSXin Li ) 252*760c253cSXin Li self.AddField( 253*760c253cSXin Li BooleanField( 254*760c253cSXin Li "same_machine", 255*760c253cSXin Li default=False, 256*760c253cSXin Li description="Ensure cached runs are run on the same remote.", 257*760c253cSXin Li ) 258*760c253cSXin Li ) 259*760c253cSXin Li self.AddField( 260*760c253cSXin Li BooleanField( 261*760c253cSXin Li "use_file_locks", 262*760c253cSXin Li default=False, 263*760c253cSXin Li description="DEPRECATED: Whether to use the file locks " 264*760c253cSXin Li "or AFE server lock mechanism.", 265*760c253cSXin Li ) 266*760c253cSXin Li ) 267*760c253cSXin Li self.AddField( 268*760c253cSXin Li IntegerField( 269*760c253cSXin Li "iterations", 270*760c253cSXin Li required=False, 271*760c253cSXin Li default=0, 272*760c253cSXin Li description="Number of iterations to run all tests. " 273*760c253cSXin Li "If not set, will run each benchmark test the optimum number of " 274*760c253cSXin Li "times to get a stable result.", 275*760c253cSXin Li ) 276*760c253cSXin Li ) 277*760c253cSXin Li self.AddField( 278*760c253cSXin Li TextField( 279*760c253cSXin Li "chromeos_root", 280*760c253cSXin Li description="The path to a chromeos checkout which " 281*760c253cSXin Li "contains a src/scripts directory. Defaults to " 282*760c253cSXin Li "the chromeos checkout which contains the " 283*760c253cSXin Li "chromeos_image.", 284*760c253cSXin Li ) 285*760c253cSXin Li ) 286*760c253cSXin Li self.AddField( 287*760c253cSXin Li TextField( 288*760c253cSXin Li "logging_level", 289*760c253cSXin Li default="average", 290*760c253cSXin Li description="The level of logging desired. " 291*760c253cSXin Li "Options are 'quiet', 'average', and 'verbose'.", 292*760c253cSXin Li ) 293*760c253cSXin Li ) 294*760c253cSXin Li self.AddField( 295*760c253cSXin Li IntegerField( 296*760c253cSXin Li "acquire_timeout", 297*760c253cSXin Li default=0, 298*760c253cSXin Li description="Number of seconds to wait for " 299*760c253cSXin Li "machine before exit if all the machines in " 300*760c253cSXin Li "the experiment file are busy. Default is 0.", 301*760c253cSXin Li ) 302*760c253cSXin Li ) 303*760c253cSXin Li self.AddField( 304*760c253cSXin Li TextField( 305*760c253cSXin Li "perf_args", 306*760c253cSXin Li default="", 307*760c253cSXin Li description="The optional profile command. It " 308*760c253cSXin Li "enables perf commands to record perforamance " 309*760c253cSXin Li "related counters. It must start with perf " 310*760c253cSXin Li "command record or stat followed by arguments.", 311*760c253cSXin Li ) 312*760c253cSXin Li ) 313*760c253cSXin Li self.AddField( 314*760c253cSXin Li BooleanField( 315*760c253cSXin Li "download_debug", 316*760c253cSXin Li default=True, 317*760c253cSXin Li description="Download compressed debug symbols alongwith " 318*760c253cSXin Li "image. This can provide more info matching symbols for" 319*760c253cSXin Li "profiles, but takes larger space. By default, download" 320*760c253cSXin Li "it only when perf_args is specified.", 321*760c253cSXin Li ) 322*760c253cSXin Li ) 323*760c253cSXin Li self.AddField( 324*760c253cSXin Li TextField( 325*760c253cSXin Li "cache_dir", 326*760c253cSXin Li default="", 327*760c253cSXin Li description="The abs path of cache dir. " 328*760c253cSXin Li "Default is /home/$(whoami)/cros_scratch.", 329*760c253cSXin Li ) 330*760c253cSXin Li ) 331*760c253cSXin Li self.AddField( 332*760c253cSXin Li BooleanField( 333*760c253cSXin Li "cache_only", 334*760c253cSXin Li default=False, 335*760c253cSXin Li description="Whether to use only cached " 336*760c253cSXin Li "results (do not rerun failed tests).", 337*760c253cSXin Li ) 338*760c253cSXin Li ) 339*760c253cSXin Li self.AddField( 340*760c253cSXin Li BooleanField( 341*760c253cSXin Li "no_email", 342*760c253cSXin Li default=False, 343*760c253cSXin Li description="Whether to disable the email to " 344*760c253cSXin Li "user after crosperf finishes.", 345*760c253cSXin Li ) 346*760c253cSXin Li ) 347*760c253cSXin Li self.AddField( 348*760c253cSXin Li BooleanField( 349*760c253cSXin Li "json_report", 350*760c253cSXin Li default=False, 351*760c253cSXin Li description="Whether to generate a json version " 352*760c253cSXin Li "of the report, for archiving.", 353*760c253cSXin Li ) 354*760c253cSXin Li ) 355*760c253cSXin Li self.AddField( 356*760c253cSXin Li BooleanField( 357*760c253cSXin Li "show_all_results", 358*760c253cSXin Li default=False, 359*760c253cSXin Li description="When running Telemetry tests, " 360*760c253cSXin Li "whether to all the results, instead of just " 361*760c253cSXin Li "the default (summary) results.", 362*760c253cSXin Li ) 363*760c253cSXin Li ) 364*760c253cSXin Li self.AddField( 365*760c253cSXin Li TextField( 366*760c253cSXin Li "share_cache", 367*760c253cSXin Li default="", 368*760c253cSXin Li description="Path to alternate cache whose data " 369*760c253cSXin Li "you want to use. It accepts multiple directories " 370*760c253cSXin Li 'separated by a ",".', 371*760c253cSXin Li ) 372*760c253cSXin Li ) 373*760c253cSXin Li self.AddField( 374*760c253cSXin Li TextField("results_dir", default="", description="The results dir.") 375*760c253cSXin Li ) 376*760c253cSXin Li self.AddField( 377*760c253cSXin Li BooleanField( 378*760c253cSXin Li "compress_results", 379*760c253cSXin Li default=True, 380*760c253cSXin Li description="Whether to compress all test results other than " 381*760c253cSXin Li "reports into a tarball to save disk space.", 382*760c253cSXin Li ) 383*760c253cSXin Li ) 384*760c253cSXin Li self.AddField( 385*760c253cSXin Li TextField( 386*760c253cSXin Li "locks_dir", 387*760c253cSXin Li default="", 388*760c253cSXin Li description="An alternate directory to use for " 389*760c253cSXin Li "storing/checking machine file locks for local machines. " 390*760c253cSXin Li "By default the file locks directory is " 391*760c253cSXin Li "/google/data/rw/users/mo/mobiletc-prebuild/locks.\n" 392*760c253cSXin Li "WARNING: If you use your own locks directory, " 393*760c253cSXin Li "there is no guarantee that someone else might not " 394*760c253cSXin Li "hold a lock on the same machine in a different " 395*760c253cSXin Li "locks directory.", 396*760c253cSXin Li ) 397*760c253cSXin Li ) 398*760c253cSXin Li self.AddField( 399*760c253cSXin Li TextField( 400*760c253cSXin Li "chrome_src", 401*760c253cSXin Li description="The path to the source of chrome. " 402*760c253cSXin Li "This is used to run telemetry benchmarks. " 403*760c253cSXin Li "The default one is the src inside chroot.", 404*760c253cSXin Li required=False, 405*760c253cSXin Li default="", 406*760c253cSXin Li ) 407*760c253cSXin Li ) 408*760c253cSXin Li self.AddField( 409*760c253cSXin Li IntegerField( 410*760c253cSXin Li "retries", 411*760c253cSXin Li default=0, 412*760c253cSXin Li description="Number of times to retry a " "benchmark run.", 413*760c253cSXin Li ) 414*760c253cSXin Li ) 415*760c253cSXin Li self.AddField( 416*760c253cSXin Li TextField( 417*760c253cSXin Li "cwp_dso", 418*760c253cSXin Li description="The DSO type that we want to use for " 419*760c253cSXin Li "CWP approximation. This is used to run telemetry " 420*760c253cSXin Li "benchmarks. Valid DSO types can be found from dso_list " 421*760c253cSXin Li "in experiment_factory.py. The default value is set to " 422*760c253cSXin Li "be empty.", 423*760c253cSXin Li required=False, 424*760c253cSXin Li default="", 425*760c253cSXin Li ) 426*760c253cSXin Li ) 427*760c253cSXin Li self.AddField( 428*760c253cSXin Li BooleanField( 429*760c253cSXin Li "enable_aslr", 430*760c253cSXin Li description="Enable ASLR on the machine to run the " 431*760c253cSXin Li "benchmarks. ASLR is disabled by default", 432*760c253cSXin Li required=False, 433*760c253cSXin Li default=False, 434*760c253cSXin Li ) 435*760c253cSXin Li ) 436*760c253cSXin Li self.AddField( 437*760c253cSXin Li BooleanField( 438*760c253cSXin Li "ignore_min_max", 439*760c253cSXin Li description="When doing math for the raw results, " 440*760c253cSXin Li "ignore min and max values to reduce noise.", 441*760c253cSXin Li required=False, 442*760c253cSXin Li default=False, 443*760c253cSXin Li ) 444*760c253cSXin Li ) 445*760c253cSXin Li self.AddField( 446*760c253cSXin Li TextField( 447*760c253cSXin Li "intel_pstate", 448*760c253cSXin Li description="Intel Pstate mode.\n" 449*760c253cSXin Li 'Supported modes: "active", "passive", "no_hwp".\n' 450*760c253cSXin Li 'Default is "no_hwp" which disables hardware pstates to avoid ' 451*760c253cSXin Li "noise in benchmarks.", 452*760c253cSXin Li required=False, 453*760c253cSXin Li default="no_hwp", 454*760c253cSXin Li ) 455*760c253cSXin Li ) 456*760c253cSXin Li self.AddField( 457*760c253cSXin Li BooleanField( 458*760c253cSXin Li "turbostat", 459*760c253cSXin Li description="Run turbostat process in the background" 460*760c253cSXin Li " of a benchmark. Enabled by default.", 461*760c253cSXin Li required=False, 462*760c253cSXin Li default=True, 463*760c253cSXin Li ) 464*760c253cSXin Li ) 465*760c253cSXin Li self.AddField( 466*760c253cSXin Li FloatField( 467*760c253cSXin Li "top_interval", 468*760c253cSXin Li description="Run top command in the background of a benchmark with" 469*760c253cSXin Li " interval of sampling specified in seconds.\n" 470*760c253cSXin Li "Recommended values 1-5. Lower number provides more accurate" 471*760c253cSXin Li " data.\n" 472*760c253cSXin Li "With 0 - do not run top.\n" 473*760c253cSXin Li "NOTE: Running top with interval 1-5 sec has insignificant" 474*760c253cSXin Li " performance impact (performance degradation does not exceed" 475*760c253cSXin Li " 0.3%%, measured on x86_64, ARM32, and ARM64). " 476*760c253cSXin Li "The default value is 1.", 477*760c253cSXin Li required=False, 478*760c253cSXin Li default=1, 479*760c253cSXin Li ) 480*760c253cSXin Li ) 481*760c253cSXin Li self.AddField( 482*760c253cSXin Li IntegerField( 483*760c253cSXin Li "cooldown_temp", 484*760c253cSXin Li required=False, 485*760c253cSXin Li default=40, 486*760c253cSXin Li description="Wait until CPU temperature goes down below" 487*760c253cSXin Li " specified temperature in Celsius" 488*760c253cSXin Li " prior starting a benchmark. " 489*760c253cSXin Li "By default the value is set to 40 degrees.", 490*760c253cSXin Li ) 491*760c253cSXin Li ) 492*760c253cSXin Li self.AddField( 493*760c253cSXin Li IntegerField( 494*760c253cSXin Li "cooldown_time", 495*760c253cSXin Li required=False, 496*760c253cSXin Li default=10, 497*760c253cSXin Li description="Wait specified time in minutes allowing" 498*760c253cSXin Li " CPU to cool down. Zero value disables cooldown. " 499*760c253cSXin Li "The default value is 10 minutes.", 500*760c253cSXin Li ) 501*760c253cSXin Li ) 502*760c253cSXin Li self.AddField( 503*760c253cSXin Li EnumField( 504*760c253cSXin Li "governor", 505*760c253cSXin Li options=[ 506*760c253cSXin Li "performance", 507*760c253cSXin Li "powersave", 508*760c253cSXin Li "userspace", 509*760c253cSXin Li "ondemand", 510*760c253cSXin Li "conservative", 511*760c253cSXin Li "schedutils", 512*760c253cSXin Li "sched", 513*760c253cSXin Li "interactive", 514*760c253cSXin Li ], 515*760c253cSXin Li default="performance", 516*760c253cSXin Li required=False, 517*760c253cSXin Li description="Setup CPU governor for all cores.\n" 518*760c253cSXin Li "For more details refer to:\n" 519*760c253cSXin Li "https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt. " 520*760c253cSXin Li 'Default is "performance" governor.', 521*760c253cSXin Li ) 522*760c253cSXin Li ) 523*760c253cSXin Li self.AddField( 524*760c253cSXin Li EnumField( 525*760c253cSXin Li "cpu_usage", 526*760c253cSXin Li options=[ 527*760c253cSXin Li "all", 528*760c253cSXin Li "big_only", 529*760c253cSXin Li "little_only", 530*760c253cSXin Li "exclusive_cores", 531*760c253cSXin Li ], 532*760c253cSXin Li default="all", 533*760c253cSXin Li required=False, 534*760c253cSXin Li description="Restrict usage of CPUs to decrease CPU interference.\n" 535*760c253cSXin Li '"all" - no restrictions;\n' 536*760c253cSXin Li '"big-only", "little-only" - enable only big/little cores,' 537*760c253cSXin Li " applicable only on ARM;\n" 538*760c253cSXin Li '"exclusive-cores" - (for future use)' 539*760c253cSXin Li " isolate cores for exclusive use of benchmark processes. " 540*760c253cSXin Li "By default use all CPUs.", 541*760c253cSXin Li ) 542*760c253cSXin Li ) 543*760c253cSXin Li self.AddField( 544*760c253cSXin Li IntegerField( 545*760c253cSXin Li "cpu_freq_pct", 546*760c253cSXin Li required=False, 547*760c253cSXin Li default=95, 548*760c253cSXin Li description="Setup CPU frequency to a supported value less than" 549*760c253cSXin Li " or equal to a percent of max_freq. " 550*760c253cSXin Li "CPU frequency is reduced to 95%% by default to reduce thermal " 551*760c253cSXin Li "throttling.", 552*760c253cSXin Li ) 553*760c253cSXin Li ) 554*760c253cSXin Li self.AddField( 555*760c253cSXin Li BooleanField( 556*760c253cSXin Li "no_lock", 557*760c253cSXin Li default=False, 558*760c253cSXin Li description="Do not attempt to lock the DUT." 559*760c253cSXin Li " Useful when lock is held externally, say with crosfleet.", 560*760c253cSXin Li ) 561*760c253cSXin Li ) 562*760c253cSXin Li self.AddField( 563*760c253cSXin Li BooleanField( 564*760c253cSXin Li "keep_stateful", 565*760c253cSXin Li default=False, 566*760c253cSXin Li description="When flashing a ChromeOS image keep the stateful" 567*760c253cSXin Li " partition, i.e. don't use --clobber-stateful. This option" 568*760c253cSXin Li " is useful to keep ssh keys, wi-fi settings and so on.", 569*760c253cSXin Li ) 570*760c253cSXin Li ) 571*760c253cSXin Li 572*760c253cSXin Li 573*760c253cSXin Liclass SettingsFactory(object): 574*760c253cSXin Li """Factory class for building different types of Settings objects. 575*760c253cSXin Li 576*760c253cSXin Li This factory is currently hardcoded to produce settings for ChromeOS 577*760c253cSXin Li experiment files. The idea is that in the future, other types 578*760c253cSXin Li of settings could be produced. 579*760c253cSXin Li """ 580*760c253cSXin Li 581*760c253cSXin Li def GetSettings(self, name, settings_type): 582*760c253cSXin Li if settings_type == "label" or not settings_type: 583*760c253cSXin Li return LabelSettings(name) 584*760c253cSXin Li if settings_type == "global": 585*760c253cSXin Li return GlobalSettings(name) 586*760c253cSXin Li if settings_type == "benchmark": 587*760c253cSXin Li return BenchmarkSettings(name) 588*760c253cSXin Li 589*760c253cSXin Li raise TypeError("Invalid settings type: '%s'." % settings_type) 590