File plugin.cpp
File List > network_latency > tx > plugin.cpp
Go to the documentation of this file
#include "plugin.hpp"
#include "illixr/plugin.hpp"
#include
#include
#include
using namespace ILLIXR;
using namespace ILLIXR::data_format;
// Default configuration values
static constexpr int DEFAULT_PING_INTERVAL_MS = 100;
[[maybe_unused]] network_latency_tx::network_latency_tx(const std::string& name, phonebook* pb)
: threadloop{name, pb}
, switchboard_{pb->lookup_impl<switchboard>()}
, ping_writer_{switchboard_->get_network_writer<latency_ping>("latency_ping")}
, pong_rx_{std::make_shared<network_latency_pong_rx>(name, pb)}
, sequence_number_{0}
, last_ping_time_{std::chrono::steady_clock::now()} {
// Read ping interval from environment
int interval_ms = switchboard_->get_env_int("NETWORK_LATENCY_INTERVAL_MS", DEFAULT_PING_INTERVAL_MS);
ping_interval_ = std::chrono::milliseconds(interval_ms);
spdlog::get("illixr")->info("[network_latency_tx] Initialized with interval={}ms", interval_ms);
}
void network_latency_tx::start() {
threadloop::start();
pong_rx_->start();
}
void network_latency_tx::stop() {
pong_rx_->stop();
threadloop::stop();
}
threadloop::skip_option network_latency_tx::_p_should_skip() {
auto now = std::chrono::steady_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - last_ping_time_);
if (elapsed >= ping_interval_) {
return skip_option::run;
}
return skip_option::skip_and_yield;
}
void network_latency_tx::_p_one_iteration() {
uint64_t seq = sequence_number_.fetch_add(1);
uint64_t timestamp = get_timestamp_ns();
ping_writer_.put(ping_writer_.allocate<latency_ping>(latency_ping{seq, timestamp}));
last_ping_time_ = std::chrono::steady_clock::now();
spdlog::get("illixr")->info("[network_latency_tx] Sent ping seq={}", seq);
}
uint64_t network_latency_tx::get_timestamp_ns() {
auto now = std::chrono::system_clock::now();
auto ns = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch());
return static_cast<uint64_t>(ns.count());
}
// Plugin entry point
PLUGIN_MAIN(network_latency_tx)