On 22 October 2014 03:39, pi-cheng.chen <pi-cheng.c...@linaro.org> wrote: > 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
The period unit seems to be 10ms which is quite long, please use a more fine grained value; at least ms or even us > > 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 What about a defined but unaligned period ? it doesn't seems to be possible > --- > 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 the [10:50]ms range for the random period is quite arbitrary, we should be able to specify a range for the random value > + if aligned == False: # add a period offset randomly from 1 of > [300, 500, 700] > + period_ns += (3000, 5000, 7000)[random.randrange(0, 3)] yous should not specify a restricted list of random offset > + > + 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) you should use a different timer id for each task instead of sharing the tick timer between tasks > + f.write("\t\t},\n") > + > + f.write("\t},\n") > + f.write("}\n") As discussed, I still think that it's not straight forward to understand what the script is doing or to reuse it for another use case. But I haven't found a better way so far. IMO, the use of a model that is then modifed according parameters is a bit easier to use or reuse but i also agree that it's more complex to parse and modify a model than creating a json file from scratch Regards, Vincent > + return > + > + > +if __name__ == '__main__': > + parse_options() > + generate_workload() > -- > 1.9.1 > _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev