Some examples to use the script to generate small tasks workloads: 1. to generate a workload with 4 threads, 10% load and 30ms period $ ./small_task_gen -t 4 -l 10 -p 3
2. to generate a workload with 3 threads, 15% load and random tick-aligned period $ ./small_task_gen -t 3 -l 15 -r --aligned
3. to generate a workload with 5 threads, 20% load and random non-tick-aligned period $ ./small_task_gen -t 5 -l 20 -r --unaligned --- doc/examples/small_task_gen | 117 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100755 doc/examples/small_task_gen
diff --git a/doc/examples/small_task_gen b/doc/examples/small_task_gen new file mode 100755 index 0000000..ba74753 --- /dev/null +++ b/doc/examples/small_task_gen @@ -0,0 +1,117 @@ +#!/usr/bin/env python + +import sys +import getopt +import random + +outfile = "small_tasks.json" +tasks = None +loading = None +period = None +randomized = None +aligned = None + + +def usage(): + print "Usage:" + print sys.argv[0] + " -t <number of tasks>" + print "\t\t -l <percentage of task loading> (1 - 100)" + print "\t\t -p <fixed period in ms>" + print "\t\t -r [--aligned | --unaligned] (randomize periods of tasks)" + print "\t\t -o <output JSON file name> (default: small_tasks.json)" + return + + +def parse_options(): + global outfile + global tasks + global loading + global period + global randomized + global aligned + + try: + opts, args = getopt.getopt(sys.argv[1:], "t:l:o:p:rh", + ["aligned", "unaligned"]) + except getopt.GetoptError: + usage() + sys.exit(2) + + for o, a in opts: + if o == "-t": + tasks = int(a) + print "number of tasks: %d" % tasks + if o == "-l": + loading = int(a) + print "task loading: %d" % loading + if o == "-o": + outfile = a; + print "output workload JSON file: " + outfile + if o == "-p": + period = int(a) + print "period of tasks: %d" % period + if o == "-r": + randomized = True + print "randomized: %r" % randomized + if o == "--aligned": + if aligned == False: + usage() + sys.exit(2) + aligned = True + print "aligned: %r" % aligned + if o in "--unaligned": + if aligned == True: + usage() + sys.exit(2) + aligned = False + print "aligned: %r" % aligned + if o == "-h": + usage() + sys.exit(2) + + if not period is None and not randomized is None: + usage() + sys.exit(2) + + if tasks is None or (period is None and randomized is None): + usage() + sys.exit(2) + + return + + +def generate_workload(): + try: + f = open(outfile, "w") + except IOError: + print "WARN: Unable to open " + infile + sys.exit(2) + + f.write("{\n") + f.write("\t"tasks" : {\n") + + for i in range(0, tasks): + + if randomized is None: + period_ns = period * 1000 + else: + period_ns = random.randrange(1, 6) * 10000 # random tick-aligned period from 10ms~50ms + if aligned == False: # add a period offset randomly from 1 of [300, 500, 700] + period_ns += (3000, 5000, 7000)[random.randrange(0, 3)] + + run_ns = period_ns * loading / 100 + + f.write("\t\t"thread%d" : {\n" % i) + f.write("\t\t\t"loop" : -1,\n") + f.write("\t\t\t"run" : %d,\n" % run_ns) + f.write("\t\t\t"timer" : { "ref" : "tick", "period" : %d },\n" % period_ns) + f.write("\t\t},\n") + + f.write("\t},\n") + f.write("}\n") + return + + +if __name__ == '__main__': + parse_options() + generate_workload()