From 4634ac484a03f88f716429712504e7c354441c0b Mon Sep 17 00:00:00 2001 From: Tyler Neely <tylerneely@gmail.com> Date: Wed, 12 Oct 2022 18:19:06 +0200 Subject: [PATCH] Optimize simulator RNG usage (#590) This causes instructions for `basic_request.cpp` to drop from 281 million to 28 million --- src/io/simulator/simulator_handle.cpp | 6 ++---- src/io/simulator/simulator_handle.hpp | 2 ++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/io/simulator/simulator_handle.cpp b/src/io/simulator/simulator_handle.cpp index fe4bc8c1f..9fa16fae3 100644 --- a/src/io/simulator/simulator_handle.cpp +++ b/src/io/simulator/simulator_handle.cpp @@ -73,8 +73,7 @@ bool SimulatorHandle::MaybeTickSimulator() { // We tick the clock forward when all servers are blocked but // there are no in-flight messages to schedule delivery of. - std::poisson_distribution<> time_distrib(50); - Duration clock_advance = std::chrono::microseconds{time_distrib(rng_)}; + const Duration clock_advance = std::chrono::microseconds{time_distrib_(rng_)}; cluster_wide_time_microseconds_ += clock_advance; MG_ASSERT(cluster_wide_time_microseconds_ < config_.abort_time, @@ -93,8 +92,7 @@ bool SimulatorHandle::MaybeTickSimulator() { auto [to_address, opaque_message] = std::move(in_flight_.back()); in_flight_.pop_back(); - std::uniform_int_distribution<int> drop_distrib(0, 99); - const int drop_threshold = drop_distrib(rng_); + const int drop_threshold = drop_distrib_(rng_); const bool should_drop = drop_threshold < config_.drop_percent; if (should_drop) { diff --git a/src/io/simulator/simulator_handle.hpp b/src/io/simulator/simulator_handle.hpp index 7ad1d795a..3adf2b7b0 100644 --- a/src/io/simulator/simulator_handle.hpp +++ b/src/io/simulator/simulator_handle.hpp @@ -51,6 +51,8 @@ class SimulatorHandle { std::set<Address> blocked_on_receive_; std::set<Address> server_addresses_; std::mt19937 rng_; + std::uniform_int_distribution<int> time_distrib_{5, 50}; + std::uniform_int_distribution<int> drop_distrib_{0, 99}; SimulatorConfig config_; void TimeoutPromisesPastDeadline() {