New statistics were added in the random sched tester

- new stats allow to analyze the average bitrates of each user
- there is a new stat that computes the total of RBs allocated and total bitrate achieved by the scheduler
This commit is contained in:
Francisco 2020-11-27 16:53:15 +00:00 committed by Andre Puschmann
parent d7fae0b7a3
commit 64ee0ac2ef
1 changed files with 34 additions and 7 deletions

View File

@ -59,10 +59,14 @@ using srslte::tti_point;
uint32_t const seed = std::chrono::system_clock::now().time_since_epoch().count();
struct ue_stats_t {
uint64_t nof_dl_rbs = 0;
uint64_t nof_ul_rbs = 0;
uint32_t nof_dl_rbs = 0;
uint32_t nof_ul_rbs = 0;
uint64_t nof_dl_bytes = 0;
uint64_t nof_ul_bytes = 0;
uint32_t nof_ttis = 0;
};
std::map<uint16_t, ue_stats_t> ue_stats;
ue_stats_t ue_tot_stats;
/*******************
* Logging *
@ -77,8 +81,18 @@ public:
void log_diagnostics() override
{
info("UE stats:\n");
info("all: {DL/UL RBs: %" PRIu32 "/%" PRIu32 ", DL/UL bitrates: %0.2f/%0.2f Mbps}\n",
ue_tot_stats.nof_dl_rbs,
ue_tot_stats.nof_ul_rbs,
ue_tot_stats.nof_dl_bytes * 8 * 0.001 / ue_tot_stats.nof_ttis,
ue_tot_stats.nof_ul_bytes * 8 * 0.001 / ue_tot_stats.nof_ttis);
for (auto& e : ue_stats) {
info("0x%x: {DL RBs: %" PRIu64 ", UL RBs: %" PRIu64 "}\n", e.first, e.second.nof_dl_rbs, e.second.nof_ul_rbs);
info("0x%x: {DL/UL RBs: %" PRIu32 "/%" PRIu32 ", DL/UL bitrates: %0.2f/%0.2f Mbps}\n",
e.first,
e.second.nof_dl_rbs,
e.second.nof_ul_rbs,
e.second.nof_dl_bytes * 8 * 0.001 / e.second.nof_ttis,
e.second.nof_ul_bytes * 8 * 0.001 / e.second.nof_ttis);
}
info("Number of assertion warnings: %u\n", warn_counter);
info("Number of assertion errors: %u\n", error_counter);
@ -270,24 +284,37 @@ int sched_tester::update_ue_stats()
{
// update ue stats with number of allocated UL PRBs
for (uint32_t i = 0; i < tti_info.ul_sched_result[CARRIER_IDX].nof_dci_elems; ++i) {
uint32_t L, RBstart;
srslte_ra_type2_from_riv(tti_info.ul_sched_result[CARRIER_IDX].pusch[i].dci.type2_alloc.riv,
const auto& pusch = tti_info.ul_sched_result[CARRIER_IDX].pusch[i];
uint32_t L, RBstart;
srslte_ra_type2_from_riv(pusch.dci.type2_alloc.riv,
&L,
&RBstart,
sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb,
sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb);
ue_stats[tti_info.ul_sched_result[CARRIER_IDX].pusch[i].dci.rnti].nof_ul_rbs += L;
ue_stats[pusch.dci.rnti].nof_ul_rbs += L;
ue_stats[pusch.dci.rnti].nof_ul_bytes += pusch.tbs;
ue_tot_stats.nof_ul_rbs += L;
ue_tot_stats.nof_ul_bytes += pusch.tbs;
}
// update ue stats with number of DL RB allocations
srslte::bounded_bitset<100, true> alloc_mask(sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb);
for (uint32_t i = 0; i < tti_info.dl_sched_result[CARRIER_IDX].nof_data_elems; ++i) {
auto& data = tti_info.dl_sched_result[CARRIER_IDX].data[i];
TESTASSERT(srsenb::extract_dl_prbmask(sched_cell_params[CARRIER_IDX].cfg.cell,
tti_info.dl_sched_result[CARRIER_IDX].data[i].dci,
alloc_mask) == SRSLTE_SUCCESS);
ue_stats[tti_info.dl_sched_result[CARRIER_IDX].data[i].dci.rnti].nof_dl_rbs += alloc_mask.count();
ue_stats[data.dci.rnti].nof_dl_rbs += alloc_mask.count();
ue_stats[data.dci.rnti].nof_dl_bytes += data.tbs[0] + data.tbs[1];
ue_tot_stats.nof_dl_rbs += alloc_mask.count();
ue_tot_stats.nof_dl_bytes += data.tbs[0] + data.tbs[1];
}
for (auto& u : ue_db) {
ue_stats[u.first].nof_ttis++;
}
ue_tot_stats.nof_ttis++;
return SRSLTE_SUCCESS;
}