From 968234160cc483b6ffab7980d39224ec51225c94 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 14 Mar 2021 16:59:21 +0100 Subject: [PATCH] RemoteProcess: cache the addresses of maxpid, actors and dead_actors Soon these addresses will be given by the App through the network instead of retriving them with Dwarf. --- src/mc/remote/RemoteProcess.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/mc/remote/RemoteProcess.cpp b/src/mc/remote/RemoteProcess.cpp index 0b9b6e9ed5..411a8e9318 100644 --- a/src/mc/remote/RemoteProcess.cpp +++ b/src/mc/remote/RemoteProcess.cpp @@ -572,14 +572,16 @@ void RemoteProcess::dump_stack() const unsigned long RemoteProcess::get_maxpid() const { - static const char* name = nullptr; - if (not name) { - name = "simgrid::kernel::actor::maxpid"; - if (find_variable(name) == nullptr) - name = "maxpid"; // We seem to miss the namespaces when compiling with GCC + static void* maxpid_addr = nullptr; + if (maxpid_addr == nullptr) { + const Variable* maxpid_var = find_variable("simgrid::kernel::actor::maxpid"); + if (maxpid_var == nullptr) + maxpid_var = find_variable("maxpid"); // GCC sometimes eats the namespaces + maxpid_addr = maxpid_var->address; } unsigned long maxpid; - read_variable(name, &maxpid, sizeof(maxpid)); + this->read_bytes(&maxpid, sizeof(unsigned long), remote(maxpid_addr)); + return maxpid; } @@ -589,12 +591,18 @@ void RemoteProcess::get_actor_vectors(RemotePtr& actors, RemotePt "Unexpected type for simix_global"); static_assert(sizeof(simix_global) == sizeof(simgrid::simix::Global*), "Bad size for simix_global"); - // TODO, avoid to reload `&simix_global`, `simix_global`, `*simix_global` - RemotePtr simix_global_p{this->read_variable("simix_global")}; - Remote simix_global = this->read(simix_global_p); + static RemotePtr actors_; + static RemotePtr dead_actors_; + static bool inited = false; + if (not inited) { + RemotePtr simix_global_p{this->read_variable("simix_global")}; + Remote simix_global = this->read(simix_global_p); - actors = remote(simix_global.get_buffer()->actors_vector); - dead_actors = remote(simix_global.get_buffer()->dead_actors_vector); + actors_ = remote(simix_global.get_buffer()->actors_vector); + dead_actors_ = remote(simix_global.get_buffer()->dead_actors_vector); + } + actors = actors_; + dead_actors = dead_actors_; } } // namespace mc } // namespace simgrid -- 2.20.1