summaryrefslogtreecommitdiff
path: root/nemesis/nemesis.py
diff options
context:
space:
mode:
Diffstat (limited to 'nemesis/nemesis.py')
-rwxr-xr-xnemesis/nemesis.py37
1 files changed, 26 insertions, 11 deletions
diff --git a/nemesis/nemesis.py b/nemesis/nemesis.py
index 46e8094..ce5e0a6 100755
--- a/nemesis/nemesis.py
+++ b/nemesis/nemesis.py
@@ -72,6 +72,10 @@ class Nemesis(object):
experiment_coro = None
# the speedup of the current experiment
experiment_spdp = None
+ # the total time this experiment has been running
+ experiment_time = None
+ # The number of seconds this performance experiment should run
+ experiment_dura = None
# results from previous experiments. Keys represent names of coroutines.
results = defaultdict(lambda: defaultdict(lambda: []))
@@ -82,9 +86,6 @@ class Nemesis(object):
# The base duration of each performance experiment
e_duration = None
- # The number of seconds remaining in this performance experiment.
- r_duration = None
-
# A mapping of event loops to the previous running coroutine.
prev_coro = defaultdict(lambda: None)
@@ -93,7 +94,6 @@ class Nemesis(object):
Nemesis.signal_interval = signal_interval
Nemesis.e_duration = e_duration
Nemesis.filename = filename
- Nemesis.r_duration = 0
@staticmethod
def start():
@@ -112,24 +112,39 @@ class Nemesis(object):
@staticmethod
def _start_experiment(coro, speedup):
- Nemesis.r_duration = Nemesis.e_duration * speedup
+ Nemesis.experiment_dura = Nemesis.e_duration * speedup
Nemesis.prev_coro = defaultdict(lambda: None)
Nemesis.experiment_coro = coro
Nemesis.experiment_spdp = speedup
+ Nemesis.experiment_time = 0
loops = Nemesis._get_event_loops()
for l in loops:
if not isinstance(l, CausalEventLoop):
raise RuntimeException("Nemesis requires a custom event loop to insert slowdowns. It does not work on programs which change the event loop policy.")
- l._set_dilation(1.0 / speedup)
+ l.set_dilation(1.0 / speedup)
Nemesis.experiment_data = Experiment(loops)
@staticmethod
def _stop_experiment():
if Nemesis.experiment_data is not None:
- print(f'finished running experiment on {Nemesis.experiment_coro}')
- results = Nemesis.experiment_data.samples
+ loops = Nemesis.experiment_data.get_loops()
+
+ num_processed = 0
+ sec_in_coro = 0
+
+ for loop in loops:
+ num_processed += loop.get_num_processed_tasks()
+ sec_in_coro += loop.get_num_processed_tasks()
+
+ print(f'Ran {Nemesis.experiment_coro} at {Nemesis.experiment_spdp} speed')
+ results = {
+ "processed": num_processed,
+ "time_starving": Nemesis.experiment_data.samples,
+ "time_in_coro": sec_in_coro,
+ "real_duration": Nemesis.experiment_time,
+ }
Nemesis.results[Nemesis.experiment_coro][Nemesis.experiment_spdp].append(results)
del Nemesis.experiment_data
@@ -139,7 +154,6 @@ class Nemesis(object):
passed_time = curr_sample - Nemesis.last_sample
Nemesis.last_sample = curr_sample
-
if getattr(Nemesis, 'experiment_data', None):
loops = Nemesis.experiment_data.get_loops()
exp_coro = Nemesis.experiment_coro
@@ -157,8 +171,9 @@ class Nemesis(object):
handles = Nemesis._get_waiting_handles(loop)
Nemesis.experiment_data.add_handles(handles, loop, passed_time)
- Nemesis.r_duration -= passed_time
- if (Nemesis.r_duration <= 0):
+
+ Nemesis.experiment_time += passed_time
+ if (Nemesis.experiment_dura <= Nemesis.experiment_time):
Nemesis._stop_experiment()
else: