summaryrefslogtreecommitdiffstats
path: root/storperf/test_executor.py
diff options
context:
space:
mode:
Diffstat (limited to 'storperf/test_executor.py')
-rw-r--r--storperf/test_executor.py82
1 files changed, 55 insertions, 27 deletions
diff --git a/storperf/test_executor.py b/storperf/test_executor.py
index 5fb88d4..462f06b 100644
--- a/storperf/test_executor.py
+++ b/storperf/test_executor.py
@@ -9,15 +9,15 @@
import imp
import logging
-import os
-import socket
-
from os import listdir
+import os
from os.path import isfile, join
+import socket
-from fio.fio_invoker import FIOInvoker
-from carbon.emitter import CarbonMetricTransmitter
from carbon.converter import JSONToCarbon
+from carbon.emitter import CarbonMetricTransmitter
+from db.job_db import JobDB
+from fio.fio_invoker import FIOInvoker
class UnknownWorkload(Exception):
@@ -37,8 +37,8 @@ class TestExecutor(object):
self.event_listeners = set()
self.metrics_converter = JSONToCarbon()
self.metrics_emitter = CarbonMetricTransmitter()
- self.prefix = socket.getfqdn()
- self.job_id = None
+ self.prefix = None
+ self.job_db = JobDB()
def register(self, event_listener):
self.event_listeners.add(event_listener)
@@ -50,6 +50,7 @@ class TestExecutor(object):
carbon_metrics = self.metrics_converter.convert_to_dictionary(
metric,
self.prefix)
+
read_latency = carbon_metrics[self.prefix + ".jobs.1.read.lat.mean"]
write_latency = carbon_metrics[self.prefix + ".jobs.1.write.lat.mean"]
read_iops = carbon_metrics[self.prefix + ".jobs.1.read.iops"]
@@ -66,7 +67,7 @@ class TestExecutor(object):
def register_workloads(self, workloads):
- if (workloads is None or workloads.length() == 0):
+ if (workloads is None or len(workloads) == 0):
workload_dir = os.path.normpath(
os.path.join(os.path.dirname(__file__), "workloads"))
@@ -112,26 +113,53 @@ class TestExecutor(object):
return imp.load_source(mname, no_ext + '.py')
return None
- def create_job_id(self):
- return 1234
-
def execute(self):
- if (self.job_id is None):
- self.job_id = self.create_job_id()
+
+ shortname = socket.getfqdn().split('.')[0]
invoker = FIOInvoker()
invoker.register(self.event)
-
- for numjobs in [1, 2, 4]:
-
- for workload_module in self.workload_modules:
- constructor = getattr(workload_module, "__name__")
- constructorMethod = getattr(workload_module, constructor)
- self.logger.debug(
- "Found constructor: " + str(constructorMethod))
- workload = constructorMethod()
- workload.filename = self.filename
- workload.invoker = invoker
- workload.options['iodepth'] = str(numjobs)
- self.logger.info("Executing workload: " + constructor)
- workload.execute()
+ self.job_db.create_job_id()
+ self.logger.info("Starting job " + self.job_db.job_id)
+
+ for workload_module in self.workload_modules:
+
+ workload_name = getattr(workload_module, "__name__")
+ constructorMethod = getattr(workload_module, workload_name)
+ self.logger.debug(
+ "Found workload: " + str(constructorMethod))
+ workload = constructorMethod()
+ workload.filename = self.filename
+ workload.invoker = invoker
+
+ if (workload_name.startswith("_")):
+ iodepths = [2, ]
+ blocksizes = [4096, ]
+ else:
+ iodepths = [1, 16, 128]
+ blocksizes = [4096, 65536, 1048576]
+
+ for blocksize in blocksizes:
+ for iodepth in iodepths:
+
+ full_workload_name = workload_name + \
+ ".queue-depth." + str(iodepth) + \
+ ".block-size." + str(blocksize)
+
+ workload.options['iodepth'] = str(iodepth)
+ workload.options['bs'] = str(blocksize)
+ self.logger.info(
+ "Executing workload: " + full_workload_name)
+
+ self.prefix = shortname + "." + self.job_db.job_id + \
+ "." + full_workload_name
+
+ self.job_db.start_workload(full_workload_name)
+ workload.execute()
+ self.job_db.end_workload(full_workload_name)
+
+ self.logger.info("Finished job " + self.job_db.job_id)
+
+ def fetch_results(self, job, workload_name=""):
+ self.job_db.job_id = job
+ return self.job_db.fetch_results(workload_name)