Commit b3df605f authored by Robert Schmidt's avatar Robert Schmidt

Make upper/lower DL BLER targets configurable

parent 2f3dab63
...@@ -55,6 +55,8 @@ ...@@ -55,6 +55,8 @@
#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC "remote_s_portc" #define CONFIG_STRING_MACRLC_REMOTE_S_PORTC "remote_s_portc"
#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd" #define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd"
#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd" #define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd"
#define CONFIG_STRING_MACRLC_DL_BLER_TARGET_UPPER "dl_bler_target_upper"
#define CONFIG_STRING_MACRLC_DL_BLER_TARGET_LOWER "dl_bler_target_lower"
/*-------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------------------------------------------------------------------*/
...@@ -79,6 +81,8 @@ ...@@ -79,6 +81,8 @@
{CONFIG_STRING_MACRLC_REMOTE_S_PORTC, NULL, 0, uptr:NULL, defintval:50020, TYPE_UINT, 0}, \ {CONFIG_STRING_MACRLC_REMOTE_S_PORTC, NULL, 0, uptr:NULL, defintval:50020, TYPE_UINT, 0}, \
{CONFIG_STRING_MACRLC_LOCAL_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \ {CONFIG_STRING_MACRLC_LOCAL_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \
{CONFIG_STRING_MACRLC_REMOTE_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \ {CONFIG_STRING_MACRLC_REMOTE_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \
{CONFIG_STRING_MACRLC_DL_BLER_TARGET_UPPER, "Upper threshold of BLER to decrease DL MCS", 0, dblptr:NULL, defdblval:0.15, TYPE_DOUBLE, 0}, \
{CONFIG_STRING_MACRLC_DL_BLER_TARGET_LOWER, "Lower threshold of BLER to increase DL MCS", 0, dblptr:NULL, defdblval:0.05, TYPE_DOUBLE, 0}, \
} }
#define MACRLC_CC_IDX 0 #define MACRLC_CC_IDX 0
#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1 #define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1
...@@ -97,5 +101,7 @@ ...@@ -97,5 +101,7 @@
#define MACRLC_REMOTE_S_PORTC_IDX 14 #define MACRLC_REMOTE_S_PORTC_IDX 14
#define MACRLC_LOCAL_S_PORTD_IDX 15 #define MACRLC_LOCAL_S_PORTD_IDX 15
#define MACRLC_REMOTE_S_PORTD_IDX 16 #define MACRLC_REMOTE_S_PORTD_IDX 16
#define MACRLC_DL_BLER_TARGET_UPPER_IDX 17
#define MACRLC_DL_BLER_TARGET_LOWER_IDX 18
/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------------------------------------------------------------------------------*/
#endif #endif
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
//#include "L1_paramdef.h" //#include "L1_paramdef.h"
#include "L1_nr_paramdef.h" #include "L1_nr_paramdef.h"
#include "MACRLC_paramdef.h" #include "MACRLC_nr_paramdef.h"
#include "common/config/config_userapi.h" #include "common/config/config_userapi.h"
//#include "RRC_config_tools.h" //#include "RRC_config_tools.h"
#include "gnb_paramdef.h" #include "gnb_paramdef.h"
...@@ -667,6 +667,9 @@ void RCconfig_nr_macrlc() { ...@@ -667,6 +667,9 @@ void RCconfig_nr_macrlc() {
}else { // other midhaul }else { // other midhaul
AssertFatal(1==0,"MACRLC %d: %s unknown southbound midhaul\n",j,*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr)); AssertFatal(1==0,"MACRLC %d: %s unknown southbound midhaul\n",j,*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr));
} }
RC.nrmac[j]->dl_bler_target_upper = *(MacRLC_ParamList.paramarray[j][MACRLC_DL_BLER_TARGET_UPPER_IDX].dblptr);
RC.nrmac[j]->dl_bler_target_lower = *(MacRLC_ParamList.paramarray[j][MACRLC_DL_BLER_TARGET_LOWER_IDX].dblptr);
}// for (j=0;j<RC.nb_nr_macrlc_inst;j++) }// for (j=0;j<RC.nb_nr_macrlc_inst;j++)
}else {// MacRLC_ParamList.numelt > 0 }else {// MacRLC_ParamList.numelt > 0
AssertFatal (0,"No " CONFIG_STRING_MACRLC_LIST " configuration found"); AssertFatal (0,"No " CONFIG_STRING_MACRLC_LIST " configuration found");
......
...@@ -406,20 +406,19 @@ uint8_t getN_PRB_DMRS(NR_BWP_Downlink_t *bwp, int numDmrsCdmGrpsNoData) { ...@@ -406,20 +406,19 @@ uint8_t getN_PRB_DMRS(NR_BWP_Downlink_t *bwp, int numDmrsCdmGrpsNoData) {
} }
#define BLER_UPDATE_FRAME 10 #define BLER_UPDATE_FRAME 10
#define BLER_TARGET 0.10f
#define BLER_THRESHOLD 0.03f
#define BLER_FILTER 0.9f #define BLER_FILTER 0.9f
int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t slot, int UE_id) int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t slot, int UE_id)
{ {
const NR_ServingCellConfigCommon_t *scc = RC.nrmac[mod_id]->common_channels[CC_id].ServingCellConfigCommon; gNB_MAC_INST *nrmac = RC.nrmac[mod_id];
const NR_ServingCellConfigCommon_t *scc = nrmac->common_channels[CC_id].ServingCellConfigCommon;
const int n = nr_slots_per_frame[*scc->ssbSubcarrierSpacing]; const int n = nr_slots_per_frame[*scc->ssbSubcarrierSpacing];
NR_DL_bler_stats_t *bler_stats = &RC.nrmac[mod_id]->UE_info.UE_sched_ctrl[UE_id].dl_bler_stats; NR_DL_bler_stats_t *bler_stats = &nrmac->UE_info.UE_sched_ctrl[UE_id].dl_bler_stats;
/* first call: everything is zero. Initialize to sensible default */ /* first call: everything is zero. Initialize to sensible default */
if (bler_stats->last_frame_slot == 0 && bler_stats->mcs == 0) { if (bler_stats->last_frame_slot == 0 && bler_stats->mcs == 0) {
bler_stats->last_frame_slot = frame * n + slot; bler_stats->last_frame_slot = frame * n + slot;
bler_stats->mcs = 9; bler_stats->mcs = 9;
bler_stats->bler = BLER_THRESHOLD; bler_stats->bler = (nrmac->dl_bler_target_lower + nrmac->dl_bler_target_upper) / 2;
} }
const int now = frame * n + slot; const int now = frame * n + slot;
int diff = now - bler_stats->last_frame_slot; int diff = now - bler_stats->last_frame_slot;
...@@ -431,16 +430,16 @@ int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t ...@@ -431,16 +430,16 @@ int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t
return old_mcs; // no update return old_mcs; // no update
// last update is longer than x frames ago // last update is longer than x frames ago
const NR_mac_stats_t *stats = &RC.nrmac[mod_id]->UE_info.mac_stats[UE_id]; const NR_mac_stats_t *stats = &nrmac->UE_info.mac_stats[UE_id];
const int dtx = stats->dlsch_rounds[0] - bler_stats->dlsch_rounds[0]; const int dtx = stats->dlsch_rounds[0] - bler_stats->dlsch_rounds[0];
const int dretx = stats->dlsch_rounds[1] - bler_stats->dlsch_rounds[1]; const int dretx = stats->dlsch_rounds[1] - bler_stats->dlsch_rounds[1];
const float bler_window = dtx > 0 ? (float) dretx / dtx : bler_stats->bler; const float bler_window = dtx > 0 ? (float) dretx / dtx : bler_stats->bler;
bler_stats->bler = BLER_FILTER * bler_stats->bler + (1 - BLER_FILTER) * bler_window; bler_stats->bler = BLER_FILTER * bler_stats->bler + (1 - BLER_FILTER) * bler_window;
int new_mcs = old_mcs; int new_mcs = old_mcs;
if (bler_stats->bler < BLER_TARGET - BLER_THRESHOLD && old_mcs < 25 && dtx > 9) if (bler_stats->bler < nrmac->dl_bler_target_lower && old_mcs < 25 && dtx > 9)
new_mcs += 1; new_mcs += 1;
else if (bler_stats->bler > BLER_TARGET + BLER_THRESHOLD && old_mcs > 6) else if (bler_stats->bler > nrmac->dl_bler_target_upper && old_mcs > 6)
new_mcs -= 1; new_mcs -= 1;
// else we are within threshold boundaries // else we are within threshold boundaries
......
...@@ -739,6 +739,8 @@ typedef struct gNB_MAC_INST_s { ...@@ -739,6 +739,8 @@ typedef struct gNB_MAC_INST_s {
NR_CellGroupConfig_t *secondaryCellGroupCommon; NR_CellGroupConfig_t *secondaryCellGroupCommon;
NR_Type0_PDCCH_CSS_config_t type0_PDCCH_CSS_config[64]; NR_Type0_PDCCH_CSS_config_t type0_PDCCH_CSS_config[64];
double dl_bler_target_upper;
double dl_bler_target_lower;
} gNB_MAC_INST; } gNB_MAC_INST;
#endif /*__LAYER2_NR_MAC_GNB_H__ */ #endif /*__LAYER2_NR_MAC_GNB_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment