From dc6e65517690aade2f1799e816e82b78d902fca3 Mon Sep 17 00:00:00 2001 From: Clark Williams Date: Thu, 13 Dec 2012 09:39:31 -0600 Subject: add module-specific command line options Add command line options: --cyclictest-priority --cyclictest-distance --cyclictest-interval --cyclictest-buckets --hackbench-jobspercore --kcompile-jobspercore These options allow setting module specific behavior for a run. Updated the rteval.8 man page to reflect this and the rteval.conf file as well. Signed-off-by: Clark Williams --- doc/rteval.8 | 45 ++++++++++++++++++++++++++++++++++++++++++--- rteval/cyclictest.py | 20 ++++++++------------ rteval/rteval.conf | 8 +++++--- rteval/rteval.py | 43 +++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 96 insertions(+), 20 deletions(-) diff --git a/doc/rteval.8 b/doc/rteval.8 index 7eb46ec..ba91751 100644 --- a/doc/rteval.8 +++ b/doc/rteval.8 @@ -63,12 +63,12 @@ for example to execute a ten minute run of rteval: .B \-v, \-\-verbose Increase the verbosity of output during the test run .TP -.B \-w, \-\-workdir=WORKDIR +.B \-w WORKDIR, \-\-workdir=WORKDIR Tell rteval to change directory to WORKDIR before creating any subdirectories for report files. The default WORKDIR is the directory in which rteval was started. .TP -.B \-l, \-\-loaddir=LOADDIR +.B \-l LOADDIR, \-\-loaddir=LOADDIR Tell rteval where to find the source for the loads .TP .B \-s, \-\-sysreport @@ -78,12 +78,51 @@ information on the running system. .B \-D, \-\-debug Turn on debugging prints during run .TP -.B \-X, \-\-xmprpc-submit=HOST +.B \-X HOST, \-\-xmprpc-submit=HOST Have rteval send report data to HOST following the run, using XML-RPC .TP +.B \-P, \-\-xmlrpc-no-abort +Do not abort if XML-RPC server do not respond to ping request +.TP .B \-Z, \-\-summarize Have rteval summarize an existing report. This will not cause loads or meausurement utilities to be run. +.TP +.B \-H, \-\-raw-histogram +Generate raw histogram data for an already existing XML report +.TP +.B \-f INIFILE, \-\-inifile=INIFILE +Initialization file for configuring loads and behavior +.TP +.B \-a COMMENT, \-\-annotate=COMMENT +Add a little annotation which is stored in the report +.TP +.B \-L, \-\-logging +Log the output of the loads in the report directory +.TP +.B \-O, \-\-onlyload +Only run the loads (don't run measurement threads) + +.SH MODULE OPTIONS +These are options that affect the execution behavior of the measurement and load modules. +.TP +.B \-\-cyclictest-priority=PRIORITY +SCHED_FIFO priority for measurement threads (default: 95) +.TP +.B \-\-cyclictest-interval=INTERVAL +Measurement thread interval in microseconds (default: 100) +.TP +.B \-\-cyclictest-distance=DISTANCE +Interval increment in microseconds (default: 0) +.TP +.B \-\-cyclictest-buckets=NBUCKETS +Number of 1 microsecond histogram buckets (default: 2000) +.TP +.B \-\-hackbench-jobspercore=N +Number of jobs per online-core for hackbench load +.TP +.B \-\-kcompile-jobspercore=N +Number of jobs per online-core for kernel compile load .\" .SH SEE ALSO .\" .BR bar (1), .\" .BR baz (1). diff --git a/rteval/cyclictest.py b/rteval/cyclictest.py index abf8a95..977756d 100644 --- a/rteval/cyclictest.py +++ b/rteval/cyclictest.py @@ -163,8 +163,10 @@ class Cyclictest(Thread): self.stopevent = Event() self.finished = Event() self.threads = params.setdefault('threads', None) - self.priority = params.setdefault('priority', 95) - self.interval = "-i100" + self.priority = int(params.setdefault('priority', 95)) + self.interval = int(params.setdefault('interval', 100)) + self.distance = int(params.setdefault('distance', 0)) + self.buckets = int(params.setdefault('buckets', 2000)) self.debugging = params.setdefault('debugging', False) self.reportfile = 'cyclictest.rpt' self.params = params @@ -201,19 +203,13 @@ class Cyclictest(Thread): return '--smp' def run(self): - if self.params.has_key('buckets'): - buckets = int(self.params.buckets) - else: - buckets = 2000 - if self.params.has_key('interval'): - self.interval = '-i%d' % int(self.params.interval) self.cmd = ['cyclictest', - self.interval, '-qm', - '-d0', - '-h %d' % buckets, - "-p%d" % int(self.priority), + '-i %d' % self.interval, + '-d %d' % self.distance, + '-h %d' % self.buckets, + "-p %d" % self.priority, self.getmode(), ] diff --git a/rteval/rteval.conf b/rteval/rteval.conf index ddada8f..0d1afb3 100644 --- a/rteval/rteval.conf +++ b/rteval/rteval.conf @@ -7,15 +7,17 @@ report_interval: 600 [cyclictest] buckets: 2000 -interval: 100 +interval: 100 +distance: 0 +priority: 95 [loads] kcompile: module hackbench: module dbench: external - + [kcompile] -source: linux-2.6.21.1.tar.bz2 +source: linux-2.6.39.tar.bz2 jobspercore: 2 [hackbench] diff --git a/rteval/rteval.py b/rteval/rteval.py index 5843d78..a8954a0 100644 --- a/rteval/rteval.py +++ b/rteval/rteval.py @@ -124,7 +124,7 @@ class RtEval(object): 'hackbench' : 'module', }, 'kcompile' : { - 'source' : 'linux-2.6.21.tar.bz2', + 'source' : 'linux-2.6.39.tar.bz2', 'jobspercore': '2', }, 'hackbench' : { @@ -150,6 +150,24 @@ class RtEval(object): # (cmd line overrides config file values) self.config.AppendConfig('rteval', self.cmd_options) + if self.cmd_options.cyclictest_interval != None: + self.config.AppendConfig('cyclictest', { "interval":self.cmd_options.cyclictest_interval }) + + if self.cmd_options.cyclictest_distance != None: + self.config.AppendConfig('cyclictest', { "distance":self.cmd_options.cyclictest_distance }) + + if self.cmd_options.cyclictest_buckets != None: + self.config.AppendConfig('cyclictest', { "buckets":self.cmd_options.cyclictest_distance }) + + if self.cmd_options.cyclictest_priority != None: + self.config.AppendConfig('cyclictest', { "priority":self.cmd_options.cyclictest_priority }) + + if self.cmd_options.hackbench_jobspercore != None: + self.config.AppendConfig('hackbench', { "jobspercore":self.cmd_options.hackbench_jobspercore }) + + if self.cmd_options.kcompile_jobspercore != None: + self.config.AppendConfig('kcompile', { "jobspercore":self.cmd_options.kcompile_jobspercore }) + self.debug("workdir: %s" % self.workdir) # prepare a mailer, if that's configured @@ -386,11 +404,32 @@ class RtEval(object): parser.add_option("-L", "--logging", dest="logging", action='store_true', default=False, help='log the output of the loads in the report directory') - parser.add_option("-O", "--onlyload", dest="onlyload", action='store_true', default=False, help="only run the loads (don't run measurement threads)") + # module options + parser.add_option("", "--cyclictest-interval", dest="cyclictest_interval", + action="store", type="int", + help="cyclictest measurement interval in microseconds") + parser.add_option("", "--cyclictest-distance", dest="cyclictest_distance", + action="store", type="int", + help="cyclictest measurement interval increment in microseconds") + parser.add_option("", "--cyclictest-buckets", dest="cyclictest_buckets", + action="store", type="int", + help="number of cyclictest 1 microsecond histogram buckets") + parser.add_option("", "--cyclictest-priority", dest="cyclictest_priority", + action="store", type="int", + help="SCHED_FIFO priority of measurement threads") + + parser.add_option("", "--hackbench-jobspercore", dest="hackbench_jobspercore", + action="store", type="int", + help="number of hackbench jobs per-core") + parser.add_option("", "--kcompile-jobspercore", dest="kcompile_jobspercore", + action="store", type="int", + help="number of kernel compile jobs per-core") + + (self.cmd_options, self.cmd_arguments) = parser.parse_args(args = cmdargs) if self.cmd_options.duration: mult = 1.0 -- cgit