diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c index af8b077dea..2c3ca94393 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler.c @@ -241,7 +241,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frame, sub_frame_ } if ((slot == 0) && (frame & 127) == 0) { - char stats_output[16000] = {0}; + char stats_output[32656] = {0}; dump_mac_stats(gNB, stats_output, sizeof(stats_output), true); LOG_I(NR_MAC, "Frame.Slot %d.%d\n%s\n", frame, slot, stats_output); } diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index caef6d8822..20e8a6d624 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -875,6 +875,9 @@ static void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_ int average_agg_level = 4; // TODO find a better estimation int max_sched_ues = bw / (average_agg_level * NR_NB_REG_PER_CCE); + // FAPI cannot handle more than MAX_DCI_CORESET DCIs + max_sched_ues = min(max_sched_ues, MAX_DCI_CORESET); + /* proportional fair scheduling algorithm */ pf_dl(module_id, frame, diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c index 265d1e819b..378c5a1de6 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_primitives.c @@ -678,24 +678,24 @@ int get_mcs_from_bler(const NR_bler_options_t *bler_options, return old_mcs; // no update // last update is longer than x frames ago - const int dtx = (int)(stats->rounds[0] - bler_stats->rounds[0]); - const int dretx = (int)(stats->rounds[1] - bler_stats->rounds[1]); - const float bler_window = dtx > 0 ? (float) dretx / dtx : bler_stats->bler; + const int num_dl_sched = (int)(stats->rounds[0] - bler_stats->rounds[0]); + const int num_dl_retx = (int)(stats->rounds[1] - bler_stats->rounds[1]); + const float bler_window = num_dl_sched > 0 ? (float) num_dl_retx / num_dl_sched : bler_stats->bler; bler_stats->bler = BLER_FILTER * bler_stats->bler + (1 - BLER_FILTER) * bler_window; int new_mcs = old_mcs; - if (bler_stats->bler < bler_options->lower && old_mcs < max_mcs && dtx > 9) + if (bler_stats->bler < bler_options->lower && old_mcs < max_mcs && num_dl_sched > 3) new_mcs += 1; else if ((bler_stats->bler > bler_options->upper && old_mcs > 6) // above threshold - || (dtx <= 3 && old_mcs > 9)) // no activity + || (num_dl_sched <= 3 && old_mcs > 9)) // no activity new_mcs -= 1; // else we are within threshold boundaries bler_stats->last_frame = frame; bler_stats->mcs = new_mcs; memcpy(bler_stats->rounds, stats->rounds, sizeof(stats->rounds)); - LOG_D(MAC, "frame %4d MCS %d -> %d (dtx %d, dretx %d, BLER wnd %.3f avg %.6f)\n", - frame, old_mcs, new_mcs, dtx, dretx, bler_window, bler_stats->bler); + LOG_D(MAC, "frame %4d MCS %d -> %d (num_dl_sched %d, num_dl_retx %d, BLER wnd %.3f avg %.6f)\n", + frame, old_mcs, new_mcs, num_dl_sched, num_dl_retx, bler_window, bler_stats->bler); return new_mcs; } diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index dede9f606b..3ff19c131d 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -2035,6 +2035,9 @@ static bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_ int average_agg_level = 4; // TODO find a better estimation int max_sched_ues = bw / (average_agg_level * NR_NB_REG_PER_CCE); + // FAPI cannot handle more than MAX_DCI_CORESET DCIs + max_sched_ues = min(max_sched_ues, MAX_DCI_CORESET); + /* proportional fair scheduling algorithm */ pf_ul(module_id, frame, diff --git a/openair2/LAYER2/NR_MAC_gNB/main.c b/openair2/LAYER2/NR_MAC_gNB/main.c index 72689dd90d..320aa273b7 100644 --- a/openair2/LAYER2/NR_MAC_gNB/main.c +++ b/openair2/LAYER2/NR_MAC_gNB/main.c @@ -45,7 +45,7 @@ extern RAN_CONTEXT_t RC; -#define MACSTATSSTRLEN 16000 +#define MACSTATSSTRLEN 36256 void *nrmac_stats_thread(void *arg) {