Skip to content

Commit 9d346d6

Browse files
frankistcodebot
authored andcommitted
sched: pass cell config to sched metrics handler
1 parent a211dce commit 9d346d6

File tree

9 files changed

+52
-42
lines changed

9 files changed

+52
-42
lines changed

lib/scheduler/config/sched_config_manager.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010

1111
#include "sched_config_manager.h"
12+
#include "../logging/scheduler_metrics_handler.h"
1213
#include "../logging/scheduler_metrics_ue_configurator.h"
1314
#include "srsran/scheduler/config/scheduler_cell_config_validator.h"
1415
#include "srsran/scheduler/config/scheduler_ue_config_validator.h"
@@ -57,16 +58,17 @@ void ue_config_delete_event::reset()
5758
}
5859
}
5960

60-
sched_config_manager::sched_config_manager(const scheduler_config& sched_cfg) :
61+
sched_config_manager::sched_config_manager(const scheduler_config& sched_cfg,
62+
scheduler_metrics_handler& metrics_handler_) :
6163
expert_params(sched_cfg.expert_params),
64+
metrics_handler(metrics_handler_),
6265
config_notifier(sched_cfg.config_notifier),
6366
logger(srslog::fetch_basic_logger("SCHED"))
6467
{
6568
std::fill(ue_to_cell_group_index.begin(), ue_to_cell_group_index.end(), INVALID_DU_CELL_GROUP_INDEX);
6669
}
6770

68-
const cell_configuration* sched_config_manager::add_cell(const sched_cell_configuration_request_message& msg,
69-
sched_metrics_ue_configurator& metrics_handler_)
71+
const cell_configuration* sched_config_manager::add_cell(const sched_cell_configuration_request_message& msg)
7072
{
7173
srsran_assert(msg.cell_index < MAX_NOF_DU_CELLS, "cell index={} is not valid", msg.cell_index);
7274
srsran_assert(not added_cells.contains(msg.cell_index), "cell={} already exists", msg.cell_index);
@@ -76,7 +78,9 @@ const cell_configuration* sched_config_manager::add_cell(const sched_cell_config
7678
srsran_assert(ret.has_value(), "Invalid cell configuration request message. Cause: {}", ret.error().c_str());
7779

7880
added_cells.emplace(msg.cell_index, std::make_unique<cell_configuration>(expert_params, msg));
79-
cell_metrics.emplace(msg.cell_index, &metrics_handler_);
81+
82+
cell_metrics_handler* cell_metrics = metrics_handler.add_cell(*added_cells[msg.cell_index]);
83+
srsran_assert(cell_metrics != nullptr, "Unable to create metrics handler");
8084

8185
return added_cells[msg.cell_index].get();
8286
}
@@ -189,17 +193,17 @@ void sched_config_manager::handle_ue_config_complete(du_ue_index_t ue_index, std
189193
if (next_cfg != nullptr) {
190194
// Creation/Reconfig succeeded.
191195

196+
cell_metrics_handler& cell_metrics = metrics_handler.at(next_cfg->pcell_common_cfg().cell_index);
192197
if (ue_cfg_list[ue_index] == nullptr) {
193198
// UE creation case.
194-
cell_metrics[next_cfg->pcell_common_cfg().cell_index]->handle_ue_creation(
195-
ue_index,
196-
next_cfg->crnti,
197-
next_cfg->pcell_common_cfg().pci,
198-
next_cfg->pcell_common_cfg().nof_dl_prbs,
199-
next_cfg->pcell_common_cfg().nof_slots_per_frame);
199+
cell_metrics.handle_ue_creation(ue_index,
200+
next_cfg->crnti,
201+
next_cfg->pcell_common_cfg().pci,
202+
next_cfg->pcell_common_cfg().nof_dl_prbs,
203+
next_cfg->pcell_common_cfg().nof_slots_per_frame);
200204
} else {
201205
// Reconfiguration case.
202-
cell_metrics[next_cfg->pcell_common_cfg().cell_index]->handle_ue_reconfiguration(ue_index);
206+
cell_metrics.handle_ue_reconfiguration(ue_index);
203207
}
204208

205209
// Stores new UE config and deletes old config.
@@ -227,7 +231,8 @@ void sched_config_manager::handle_ue_delete_complete(du_ue_index_t ue_index)
227231
ue_cfg_list[ue_index].reset();
228232

229233
// Remove UE from metrics.
230-
cell_metrics[pcell_idx]->handle_ue_deletion(ue_index);
234+
cell_metrics_handler& cell_metrics = metrics_handler.at(pcell_idx);
235+
cell_metrics.handle_ue_deletion(ue_index);
231236

232237
// Mark the UE as released.
233238
ue_to_cell_group_index[ue_index].store(INVALID_DU_CELL_GROUP_INDEX, std::memory_order_release);

lib/scheduler/config/sched_config_manager.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
namespace srsran {
1919

2020
class sched_config_manager;
21-
class sched_metrics_ue_configurator;
21+
class scheduler_metrics_handler;
2222

2323
/// Event to create/reconfigure a UE in the scheduler.
2424
class ue_config_update_event
@@ -98,10 +98,9 @@ class sched_ue_configuration_handler
9898
class sched_config_manager
9999
{
100100
public:
101-
sched_config_manager(const scheduler_config& sched_cfg_);
101+
sched_config_manager(const scheduler_config& sched_cfg_, scheduler_metrics_handler& metrics_handler_);
102102

103-
const cell_configuration* add_cell(const sched_cell_configuration_request_message& msg,
104-
sched_metrics_ue_configurator& metrics_handler_);
103+
const cell_configuration* add_cell(const sched_cell_configuration_request_message& msg);
105104

106105
ue_config_update_event add_ue(const sched_ue_creation_request_message& cfg_req);
107106

@@ -132,15 +131,13 @@ class sched_config_manager
132131
void handle_ue_delete_complete(du_ue_index_t ue_index);
133132

134133
const scheduler_expert_config expert_params;
134+
scheduler_metrics_handler& metrics_handler;
135135
sched_configuration_notifier& config_notifier;
136136
srslog::basic_logger& logger;
137137

138138
// List of common configs for the scheduler cells.
139139
cell_common_configuration_list added_cells;
140140

141-
// List of metrics handlers for each cell.
142-
slotted_id_table<du_cell_index_t, sched_metrics_ue_configurator*, MAX_NOF_DU_CELLS> cell_metrics;
143-
144141
std::array<std::unique_ptr<ue_configuration>, MAX_NOF_DU_UES> ue_cfg_list;
145142

146143
/// Mapping of UEs to DU Cell Groups.

lib/scheduler/logging/scheduler_metric_handler.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*
99
*/
1010

11+
#include "../config/cell_configuration.h"
1112
#include "scheduler_metrics_handler.h"
1213
#include "srsran/srslog/srslog.h"
1314

@@ -373,14 +374,14 @@ scheduler_metrics_handler::scheduler_metrics_handler(msecs
373374
{
374375
}
375376

376-
cell_metrics_handler* scheduler_metrics_handler::add_cell(du_cell_index_t cell_idx)
377+
cell_metrics_handler* scheduler_metrics_handler::add_cell(const cell_configuration& cell_cfg)
377378
{
378-
if (cells.contains(cell_idx)) {
379-
srslog::fetch_basic_logger("SCHED").warning("Cell={} already exists", cell_idx);
379+
if (cells.contains(cell_cfg.cell_index)) {
380+
srslog::fetch_basic_logger("SCHED").warning("Cell={} already exists", cell_cfg.cell_index);
380381
return nullptr;
381382
}
382383

383-
cells.emplace(cell_idx, report_period, notifier);
384+
cells.emplace(cell_cfg.cell_index, report_period, notifier);
384385

385-
return &cells[cell_idx];
386+
return &cells[cell_cfg.cell_index];
386387
}

lib/scheduler/logging/scheduler_metrics_handler.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
namespace srsran {
2222

23+
class cell_configuration;
24+
2325
///\brief Handler of scheduler slot metrics for a given cell.
2426
class cell_metrics_handler final : public harq_timeout_handler, public sched_metrics_ue_configurator
2527
{
@@ -167,7 +169,9 @@ class scheduler_metrics_handler
167169
/// \brief Creates a scheduler metrics handler. In case the metrics_report_period is zero, no metrics are reported.
168170
explicit scheduler_metrics_handler(msecs metrics_report_period, scheduler_metrics_notifier& notifier);
169171

170-
cell_metrics_handler* add_cell(du_cell_index_t cell_idx);
172+
cell_metrics_handler* add_cell(const cell_configuration& cell_cfg);
173+
174+
cell_metrics_handler& at(du_cell_index_t cell_idx) { return cells[cell_idx]; }
171175

172176
private:
173177
scheduler_metrics_notifier& notifier;

lib/scheduler/scheduler_impl.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,13 @@ scheduler_impl::scheduler_impl(const scheduler_config& sched_cfg_) :
1818
expert_params(sched_cfg_.expert_params),
1919
logger(srslog::fetch_basic_logger("SCHED")),
2020
metrics(expert_params.metrics_report_period, sched_cfg_.metrics_notifier),
21-
cfg_mng(sched_cfg_)
21+
cfg_mng(sched_cfg_, metrics)
2222
{
2323
}
2424

2525
bool scheduler_impl::handle_cell_configuration_request(const sched_cell_configuration_request_message& msg)
2626
{
27-
cell_metrics_handler* cell_metrics = metrics.add_cell(msg.cell_index);
28-
if (cell_metrics == nullptr) {
29-
return false;
30-
}
31-
32-
const cell_configuration* cell_cfg = cfg_mng.add_cell(msg, *cell_metrics);
27+
const cell_configuration* cell_cfg = cfg_mng.add_cell(msg);
3328
if (cell_cfg == nullptr) {
3429
return false;
3530
}
@@ -41,9 +36,9 @@ bool scheduler_impl::handle_cell_configuration_request(const sched_cell_configur
4136
}
4237

4338
// Create a new cell scheduler instance.
44-
cells.emplace(
45-
msg.cell_index,
46-
std::make_unique<cell_scheduler>(expert_params, msg, *cell_cfg, *groups[msg.cell_group_index], *cell_metrics));
39+
cells.emplace(msg.cell_index,
40+
std::make_unique<cell_scheduler>(
41+
expert_params, msg, *cell_cfg, *groups[msg.cell_group_index], metrics.at(msg.cell_index)));
4742

4843
return true;
4944
}

tests/unittests/scheduler/test_utils/config_generators.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ test_sched_config_manager::test_sched_config_manager(const cell_config_builder_p
5252
cfg_notifier(std::make_unique<dummy_sched_configuration_notifier>()),
5353
metric_notifier(std::make_unique<dummy_scheduler_ue_metrics_notifier>()),
5454
ue_metrics_configurator(std::make_unique<dummy_sched_metrics_ue_configurator>()),
55-
cfg_mng(scheduler_config{expert_cfg, *cfg_notifier, *metric_notifier})
55+
metrics_handler(std::chrono::milliseconds{1000}, *metric_notifier),
56+
cfg_mng(scheduler_config{expert_cfg, *cfg_notifier, *metric_notifier}, metrics_handler)
5657
{
5758
default_cell_req = test_helpers::make_default_sched_cell_configuration_request(builder_params);
5859
default_ue_req = test_helpers::create_default_sched_ue_creation_request(builder_params, {lcid_t::LCID_MIN_DRB});
@@ -62,7 +63,7 @@ test_sched_config_manager::~test_sched_config_manager() {}
6263

6364
const cell_configuration* test_sched_config_manager::add_cell(const sched_cell_configuration_request_message& msg)
6465
{
65-
return cfg_mng.add_cell(msg, *ue_metrics_configurator);
66+
return cfg_mng.add_cell(msg);
6667
}
6768

6869
const ue_configuration* test_sched_config_manager::add_ue(const sched_ue_creation_request_message& cfg_req)

tests/unittests/scheduler/test_utils/config_generators.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include "lib/du/du_high/du_manager/converters/scheduler_configuration_helpers.h"
1414
#include "lib/scheduler/config/sched_config_manager.h"
15+
#include "lib/scheduler/logging/scheduler_metrics_handler.h"
1516
#include "srsran/du/du_cell_config_helpers.h"
1617
#include "srsran/ran/duplex_mode.h"
1718
#include "srsran/ran/pucch/pucch_info.h"
@@ -24,6 +25,9 @@
2425
#include "srsran/support/test_utils.h"
2526

2627
namespace srsran {
28+
29+
class sched_metrics_ue_configurator;
30+
2731
namespace test_helpers {
2832

2933
inline sched_cell_configuration_request_message
@@ -341,6 +345,7 @@ class test_sched_config_manager
341345
std::unique_ptr<sched_configuration_notifier> cfg_notifier;
342346
std::unique_ptr<scheduler_metrics_notifier> metric_notifier;
343347
std::unique_ptr<sched_metrics_ue_configurator> ue_metrics_configurator;
348+
scheduler_metrics_handler metrics_handler;
344349

345350
sched_cell_configuration_request_message default_cell_req;
346351
sched_ue_creation_request_message default_ue_req;

tests/unittests/scheduler/ue_scheduling/fallback_scheduler_test.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include "lib/scheduler/common_scheduling/csi_rs_scheduler.h"
1212
#include "lib/scheduler/config/sched_config_manager.h"
13+
#include "lib/scheduler/logging/scheduler_metrics_handler.h"
1314
#include "lib/scheduler/logging/scheduler_result_logger.h"
1415
#include "lib/scheduler/pdcch_scheduling/pdcch_resource_allocator_impl.h"
1516
#include "lib/scheduler/pucch_scheduling/pucch_allocator_impl.h"
@@ -80,8 +81,9 @@ struct test_bench {
8081
scheduler_harq_timeout_dummy_handler harq_timeout_handler;
8182
scheduler_ue_metrics_dummy_configurator metrics_ue_handler;
8283
cell_config_builder_params builder_params;
84+
scheduler_metrics_handler metrics{std::chrono::milliseconds{0}, metrics_notif};
8385

84-
sched_config_manager cfg_mng{scheduler_config{sched_cfg, dummy_notif, metrics_notif}};
86+
sched_config_manager cfg_mng{scheduler_config{sched_cfg, dummy_notif, metrics_notif}, metrics};
8587
const cell_configuration& cell_cfg;
8688

8789
cell_resource_allocator res_grid{cell_cfg};
@@ -101,7 +103,7 @@ struct test_bench {
101103
const sched_cell_configuration_request_message& cell_req) :
102104
sched_cfg{sched_cfg_},
103105
builder_params{builder_params_},
104-
cell_cfg{*[&]() { return cfg_mng.add_cell(cell_req, metrics_ue_handler); }()},
106+
cell_cfg{*[&]() { return cfg_mng.add_cell(cell_req); }()},
105107
ue_alloc(expert_cfg, ue_db, srslog::fetch_basic_logger("SCHED", true)),
106108
fallback_sched(expert_cfg, cell_cfg, pdcch_sch, pucch_alloc, ue_db),
107109
csi_rs_sched(cell_cfg)

tests/unittests/scheduler/ue_scheduling/ue_grid_allocator_test.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ class ue_grid_allocator_tester : public ::testing::TestWithParam<duplex_mode>
3737
GetParam() == duplex_mode::FDD ? subcarrier_spacing::kHz15 : subcarrier_spacing::kHz30;
3838
cfg_builder_params.band = band_helper::get_band_from_dl_arfcn(cfg_builder_params.dl_f_ref_arfcn);
3939
cfg_builder_params.channel_bw_mhz = bs_channel_bandwidth::MHz20;
40-
auto* cfg = cfg_mng.add_cell(test_helpers::make_default_sched_cell_configuration_request(cfg_builder_params),
41-
metrics_ue_handler);
40+
auto* cfg = cfg_mng.add_cell(test_helpers::make_default_sched_cell_configuration_request(cfg_builder_params));
4241
srsran_assert(cfg != nullptr, "Cell configuration failed");
4342
return cfg;
4443
}()),
@@ -124,9 +123,10 @@ class ue_grid_allocator_tester : public ::testing::TestWithParam<duplex_mode>
124123
scheduler_ue_metrics_dummy_notifier metrics_notif;
125124
scheduler_ue_metrics_dummy_configurator metrics_ue_handler;
126125
scheduler_harq_timeout_dummy_handler harq_timeout_handler;
126+
scheduler_metrics_handler metrics{std::chrono::milliseconds{0}, metrics_notif};
127127

128128
cell_config_builder_params cfg_builder_params;
129-
sched_config_manager cfg_mng{scheduler_config{sched_cfg, mac_notif, metrics_notif}};
129+
sched_config_manager cfg_mng{scheduler_config{sched_cfg, mac_notif, metrics_notif}, metrics};
130130
const cell_configuration& cell_cfg;
131131

132132
cell_harq_manager cell_harqs{MAX_NOF_DU_UES,

0 commit comments

Comments
 (0)