From 161f5c2a9c79758628c05bdecee84e91f3397f2e Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Mon, 4 Jan 2016 16:22:38 +0100 Subject: [PATCH] Added first version of memory capturing. --- ilp_measurement.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/ilp_measurement.py b/ilp_measurement.py index 4c82266..6a99f85 100644 --- a/ilp_measurement.py +++ b/ilp_measurement.py @@ -4,6 +4,7 @@ import sys, re, os, csv, timeit, shutil, json from datetime import datetime from glob import glob, iglob +from subprocess import Popen try: from fabric.api import task, lcd, hosts, cd, run, get, execute from fabric.colors import red, green @@ -66,6 +67,11 @@ def racket(*dirs): """ Measure Racket once """ do_gen(call_racket, 1, dirs) +@task(name = 'racket-memory') +def racket_memory(*dirs): + """ Measure Racket, restarting for each run and measuring its memory consumption """ + do_gen(call_racket, 1, dirs, memory = True) + @task(name = 'racket-n') def larceny_n(number, *dirs): """ Measure larceny n times """ @@ -76,18 +82,27 @@ def larceny(*dirs): """ Measure larceny once. """ do_gen(call_larceny, 1, dirs) -def do_gen(call_impl, number, dirs): +def do_gen(call_impl, number, dirs, memory = False): cmd = 'measure' with timed(): setup_profiling_dirs(call_impl, cmd) for _ in xrange(int(number)): - call_impl('cli.scm', cmd, 'all' if dirs == () else ' '.join(dirs), capture = False) + if memory: + FNULL = open(os.devnull, 'w') + dstat_cmds = ['dstat', '-tclmdC', 'total,0,1,2,3', '--output']#, logfile_id] + for d in dirs: + process = Popen(dstat_cmds + [dstat_log(d)], stdout = FNULL) + call_impl('cli.scm', cmd, d, capture = False) + process.kill() + else: + call_impl('cli.scm', cmd, 'all' if dirs == () else ' '.join(dirs), capture = False) # call_impl('larceny_profiling.scm', 'measure', 'all' if dirs == () else ' '.join(dirs), capture = False) print '\n' # conflate_results(skip_sol = True) -def dirname(d): - return os.path.split(os.path.dirname(d))[-1] +def dstat_log(directory): return 'profiling/{}/dstat.log'.format(directory) + +def dirname(d): return os.path.split(os.path.dirname(d))[-1] @task(name = 'sol') def sol(number = 1, solver = 'glpsol', pathname = '*', skip_conflate = False): @@ -397,11 +412,12 @@ def check(): with open('dependencies.txt') as fd: if 'ilp-noncached\n' in fd: noncached_scm = True - print 'Evaluation is set to:\n- {0}, {1}\n- {2}\n- {3}'.format( + print 'Evaluation is set to:\n- {0}, {1}\n- {2}\n- {3}\n- {4}'.format( red('non-cached') if properties.noncached.value else 'cached', red('flushed') if properties.flushed.value else 'unflushed', - (green('yes: ') if properties.timing.value else 'No ') + 'measurement of execution times', - (green('yes: ') if properties.profiling.value else 'No ') + 'profiling of attribute metrics') + (green('Yes: ') if properties.timing.value else 'No ') + 'measurement of execution times', + (green('Yes: ') if properties.profiling.value else 'No ') + 'profiling of attribute metrics', + (green('Yes: ') if properties.lp_write.value else 'No ') + 'write of LP files',) if noncached_scm != properties.noncached.value: print 'Attention: Compiled ilp ({}) differs from properties file setting ({}).'.format( nc_tostring(noncached_scm), nc_tostring(properties.noncached.value)) -- GitLab