diff --git a/expetator/benchmarks/mpi_generic.c b/expetator/benchmarks/mpi_generic.c index f9f2558fc4249d1c201cb99ff4f0ced7ad3c534c..3d1a31948e11354b128944c16c778c65dae0cb5a 100644 --- a/expetator/benchmarks/mpi_generic.c +++ b/expetator/benchmarks/mpi_generic.c @@ -184,8 +184,8 @@ int main(int argc, char** argv) { // -c 1200 // -m 35000 -/* time mpirun --machinefile /dev/shm/m ./a.out -m 35000 -n 1 -c 1200 -/dev/shm/m : 32 == cores +/* time mpirun --machinefile m ./a.out -m 35000 -n 1 -c 1200 +m : 32 == cores real 2m26.163s user 32m6.416s sys 5m27.728s @@ -196,8 +196,8 @@ sys 5m27.728s /* -/* time mpirun --machinefile /dev/shm/m2 ./a.out -m 35000 -n 1 -c 1200 -/dev/shm/m2 : 64 == hyperthread +/* time mpirun --machinefile m2 ./a.out -m 35000 -n 1 -c 1200 +m2 : 64 == hyperthread real 3m38.990s user 101m59.836s sys 12m21.300s @@ -209,12 +209,12 @@ sys 12m21.300s /* RQ: avec mpirun --mca btl ^openib -time mpirun --mca btl ^openib --machinefile /dev/shm/m ./a.out -n 1 +time mpirun --mca btl ^openib --machinefile m ./a.out -n 1 real 0m53.827s user 6m38.412s sys 6m46.088s -time mpirun --machinefile /dev/shm/m ./a.out -n 1 +time mpirun --machinefile m ./a.out -n 1 real 0m53.990s user 6m43.392s sys 6m53.344s diff --git a/expetator/experiment.py b/expetator/experiment.py index c4cb898105db3343c9c4c897cdb3ebdff7df0c71..59762a11b00f87e530875dbb4f71f79484096c27 100755 --- a/expetator/experiment.py +++ b/expetator/experiment.py @@ -8,6 +8,7 @@ import random import time import itertools from pathlib import Path +import tempfile from functools import reduce from execo import Process @@ -15,8 +16,14 @@ from execo import Process class Executor: 'Allow access to the platform' def __init__(self): - self.mpi_host_file = '/dev/shm/mpi_host_file' - self.mpi_core_file = '/dev/shm/mpi_core_file' + self.tmp_dir = '' + if os.path.isdir('/dev/shm'): + self.tmp_dir = tempfile.mkdtemp(prefix="/dev/shm/") + else: + self.tmp_dir = tempfile.mkdtemp(prefix="/tmp/executor/") + + self.mpi_host_file = '%s/mpi_host_file' % self.tmp_dir + self.mpi_core_file = '%s/mpi_core_file' % self.tmp_dir self.mpi_options = '' self.hostnames = ['localhost'] self.nbhosts = 1 @@ -44,6 +51,8 @@ class Executor: for host in self.hostnames: file_id.write(host+" slots=%s\n" % (self.nbcores//self.nbhosts)) + self.hosts(f'mkdir -p {self.tmp_dir}') + def local(self, cmd, shell=True, root=False): """Executes the cmd command and returns stdout after cmd exits""" if root: diff --git a/expetator/monitors/laptop_power_monitor.py b/expetator/monitors/laptop_power_monitor.py index 474c5b133855c2e8745d12e8d3dbed3bb5fe92c6..74abf0076ec8ac9a99c84cbb3f1d408fde24dd87 100755 --- a/expetator/monitors/laptop_power_monitor.py +++ b/expetator/monitors/laptop_power_monitor.py @@ -18,7 +18,7 @@ if __name__ == '__main__': stay=True - with open('/dev/shm/power_measures','w') as power_file: + with open('/tmp/expetator_power_measures','w') as power_file: power_file.write('#timestamp power\n') try: @@ -30,7 +30,7 @@ if __name__ == '__main__': current_time=time.time() int_current_time=int(current_time) - with open('/dev/shm/power_measures','a') as power_file: + with open('/tmp/expetator_power_measures','a') as power_file: power_file.write(str(int_current_time)+' '+str(watt)+'\n') time.sleep(1-(current_time-int_current_time)) except: diff --git a/expetator/monitors/lperf.py b/expetator/monitors/lperf.py index 3470f491f798938d6734cfe7e573ae8a7d6c2074..78818372e8fc281cb582f816173b6563685cc892 100644 --- a/expetator/monitors/lperf.py +++ b/expetator/monitors/lperf.py @@ -31,7 +31,7 @@ class Lperf: self.executor = executor self.cmdline = '/tmp/bin/lperf stat -x "!" -I %s -a -A -e %s' % (self.interval, ','.join(self.names)) - self.cmdline += ' -o /dev/shm/lperf_monitoring &' + self.cmdline += ' -o %s/lperf_monitoring &' % executor.tmp_dir def start(self): 'Starts the monitoring right before the benchmark' @@ -47,8 +47,8 @@ class Lperf: os.makedirs(filename_moj, exist_ok=True) if len(self.executor.hostnames) > 1: for hostname in self.executor.hostnames: - self.executor.local('oarcp %s:/dev/shm/lperf_monitoring %s/%s_%s_%s' % - (hostname, filename_moj, hostname, benchname, beg_time)) + self.executor.local('oarcp %s:%s/lperf_monitoring %s/%s_%s_%s' % + (hostname, self.executor.tmp_dir, filename_moj, hostname, benchname, beg_time)) else: - self.executor.local('cp /dev/shm/lperf_monitoring %s/%s_%s_%s' % - (filename_moj, 'localhost', benchname, beg_time)) + self.executor.local('cp %s/lperf_monitoring %s/%s_%s_%s' % + (self.executor.tmp_dir, filename_moj, 'localhost', benchname, beg_time)) diff --git a/expetator/monitors/mojitos.py b/expetator/monitors/mojitos.py index fe0d12fa1e0620bc6156f2c62e18940c6026dc56..a47b6ca09a7456702cd3e6bf7c32faf7d5064d9d 100644 --- a/expetator/monitors/mojitos.py +++ b/expetator/monitors/mojitos.py @@ -58,21 +58,22 @@ class Mojitos: def build(self, executor): """Installs the mojito/s monitoring framework and add the permissions""" - if True or self.rapl: + #if True or self.rapl: # should work but do not work currently as to compile mojitos it # is always necessary to have rapl. Todo: update mojitos - if False in [os.path.exists(filename) for filename in - ['/usr/share/doc/powercap-utils', - '/usr/share/doc/libpowercap-dev', - '/usr/share/doc/libpowercap0']]: - executor.hosts('apt install -y libpowercap0 libpowercap-dev powercap-utils', root=True) + # if False in [os.path.exists(filename) for filename in + # ['/usr/share/doc/powercap-utils', + # '/usr/share/doc/libpowercap-dev', + # '/usr/share/doc/libpowercap0']]: + # executor.hosts('apt install -y libpowercap0 libpowercap-dev powercap-utils', root=True) if not os.path.exists('/tmp/mojitos'): executor.local('cd /tmp; git clone https://gitlab.irit.fr/sepia-pub/mojitos.git') else: executor.local('cd /tmp/mojitos; git pull') - executor.local('cd /tmp/mojitos; make') - executor.local('cp /tmp/mojitos/mojitos /tmp/bin/') - if True or self.rapl: + executor.local('cd /tmp/mojitos; ./configure.sh; make') + executor.local('cp /tmp/mojitos/bin/mojitos /tmp/bin/') + if True or self.rapl or self.perf: + executor.hosts('sudo-g5k modprobe msr', root=True) if read_int('/proc/sys/kernel/perf_event_paranoid') != 0: executor.hosts("sh -c 'echo 0 >/proc/sys/kernel/perf_event_paranoid'", root=True) mode = os.stat('/sys/class/powercap/intel-rapl/intel-rapl:0/constraint_0_max_power_uw') @@ -93,7 +94,8 @@ class Mojitos: self.cmdline += ' -r' if self.load: self.cmdline += ' -u' - self.cmdline += ' -o /dev/shm/monitoring_moj &' + self.monitoring_file = '%s/monitoring_moj' % executor.tmp_dir + self.cmdline += ' -o %s &' % self.monitoring_file def start(self): @@ -110,8 +112,8 @@ class Mojitos: os.makedirs(filename_moj, exist_ok=True) if len(self.executor.hostnames) > 1: for hostname in self.executor.hostnames: - self.executor.local('oarcp %s:/dev/shm/monitoring_moj %s/%s_%s_%s' % - (hostname, filename_moj, hostname, benchname, beg_time)) + self.executor.local('oarcp %s:%s %s/%s_%s_%s' % + (hostname, self.monitoring_file, filename_moj, hostname, benchname, beg_time)) else: - self.executor.local('cp /dev/shm/monitoring_moj %s/%s_%s_%s' % - (filename_moj, 'localhost', benchname, beg_time)) + self.executor.local('cp %s %s/%s_%s_%s' % + (self.monitoring_file, filename_moj, 'localhost', benchname, beg_time)) diff --git a/expetator/monitors/power.py b/expetator/monitors/power.py index 3fb2d45e230d66509267583af9ee28327a797ddb..4bbcbe0923da237b197d6c89dae041891a8ac31c 100644 --- a/expetator/monitors/power.py +++ b/expetator/monitors/power.py @@ -57,8 +57,8 @@ class Power: result = [(raw['uid'], raw['timestamps'],raw['values']) for raw in raws] else: - self.executor.local('cp /dev/shm/power_measures %s' % target) - with open('/dev/shm/power_measures') as file_id: + self.executor.local('cp /tmp/expetator_power_measures %s' % target) + with open('/tmp/expetator_power_measures') as file_id: content = [line.split() for line in file_id.readlines()[1:]] content = [(int(t), float(p)) for t,p in content] result = [('localhost',)+tuple(zip(*content))] diff --git a/setup.py b/setup.py index 29e6aaea3e4ab31c5721a6bbd9a2b7187a97e8c7..4e894d5695879441c1a30e2d5756eb266a3add6d 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open("README.md", "r") as fh: setuptools.setup( name="expetator", - version="0.3.20", + version="0.3.23", author="Georges Da Costa", author_email="georges.da-costa@irit.fr", description="A framework for monitoring HPC applications using DVFS",