From a2f4aa6b71c71a7d766af3f9801a615cf3fa03ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Tue, 28 Jul 2015 10:57:49 +0200 Subject: Set conf.py and nbscript for measurement --- scripts/nbscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/nbscript b/scripts/nbscript index ef99dd8..0f5ec55 100644 --- a/scripts/nbscript +++ b/scripts/nbscript @@ -1,4 +1,4 @@ #!/usr/bin/env novaboot # Novaboot script load ../jobfiles/linuxImage console=ttyS0,115200 -load ../buildroot/output/images/rootfs.cpio.gz +load ../root/cyclictest/images/rootfs.cpio.gz -- cgit v1.2.3 From e4c7d71976be006f1edfaa5ee3ad7619c9a77bba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Tue, 11 Aug 2015 19:19:30 +0200 Subject: Add parse_script Parsing maximal value from first thread as result. --- scripts/boot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/boot.py b/scripts/boot.py index 7ae30a9..2d1461a 100644 --- a/scripts/boot.py +++ b/scripts/boot.py @@ -29,7 +29,8 @@ def boot(config, to_database = True): value = None try: - out = utils.callsubprocess('parse_command', conf.parse_command, + out = utils.callsubprocess('parse_command', conf.parse_command + + [os.path.join(conf.output_folder, config.cfile)], conf.parse_output, True) value = float(out[0]) except Exception as e: -- cgit v1.2.3 From 030dc22bc6c28faac3fadcd4a7df93a2a4147535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Tue, 11 Aug 2015 19:43:30 +0200 Subject: Add measure tool desription to database --- scripts/database.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/database.py b/scripts/database.py index 16556a8..eef118d 100644 --- a/scripts/database.py +++ b/scripts/database.py @@ -102,14 +102,14 @@ class database: def add_measure(self, mfile, conf_id, value = None): "Add measurement." ps = self.db.prepare("""INSERT INTO measure - (conf, mfile, value, mtime, toolgit, linuxgit) + (conf, mfile, value, mtime, toolgit, linuxgit, measurement) VALUES - ($1, $2, $3, $4, $5, $6); + ($1, $2, $3, $4, $5, $6, $7); """) gt = self.check_toolsgit() lgt = self.check_linuxgit() tm = datetime.datetime.now() - ps(conf_id, mfile, value, tm, gt, lgt) + ps(conf_id, mfile, value, tm, gt, lgt, conf.measure_identifier) def update_measure(self, measure_id, value): "Update measured value" -- cgit v1.2.3 From b950d11fd8c8059fc935e80816cbe27d8d0b9b7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 10:46:27 +0200 Subject: Single configuration generation ensured to generate only single configuration per execution --- scripts/configurations.py | 64 ++++++++++++++++++++++++++--------------------- scripts/exceptions.py | 5 ++++ 2 files changed, 41 insertions(+), 28 deletions(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index 5a04f38..8391140 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -161,31 +161,43 @@ def __register_conf__(con, conf_num, generator): dtb.add_configuration(hsh, hshf, generator) def __generate_single__(var_num, conf_num): - if os.path.isfile(sf(conf.single_generated_file)): + measure_list = set() + if not os.path.isfile(sf(conf.single_generated_file)): + with open(sf(conf.measure_file), 'r') as fi: + for ln in fi: + measure_list.add(int(ln)) + else: + with open(sf(conf.single_generated_file), 'r') as f: + for ln in f: + measure_list.add(int(ln)) + if not measure_list: return False - measure_list = [] - with open(sf(conf.measure_file), 'r') as f: - for ln in f: - measure_list.append(int(ln)) - for measure in measure_list: - tfile = __buildtempcnf__(var_num, (sf(conf.rules_file), - sf(conf.fixed_file)), (str(measure))) - try: - confs = __exec_sat__(tfile, ['-i', '0']) - for con in confs: - __register_conf__(con, conf_num, 'single-sat') - except exceptions.NoSolution: - pass - finally: - os.remove(tfile) - with open(sf(conf.single_generated_file), 'w') as f: - f.write("This file informs scripts, that all single selected configurations are already generated.\n") - f.write("Remove this file if you want run generating process again.") - return True + tfile = __buildtempcnf__(var_num, (sf(conf.rules_file), + sf(conf.fixed_file)), [str(measure_list.pop())]) + with open(sf(conf.single_generated_file), 'w') as fo: + for ln in measure_list: + fo.write(str(ln) + '\n') + try: + confs = __exec_sat__(tfile, ['-i', '0']) + print(confs) + for con in confs: + __register_conf__(con, conf_num, 'single-sat') + except exceptions.NoSolution: + __generate_single__(var_num, conf_num) + finally: + os.remove(tfile) + return True def __generate_random__(var_num, conf_num): # TODO - pass + #tfile = __buildtempcnf__(var_num, (sf(conf.rules_file), sf(conf.fixed_file)), ()) + #try: + #confs = __exec_sat__(tfile, []) + #for con in confs: + #__register_conf__(con, conf_num) + #finally: + #os.remove(tfile) + return False def generate(): """Collect boolean equations from files rules and required @@ -204,14 +216,10 @@ def generate(): if __generate_single__(var_num, conf_num): return + elif __generate_random__(var_num, conf_num): + return - #tfile = __buildtempcnf__(var_num, (sf(conf.rules_file), sf(conf.fixed_file)), ()) - #try: - #confs = __exec_sat__(tfile, []) - #for con in confs: - #__register_conf__(con, conf_num) - #finally: - #os.remove(tfile) + raise exceptions.NoNewConfiguration() def compare(file1, file2): """Compared two configuration""" diff --git a/scripts/exceptions.py b/scripts/exceptions.py index 89fba0a..ac7f093 100644 --- a/scripts/exceptions.py +++ b/scripts/exceptions.py @@ -20,6 +20,11 @@ class ConfigurationError(Exception): def __str__(self): return "Configuration error: " + message +class NoNewConfiguration(Exception): + def __init__(self): + pass + def __str__(self): + return "No new configuration generated" class NoApplicableConfiguration(Exception): def __init__(self): pass -- cgit v1.2.3 From c5fdcab3a1a034ef8933268d3237878716d7b2e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 15:43:06 +0200 Subject: Fix bug in configuration.py Type inserted to method is str, but threated as int. --- scripts/configurations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index 8391140..73af8e2 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -76,7 +76,7 @@ def __write_temp_config_file__(con, conf_num): s *= -1 else: nt = False - if s > conf_num: + if s > int(conf_num): break; if 'NONAMEGEN' in utils.smap[s]: # ignore generated names continue -- cgit v1.2.3 From 9df57d275f44d8f7919bd9b307bcf09a30c53683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 15:48:19 +0200 Subject: Fix if generated existing configuration When some generator tries to register already generated solution, it shouldn't be registered. --- scripts/configurations.py | 1 + 1 file changed, 1 insertion(+) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index 73af8e2..35eaa37 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -153,6 +153,7 @@ def __register_conf__(con, conf_num, generator): if os.path.isfile(filen): if compare(filen, wfile): print("I: Generated existing configuration.") + return else: print("W: Generated configuration with collision hash.") # TODO this might have to be tweaked -- cgit v1.2.3 From 64ff2853f2e06fd67dc1f73bb913e53c2db97f51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 16:25:13 +0200 Subject: Remove debud output of generated configuration --- scripts/configurations.py | 1 - 1 file changed, 1 deletion(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index 35eaa37..e43087e 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -180,7 +180,6 @@ def __generate_single__(var_num, conf_num): fo.write(str(ln) + '\n') try: confs = __exec_sat__(tfile, ['-i', '0']) - print(confs) for con in confs: __register_conf__(con, conf_num, 'single-sat') except exceptions.NoSolution: -- cgit v1.2.3 From 303a971fefa1a15cb0cebc65274b118bf62ae889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 16:41:59 +0200 Subject: Fix problem with wrongly printed first line in CNF file --- scripts/configurations.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index e43087e..7a4a071 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -211,8 +211,8 @@ def generate(): # Load variable count with open(sf(conf.variable_count_file)) as f: - var_num = f.readline() - conf_num = f.readline() + var_num = f.readline().rstrip() + conf_num = f.readline().rstrip() if __generate_single__(var_num, conf_num): return -- cgit v1.2.3 From e9f373c67d79bf8ea5e8b710ce4102a29abb42b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 17:28:00 +0200 Subject: Fix bug in configurations loading Loading configuration load all configuration options as True. --- scripts/configurations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index 7a4a071..d6780c9 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -100,7 +100,7 @@ def __load_config_file__(file): if (ln[indx + 1] == 'y'): rtn[ln[7:indx]] = True else: - rtn[ln[7:indx]] = True + rtn[ln[7:indx]] = False return rtn def __calchash__(file): -- cgit v1.2.3 From ed07b06f529d9df1cb9f6e95b5780a064206737e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 17:49:56 +0200 Subject: Change folder to kernel As first will be measured only konfiguration options in kernel folder. --- scripts/from_folder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/from_folder b/scripts/from_folder index b72899f..8801a48 100755 --- a/scripts/from_folder +++ b/scripts/from_folder @@ -1,6 +1,6 @@ #!/bin/bash -FOLDER=linux/arch +FOLDER=linux/kernel CONF=`find $FOLDER -name Kconfig | xargs grep -e ^config | cut -d ' ' -f2` -- cgit v1.2.3 From 62763b42386428ada30d0a127181de524bcc21b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 18:12:59 +0200 Subject: Fix wrong configuration reading from database --- scripts/database.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/database.py b/scripts/database.py index eef118d..6a4d0a1 100644 --- a/scripts/database.py +++ b/scripts/database.py @@ -132,8 +132,8 @@ class database: def get_unmeasured(self): "Returns list of all unmeasured configurations." - ps = self.db.prepare("""SELECT * FROM configurations - WHERE NOT EXISTS + ps = self.db.prepare("""SELECT id, hash, cfile FROM configurations + WHERE id NOT IN (SELECT conf FROM measure) """) rtn = [] -- cgit v1.2.3 From 4089d016bb3f09e3171eeb1cc6606914aff453c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 12 Aug 2015 20:31:28 +0200 Subject: Catch NoApplicableConfiguration exception in prepare thread --- scripts/loop.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/loop.py b/scripts/loop.py index fc0ea44..aecda39 100755 --- a/scripts/loop.py +++ b/scripts/loop.py @@ -68,7 +68,10 @@ class prepareThread(Thread): __listlock__.aquire() while not __terminate__ and len(__conflist__) <= conf.multithread_buffer: __listlock__.release() - config = prepare() + try: + config = prepare() + except exceptions.NoApplicableConfiguration: + return __listlock__.aquire() __conflist__.append(config) if not __measurethread__.isActive(): -- cgit v1.2.3 From 84b4681184165888f26e8988a705764baad18e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Thu, 13 Aug 2015 09:59:33 +0200 Subject: Change hash calculating function Previous method of calculating hash wasn't work (wouldn't give same result for same configuration) if there would be added new configuration options to hashconfigsort file. --- scripts/configurations.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index d6780c9..aaa6937 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -119,11 +119,9 @@ def __calchash__(file): for c in csort: try: if con[c]: - cstr += '+' - else: - cstr += '-' + cstr += c except ValueError: - cstr += '0' + pass # Add missing csortfile = open(sf(conf.hashconfigsort), 'a'); @@ -135,9 +133,7 @@ def __calchash__(file): csort.append(key) csortfile.write(key + '\n') if val: - cstr += '+' - else: - cstr += '-' + cstr += key csortfile.close() hsh = hashlib.md5(bytes(cstr, 'UTF-8')) -- cgit v1.2.3 From 57b76964ed0397cb48458c1a55acaeb19c287d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Thu, 13 Aug 2015 11:04:31 +0200 Subject: Implement random generation of configurations Configuration are generated with random assumptions. This should generate different configuration for every SAT solver execution. --- scripts/configurations.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index aaa6937..0a15d5f 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -149,13 +149,14 @@ def __register_conf__(con, conf_num, generator): if os.path.isfile(filen): if compare(filen, wfile): print("I: Generated existing configuration.") - return + return False else: print("W: Generated configuration with collision hash.") # TODO this might have to be tweaked raise Exception() shutil.move(wfile, filen) dtb.add_configuration(hsh, hshf, generator) + return True def __generate_single__(var_num, conf_num): measure_list = set() @@ -185,15 +186,15 @@ def __generate_single__(var_num, conf_num): return True def __generate_random__(var_num, conf_num): - # TODO - #tfile = __buildtempcnf__(var_num, (sf(conf.rules_file), sf(conf.fixed_file)), ()) - #try: - #confs = __exec_sat__(tfile, []) - #for con in confs: - #__register_conf__(con, conf_num) - #finally: - #os.remove(tfile) - return False + tfile = __buildtempcnf__(var_num, (sf(conf.rules_file), sf(conf.fixed_file)), ()) + try: + confs = __exec_sat__(tfile, ['-i', '3']) + for con in confs: + if not __register_conf__(con, conf_num, 'random-sat'): + __generate_random__(var_num, conf_num) + finally: + os.remove(tfile) + return True def generate(): """Collect boolean equations from files rules and required -- cgit v1.2.3 From fb3c8e339fb3896753f7130b8f8e34be8d89ae2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Thu, 13 Aug 2015 11:19:09 +0200 Subject: Fix thread cooperation in loop Measure function requires img and config as atributes. But only config was provided. --- scripts/loop.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'scripts') diff --git a/scripts/loop.py b/scripts/loop.py index aecda39..9cc8ddb 100755 --- a/scripts/loop.py +++ b/scripts/loop.py @@ -58,7 +58,7 @@ class mainThread(Thread): measure(img, config) # Multithread section # -__conflist__ = [] +__conflist__ = set() __listlock__ = Lock() class prepareThread(Thread): @@ -69,11 +69,11 @@ class prepareThread(Thread): while not __terminate__ and len(__conflist__) <= conf.multithread_buffer: __listlock__.release() try: - config = prepare() + img, config = prepare() except exceptions.NoApplicableConfiguration: return __listlock__.aquire() - __conflist__.append(config) + __conflist__.add((img, config)) if not __measurethread__.isActive(): __measurethread__.start() __listlock__.release() @@ -84,12 +84,11 @@ class measureThread(Thread): def run(self): __listlock__.aquire() while not __terminate__ and len(__conflist__) > 0: - config = __conflist__[0] - del __conflist__[0] + img, config = __conflist__.pop() __listlock__.release() if not __preparethread__.isActive(): __preparethread__.start() - measure(config) + measure(img, config) __listlock__.aquire() __listlock__.release() -- cgit v1.2.3 From 72316e351df5159384d70faa708224ff2fcc8dd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Thu, 13 Aug 2015 15:48:40 +0200 Subject: Fix configuration generation missing file exception If generating single throw NoSolution exception, randomly generated CNF file is removed. But finally statement tries to remove it once again. Solution is to not remove CNF file in exception handling, but only by finally statement. --- scripts/configurations.py | 1 - 1 file changed, 1 deletion(-) (limited to 'scripts') diff --git a/scripts/configurations.py b/scripts/configurations.py index aef8a5f..3f2d15e 100644 --- a/scripts/configurations.py +++ b/scripts/configurations.py @@ -180,7 +180,6 @@ def __generate_single__(var_num, conf_num): for con in confs: __register_conf__(con, conf_num, 'single-sat') except exceptions.NoSolution: - os.remove(tfile) return __generate_single__(var_num, conf_num) finally: os.remove(tfile) -- cgit v1.2.3