Skip to content

Commit 4b7cd32

Browse files
author
codebot
committed
Update main
# Conflicts: # include/srsran/asn1/rrc_nr/ho_prep_info.h # include/srsran/asn1/rrc_nr/meas_cfg.h # include/srsran/asn1/rrc_nr/meas_timing_cfg.h # lib/asn1/rrc_nr/ho_prep_info.cpp # lib/asn1/rrc_nr/meas_cfg.cpp # lib/asn1/rrc_nr/meas_timing_cfg.cpp
2 parents 05d0d9f + 7ebf2ef commit 4b7cd32

File tree

97 files changed

+136858
-136780
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+136858
-136780
lines changed

.gitlab/ci/e2e/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ OPEN5GS_VERSION=2.7.0
88
FLEXRIC_VERSION=br-flexric
99
NTN_CHANNEL_EMULATOR_VERSION=0.1
1010
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
11-
SRS_TELEGRAF_VERSION=0.16.1
11+
SRS_TELEGRAF_VERSION=0.16.2
1212
DPDK_VERSION=24.11.2
1313
ZMQ_HOSTLABEL=kubernetes.io/hostname=fpga-virt-master
1414
AMARISOFT_TXRX_BINARY_PATH=../../build_trx_srsran/libtrx_srsran.so

.gitlab/ci/plugin_version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
69815c84cc798a8889645bf0d1b4ea5c696046af
1+
42a0825fe2028c8cc67ed554125d1e50f71d6625

CMakeLists.txt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,6 @@ if (ENABLE_WERROR)
113113
# Disable gcc's maybe uninitialized analysis as it raises false positives
114114
if (CMAKE_COMPILER_IS_GNUCXX)
115115
include(CheckCXXCompilerFlag)
116-
check_cxx_compiler_flag("-Wmaybe-uninitialized" HAS_MAYBE_UNINITIALIZED)
117-
if (HAS_MAYBE_UNINITIALIZED)
118-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=maybe-uninitialized")
119-
endif()
120116
check_cxx_compiler_flag("-Wstringop-overflow" HAS_STRINGOP_OVERFLOW)
121117
if (HAS_STRINGOP_OVERFLOW)
122118
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=stringop-overflow")
@@ -201,6 +197,9 @@ ADD_CXX_COMPILER_FLAG_IF_AVAILABLE(-Wextra-semi HAVE_EXTRA_SEMI)
201197
# Disable RTTI
202198
ADD_CXX_COMPILER_FLAG_IF_AVAILABLE(-fno-rtti HAVE_NO_RTTI)
203199

200+
# Disable maybe-uninitialized warnings as it mainly raises false alarms
201+
ADD_CXX_COMPILER_FLAG_IF_AVAILABLE(-Wno-maybe-uninitialized HAVE_NO_MAYBE_UNINITIALIZED)
202+
204203
# Set compiler flags for different build types.
205204
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb -O0 -DDEBUG_MODE -DBUILD_TYPE_DEBUG")
206205
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -ggdb -DBUILD_TYPE_RELWITHDEBINFO")

apps/helpers/metrics/json_generators/du_high/scheduler.cpp

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -81,39 +81,40 @@ void to_json(nlohmann::json& json, const scheduler_ue_metrics& metrics)
8181
}
8282

8383
json["ta_ns"] =
84-
(metrics.ta_stats.get_nof_observations() > 0) ? std::optional{metrics.ta_stats.get_mean() * 1e9} : std::nullopt;
85-
json["pusch_ta_ns"] = (metrics.pusch_ta_stats.get_nof_observations() > 0)
86-
? std::optional{metrics.pusch_ta_stats.get_mean() * 1e9}
87-
: std::nullopt;
88-
json["pucch_ta_ns"] = (metrics.pucch_ta_stats.get_nof_observations() > 0)
89-
? std::optional{metrics.pucch_ta_stats.get_mean() * 1e9}
90-
: std::nullopt;
91-
json["srs_ta_ns"] = (metrics.srs_ta_stats.get_nof_observations() > 0)
92-
? std::optional{metrics.srs_ta_stats.get_mean() * 1e9}
93-
: std::nullopt;
94-
json["ul_mcs"] = metrics.ul_mcs.to_uint();
95-
json["ul_brate"] = metrics.ul_brate_kbps * 1e3;
96-
json["ul_nof_ok"] = metrics.ul_nof_ok;
97-
json["ul_nof_nok"] = metrics.ul_nof_nok;
98-
json["last_phr"] = metrics.last_phr;
99-
json["max_pusch_distance"] = metrics.max_pusch_distance_ms;
100-
json["max_pdsch_distance"] = metrics.max_pdsch_distance_ms;
101-
json["bsr"] = metrics.bsr;
102-
json["nof_pucch_f0f1_invalid_harqs"] = metrics.nof_pucch_f0f1_invalid_harqs;
84+
(metrics.ta_stats.get_nof_observations() > 0) ? std::optional{metrics.ta_stats.get_mean() * 1e9} : 0.0f;
85+
json["pusch_ta_ns"] = (metrics.pusch_ta_stats.get_nof_observations() > 0)
86+
? std::optional{metrics.pusch_ta_stats.get_mean() * 1e9}
87+
: 0.0f;
88+
json["pucch_ta_ns"] = (metrics.pucch_ta_stats.get_nof_observations() > 0)
89+
? std::optional{metrics.pucch_ta_stats.get_mean() * 1e9}
90+
: 0.0f;
91+
json["srs_ta_ns"] =
92+
(metrics.srs_ta_stats.get_nof_observations() > 0) ? std::optional{metrics.srs_ta_stats.get_mean() * 1e9} : 0.0f;
93+
json["ul_mcs"] = metrics.ul_mcs.to_uint();
94+
json["ul_brate"] = metrics.ul_brate_kbps * 1e3;
95+
json["ul_nof_ok"] = metrics.ul_nof_ok;
96+
json["ul_nof_nok"] = metrics.ul_nof_nok;
97+
json["last_phr"] = metrics.last_phr.has_value() ? metrics.last_phr : 0;
98+
json["max_pusch_distance"] = metrics.max_pusch_distance_ms.has_value() ? metrics.max_pusch_distance_ms : 0;
99+
json["max_pdsch_distance"] = metrics.max_pdsch_distance_ms.has_value() ? metrics.max_pdsch_distance_ms : 0;
100+
json["bsr"] = metrics.bsr;
101+
json["nof_pucch_f0f1_invalid_harqs"] = metrics.nof_pucch_f0f1_invalid_harqs;
103102
json["nof_pucch_f2f3f4_invalid_harqs"] = metrics.nof_pucch_f2f3f4_invalid_harqs;
104103
json["nof_pucch_f2f3f4_invalid_csis"] = metrics.nof_pucch_f2f3f4_invalid_csis;
105104
json["nof_pusch_invalid_harqs"] = metrics.nof_pusch_invalid_harqs;
106105
json["nof_pusch_invalid_csis"] = metrics.nof_pusch_invalid_csis;
107-
json["avg_ce_delay"] = metrics.avg_ce_delay_ms;
108-
json["max_ce_delay"] = metrics.max_ce_delay_ms;
109-
json["avg_crc_delay"] = metrics.avg_crc_delay_ms;
110-
json["max_crc_delay"] = metrics.max_crc_delay_ms;
111-
json["avg_pusch_harq_delay"] = metrics.avg_pusch_harq_delay_ms;
112-
json["max_pusch_harq_delay"] = metrics.max_pusch_harq_delay_ms;
113-
json["avg_pucch_harq_delay"] = metrics.avg_pucch_harq_delay_ms;
114-
json["max_pucch_harq_delay"] = metrics.max_pucch_harq_delay_ms;
115-
json["avg_sr_to_pusch_delay"] = metrics.avg_sr_to_pusch_delay_ms;
116-
json["max_sr_to_pusch_delay"] = metrics.max_sr_to_pusch_delay_ms;
106+
json["avg_ce_delay"] = metrics.avg_ce_delay_ms.has_value() ? metrics.avg_ce_delay_ms : 0.0f;
107+
json["max_ce_delay"] = metrics.max_ce_delay_ms.has_value() ? metrics.max_ce_delay_ms : 0.0f;
108+
json["avg_crc_delay"] = metrics.avg_crc_delay_ms.has_value() ? metrics.avg_crc_delay_ms : 0.0f;
109+
json["max_crc_delay"] = metrics.max_crc_delay_ms.has_value() ? metrics.max_crc_delay_ms : 0.0f;
110+
json["avg_pusch_harq_delay"] = metrics.avg_pusch_harq_delay_ms.has_value() ? metrics.avg_pusch_harq_delay_ms : 0.0f;
111+
json["max_pusch_harq_delay"] = metrics.max_pusch_harq_delay_ms.has_value() ? metrics.max_pusch_harq_delay_ms : 0.0f;
112+
json["avg_pucch_harq_delay"] = metrics.avg_pucch_harq_delay_ms.has_value() ? metrics.avg_pucch_harq_delay_ms : 0.0f;
113+
json["max_pucch_harq_delay"] = metrics.max_pucch_harq_delay_ms.has_value() ? metrics.max_pucch_harq_delay_ms : 0.0f;
114+
json["avg_sr_to_pusch_delay"] =
115+
metrics.avg_sr_to_pusch_delay_ms.has_value() ? metrics.avg_sr_to_pusch_delay_ms : 0.0f;
116+
json["max_sr_to_pusch_delay"] =
117+
metrics.max_sr_to_pusch_delay_ms.has_value() ? metrics.max_sr_to_pusch_delay_ms : 0.0f;
117118
}
118119

119120
void to_json(nlohmann::json& json, const scheduler_cell_metrics& metrics)
@@ -128,10 +129,10 @@ void to_json(nlohmann::json& json, const scheduler_cell_metrics& metrics)
128129
cell_json["latency_histogram"] = metrics.latency_histogram;
129130
cell_json["msg3_nof_ok"] = metrics.nof_msg3_ok;
130131
cell_json["msg3_nof_nok"] = metrics.nof_msg3_nok;
131-
cell_json["avg_prach_delay"] = metrics.avg_prach_delay_slots;
132-
cell_json["late_dl_harqs"] = metrics.nof_failed_pdsch_allocs_late_harqs;
133-
cell_json["late_ul_harqs"] = metrics.nof_failed_pusch_allocs_late_harqs;
134-
cell_json["pucch_tot_rb_usage_avg"] = metrics.pucch_tot_rb_usage_avg;
132+
cell_json["avg_prach_delay"] = metrics.avg_prach_delay_slots.has_value() ? metrics.avg_prach_delay_slots : 0.0f;
133+
cell_json["late_dl_harqs"] = metrics.nof_failed_pdsch_allocs_late_harqs;
134+
cell_json["late_ul_harqs"] = metrics.nof_failed_pusch_allocs_late_harqs;
135+
cell_json["pucch_tot_rb_usage_avg"] = metrics.pucch_tot_rb_usage_avg;
135136
if (metrics.pusch_prbs_used_per_tdd_slot_idx.size()) {
136137
cell_json["pusch_prbs_used_per_tdd_slot_idx"] = metrics.pusch_prbs_used_per_tdd_slot_idx;
137138
}

apps/helpers/metrics/json_generators/o_du_low.cpp

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -303,49 +303,29 @@ static nlohmann::json generate_cell_uplink(const upper_phy_metrics& metrics)
303303
return json;
304304
}
305305

306-
static nlohmann::json generate_upper_phy_cell(const upper_phy_metrics& metrics, pci_t pci)
306+
static nlohmann::json generate_upper_phy(const upper_phy_metrics& upper_phy)
307307
{
308308
nlohmann::json json;
309309

310-
json["pci"] = pci;
311-
json["dl"] = generate_cell_downlink(metrics);
312-
json["ul"] = generate_cell_uplink(metrics);
310+
json["dl"] = generate_cell_downlink(upper_phy);
311+
json["ul"] = generate_cell_uplink(upper_phy);
313312

314313
return json;
315314
}
316315

317-
static nlohmann::json generate_upper_phy(span<const upper_phy_metrics> upper_phy, span<const pci_t> pci_sector_map)
316+
nlohmann::json srsran::app_helpers::json_generators::generate(const srs_du::o_du_low_metrics& metrics)
318317
{
319318
nlohmann::json json;
320319

321-
for (auto& upper : upper_phy) {
322-
srsran_assert(upper.sector_id < pci_sector_map.size(),
323-
"Invalid sector identifier '{}'. PCI look up table size is '{}'",
324-
upper.sector_id,
325-
pci_sector_map.size());
326-
json.emplace_back(generate_upper_phy_cell(upper, pci_sector_map[upper.sector_id]));
327-
}
320+
json["timestamp"] = get_time_stamp();
321+
json["du_low"] = generate_upper_phy(metrics.du_lo_metrics.upper_metrics);
328322

329323
return json;
330324
}
331325

332-
nlohmann::json srsran::app_helpers::json_generators::generate(const srs_du::o_du_low_metrics& metrics,
333-
span<const pci_t> pci_sector_map)
326+
std::string srsran::app_helpers::json_generators::generate_string(const srs_du::o_du_low_metrics& metrics, int indent)
334327
{
335-
nlohmann::json json;
336-
337-
json["timestamp"] = get_time_stamp();
338-
auto& json_du_low = json["du_low"];
339-
json_du_low["upper_phy"] = generate_upper_phy(metrics.du_lo_metrics.sector_metrics, pci_sector_map);
340-
341-
return json;
342-
}
343-
344-
std::string srsran::app_helpers::json_generators::generate_string(const srs_du::o_du_low_metrics& metrics,
345-
span<const pci_t> pci_sector_map,
346-
int indent)
347-
{
348-
nlohmann::json json = generate(metrics, pci_sector_map);
328+
nlohmann::json json = generate(metrics);
349329

350330
return json.dump(indent);
351331
}

apps/helpers/metrics/json_generators/o_du_low.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ namespace app_helpers {
3737
namespace json_generators {
3838

3939
/// Generates a nlohmann JSON object that codifies the given O-DU low metrics.
40-
nlohmann::json generate(const srs_du::o_du_low_metrics& metrics, span<const pci_t> pci_sector_map);
40+
nlohmann::json generate(const srs_du::o_du_low_metrics& metrics);
4141

4242
/// Generates a string in JSON format that codifies the given O-DU low metrics.
43-
std::string generate_string(const srs_du::o_du_low_metrics& metrics, span<const pci_t> pci_sector_map, int indent = -1);
43+
std::string generate_string(const srs_du::o_du_low_metrics& metrics, int indent = -1);
4444

4545
} // namespace json_generators
4646
} // namespace app_helpers

apps/units/flexible_o_du/split_6/o_du_low/metrics/split6_flexible_o_du_low_metrics_consumers.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class split6_flexible_o_du_low_metrics_consumer_log : public app_services::metri
3939
bool verbose,
4040
std::chrono::nanoseconds symbol_duration) :
4141
pci_sector_map(std::move(pci_sector_map_)),
42-
odu_low_metrics_handler(log_chan, pci_sector_map, verbose),
42+
odu_low_metrics_handler(log_chan, verbose),
4343
ru_metrics_handler(log_chan, pci_sector_map, symbol_duration)
4444
{
4545
}
@@ -61,7 +61,7 @@ class split6_flexible_o_du_low_metrics_consumer_json : public app_services::metr
6161
std::vector<pci_t> pci_sector_map_,
6262
std::chrono::nanoseconds symbol_duration) :
6363
pci_sector_map(std::move(pci_sector_map_)),
64-
odu_low_metrics_handler(log_chan, pci_sector_map),
64+
odu_low_metrics_handler(log_chan),
6565
ru_metrics_handler(log_chan, pci_sector_map, symbol_duration)
6666
{
6767
srsran_assert(log_chan.enabled(), "JSON log channel is not enabled");

apps/units/flexible_o_du/split_7_2/helpers/ru_ofh_config_cli11_schema.cpp

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -410,40 +410,27 @@ static void configure_cli11_cell_affinity_args(CLI::App& app, ru_ofh_unit_cpu_af
410410
"Policy used for assigning CPU cores to the Radio Unit tasks");
411411
}
412412

413-
static void configure_cli11_txrx_affinity_args(CLI::App& app, os_sched_affinity_bitmask& mask)
414-
{
415-
add_option_function<std::string>(
416-
app,
417-
"--ru_txrx_cpus",
418-
[&mask](const std::string& value) { parse_affinity_mask(mask, value, "txrx_cpus"); },
419-
"Number of CPUs used for the Radio Unit tasks");
420-
}
421-
422413
static void configure_cli11_expert_execution_args(CLI::App& app, ru_ofh_unit_expert_execution_config& config)
423414
{
424415
// Affinities section.
425416
CLI::App* affinities_subcmd = add_subcommand(app, "affinities", "gNB CPU affinities configuration")->configurable();
417+
CLI::App* ofh_subcmd =
418+
add_subcommand(*affinities_subcmd, "ofh", "Open Fronthaul CPU affinities configuration")->configurable();
426419
add_option_function<std::string>(
427-
*affinities_subcmd,
420+
*ofh_subcmd,
428421
"--ru_timing_cpu",
429422
[&config](const std::string& value) { parse_affinity_mask(config.ru_timing_cpu, value, "ru_timing_cpu"); },
430423
"CPU used for timing in the Radio Unit");
431424

432425
// RU txrx affinity section.
433426
add_option_cell(
434-
*affinities_subcmd,
435-
"--ofh",
427+
*ofh_subcmd,
428+
"--txrx_cpus",
436429
[&config](const std::vector<std::string>& values) {
437430
config.txrx_affinities.resize(values.size());
438431

439432
for (unsigned i = 0, e = values.size(); i != e; ++i) {
440-
CLI::App subapp("RU tx-rx thread CPU affinities",
441-
"RU tx-rx thread CPU affinities config #" + std::to_string(i));
442-
subapp.config_formatter(create_yaml_config_parser());
443-
subapp.allow_config_extras();
444-
configure_cli11_txrx_affinity_args(subapp, config.txrx_affinities[i]);
445-
std::istringstream ss(values[i]);
446-
subapp.parse_from_stream(ss);
433+
parse_affinity_mask(config.txrx_affinities[i], values[i], "txrx_cpus");
447434
}
448435
},
449436
"Sets the CPU affinities configuration for RU cells tx-rx threads. Number of entries specified defines the "

apps/units/flexible_o_du/split_7_2/helpers/ru_ofh_config_yaml_writer.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,14 @@ static void fill_ru_ofh_log_section(YAML::Node node, const ru_ofh_unit_logger_co
3333

3434
static void fill_ru_ofh_expert_execution_section(YAML::Node node, const ru_ofh_unit_expert_execution_config& config)
3535
{
36-
{
37-
YAML::Node affinities_node = node["affinities"];
38-
affinities_node["ru_timing_cpu"] = fmt::format("{:,}", span<const size_t>(config.ru_timing_cpu.get_cpu_ids()));
39-
}
36+
YAML::Node affinities_node = node["affinities"];
37+
YAML::Node ofh_node = affinities_node["ofh"];
38+
ofh_node["timing_cpu"] = fmt::format("{:,}", span<const size_t>(config.ru_timing_cpu.get_cpu_ids()));
4039

4140
if (config.txrx_affinities.size() > 0) {
42-
YAML::Node affinities_node = node["affinities"];
43-
YAML::Node ofh_node = affinities_node["ofh"];
44-
while (config.txrx_affinities.size() > ofh_node.size()) {
45-
ofh_node.push_back(YAML::Node());
46-
}
47-
48-
unsigned index = 0;
49-
for (auto subnode : ofh_node) {
50-
const auto& mask = config.txrx_affinities[index];
51-
52-
subnode["ru_txrx_cpus"] = fmt::format("{:,}", span<const size_t>(mask.get_cpu_ids()));
53-
++index;
41+
YAML::Node txrx_node = ofh_node["txrx_cpus"];
42+
for (const auto& affinity : config.txrx_affinities) {
43+
txrx_node.push_back(fmt::format("{:,}", span<const size_t>(affinity.get_cpu_ids())));
5444
}
5545
}
5646

apps/units/flexible_o_du/split_8/helpers/ru_sdr_config_yaml_writer.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,21 @@ static void fill_ru_sdr_section(YAML::Node node, const ru_sdr_unit_config& confi
9191
node["sync"] = config.synch_source;
9292
node["otw_format"] = config.otw_format;
9393
if (config.time_alignment_calibration.has_value()) {
94-
node["time_alignment_calibration"] = config.time_alignment_calibration.value();
94+
node["time_alignment_calibration"] = *config.time_alignment_calibration;
95+
} else {
96+
node["time_alignment_calibration"] = "na";
97+
}
98+
if (config.start_time.has_value()) {
99+
::time_t tt = std::chrono::system_clock::to_time_t(*config.start_time);
100+
::tm utc_time;
101+
::gmtime_r(&tt, &utc_time);
102+
103+
char buffer[100];
104+
::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &utc_time);
105+
106+
node["start_time"] = buffer;
107+
} else {
108+
node["start_time"] = "na";
95109
}
96110

97111
{

0 commit comments

Comments
 (0)