diff options
author | bd <bdunahu@operationnull.com> | 2025-09-19 15:09:21 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-09-19 15:09:21 -0400 |
commit | 89c9d534e2a2f0ed12743d99b5de89320890b1cc (patch) | |
tree | 32411d7b8a297e3477ca8f8d792e55353d1157ac /nemesis/nemesis.py | |
parent | 006a5441997a0bc42a8a5277ad7c8f4937782002 (diff) |
Diffstat (limited to 'nemesis/nemesis.py')
-rwxr-xr-x | nemesis/nemesis.py | 37 |
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: |