mirror of https://github.com/PentHertz/srsLTE.git
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:
parent
d7fae0b7a3
commit
64ee0ac2ef
|
@ -59,10 +59,14 @@ using srslte::tti_point;
|
||||||
uint32_t const seed = std::chrono::system_clock::now().time_since_epoch().count();
|
uint32_t const seed = std::chrono::system_clock::now().time_since_epoch().count();
|
||||||
|
|
||||||
struct ue_stats_t {
|
struct ue_stats_t {
|
||||||
uint64_t nof_dl_rbs = 0;
|
uint32_t nof_dl_rbs = 0;
|
||||||
uint64_t nof_ul_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;
|
std::map<uint16_t, ue_stats_t> ue_stats;
|
||||||
|
ue_stats_t ue_tot_stats;
|
||||||
|
|
||||||
/*******************
|
/*******************
|
||||||
* Logging *
|
* Logging *
|
||||||
|
@ -77,8 +81,18 @@ public:
|
||||||
void log_diagnostics() override
|
void log_diagnostics() override
|
||||||
{
|
{
|
||||||
info("UE stats:\n");
|
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) {
|
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 warnings: %u\n", warn_counter);
|
||||||
info("Number of assertion errors: %u\n", error_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
|
// 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) {
|
for (uint32_t i = 0; i < tti_info.ul_sched_result[CARRIER_IDX].nof_dci_elems; ++i) {
|
||||||
uint32_t L, RBstart;
|
const auto& pusch = tti_info.ul_sched_result[CARRIER_IDX].pusch[i];
|
||||||
srslte_ra_type2_from_riv(tti_info.ul_sched_result[CARRIER_IDX].pusch[i].dci.type2_alloc.riv,
|
uint32_t L, RBstart;
|
||||||
|
srslte_ra_type2_from_riv(pusch.dci.type2_alloc.riv,
|
||||||
&L,
|
&L,
|
||||||
&RBstart,
|
&RBstart,
|
||||||
sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb,
|
sched_cell_params[CARRIER_IDX].cfg.cell.nof_prb,
|
||||||
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
|
// 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);
|
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) {
|
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,
|
TESTASSERT(srsenb::extract_dl_prbmask(sched_cell_params[CARRIER_IDX].cfg.cell,
|
||||||
tti_info.dl_sched_result[CARRIER_IDX].data[i].dci,
|
tti_info.dl_sched_result[CARRIER_IDX].data[i].dci,
|
||||||
alloc_mask) == SRSLTE_SUCCESS);
|
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;
|
return SRSLTE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue