From a51f2a1de475b8ecec8acfdb5da58426ea833f30 Mon Sep 17 00:00:00 2001 From: Alejandro Leal Conejos Date: Mon, 7 Jun 2021 15:10:04 +0200 Subject: [PATCH] Fills the value of the number of cpus for the system_metrics_t and initiliaze its value to 0 when executing 2 measures in less than 100 ms. --- lib/include/srsran/system/sys_metrics.h | 17 +++++++++-------- lib/src/system/sys_metrics_processor.cc | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/lib/include/srsran/system/sys_metrics.h b/lib/include/srsran/system/sys_metrics.h index fb05aa2c3..92baba422 100644 --- a/lib/include/srsran/system/sys_metrics.h +++ b/lib/include/srsran/system/sys_metrics.h @@ -13,6 +13,7 @@ #ifndef SRSRAN_SYS_METRICS_H #define SRSRAN_SYS_METRICS_H +#include #include namespace srsran { @@ -21,14 +22,14 @@ constexpr uint32_t metrics_max_supported_cpu = 32u; /// Metrics of cpu usage, memory consumption and number of thread used by the process. struct sys_metrics_t { - uint32_t process_realmem_kB = 0; - uint32_t process_virtualmem_kB = 0; - float process_realmem = 0.f; - uint32_t thread_count = 0; - float process_cpu_usage = 0.f; - float system_mem = 0.f; - uint32_t cpu_count = 0; - float cpu_load[metrics_max_supported_cpu]; + uint32_t process_realmem_kB = 0; + uint32_t process_virtualmem_kB = 0; + float process_realmem = 0.f; + uint32_t thread_count = 0; + float process_cpu_usage = 0.f; + float system_mem = 0.f; + uint32_t cpu_count = 0; + std::array cpu_load; }; } // namespace srsran diff --git a/lib/src/system/sys_metrics_processor.cc b/lib/src/system/sys_metrics_processor.cc index 408027c6b..d5d616cf6 100644 --- a/lib/src/system/sys_metrics_processor.cc +++ b/lib/src/system/sys_metrics_processor.cc @@ -49,6 +49,20 @@ sys_metrics_processor::proc_stats_info::proc_stats_info() arg_end >> env_start >> env_end >> exit_code; } +/// Returns a null sys_metrics_t with the cpu count field filled. +static sys_metrics_t create_null_metrics() +{ + sys_metrics_t metrics; + + if (cpu_count > metrics_max_supported_cpu) { + return metrics; + } + + metrics.cpu_count = cpu_count; + metrics.cpu_load.fill(0.f); + return metrics; +} + sys_metrics_t sys_metrics_processor::get_metrics() { auto current_time = std::chrono::steady_clock::now(); @@ -58,7 +72,7 @@ sys_metrics_t sys_metrics_processor::get_metrics() // The time elapsed between 2 measures must be greater that 100 milliseconds. if (measure_interval_ms < 100u) { logger.warning("Interval less than 100ms, skipping measurement."); - return {}; + return create_null_metrics(); } sys_metrics_t metrics;