writing L1/L2 stats to files rather than screen

This commit is contained in:
Raymond Knopp
2021-01-12 13:51:04 +01:00
parent 672ae1e3a2
commit 50c70bc316
9 changed files with 89 additions and 43 deletions
-21
View File
@@ -595,27 +595,6 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
CC_id = UE_PCCID(module_idP, UE_id);
UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]);
if (((frameP & 127) == 0) && (subframeP == 0)) {
LOG_I(MAC,"UE rnti %x : %s, PHR %d dB DL CQI %d PUSCH SNR %d (TPC accum %d) PUCCH SNR %d (TPC accum %d)\n",
rnti,
UE_scheduling_control->ul_out_of_sync == 0 ? "in synch" : "out of sync",
UE_info->UE_template[CC_id][UE_id].phr_info,
UE_scheduling_control->dl_cqi[CC_id],
(5 * UE_scheduling_control->pusch_snr[CC_id] - 640) / 10, UE_scheduling_control->pucch_tpc_accumulated[CC_id],
(5 * UE_scheduling_control->pucch1_snr[CC_id] - 640) / 10, UE_scheduling_control->pusch_tpc_accumulated[CC_id]);
LOG_I(MAC," ULSCH rounds %d/%d/%d/%d, DLSCH rounds %d/%d/%d/%d, ULSCH errors %d, DLSCH errors %d\n",
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[1],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[2],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[3],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[0],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[1],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[2],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[3],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_errors,
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_errors);
}
RC.eNB[module_idP][CC_id]->pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] = -63;
if (UE_id == UE_info->list.head) {
+2
View File
@@ -1433,6 +1433,8 @@ typedef struct eNB_MAC_INST_s {
int32_t puSch10xSnr;
int32_t puCch10xSnr;
pthread_t mac_stats_thread;
} eNB_MAC_INST;
/*
+46
View File
@@ -40,8 +40,51 @@
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
#include "common/ran_context.h"
#include "intertask_interface.h"
#include <pthread.h>
extern RAN_CONTEXT_t RC;
extern int oai_exit;
void *mac_stats_thread(void *param) {
eNB_MAC_INST *mac = (eNB_MAC_INST *)param;
FILE *fd;
UE_info_t *UE_info = &(mac->UE_info);
while (!oai_exit) {
sleep(1);
fd=fopen("MAC_stats.log","w+");
AssertFatal(fd!=NULL,"Cannot open MAC_stats.log\n");
for (int UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; UE_id++) {
if (UE_info->active[UE_id]) {
int rnti = UE_RNTI(mac->Mod_id, UE_id);
int CC_id = UE_PCCID(mac->Mod_id, UE_id);
UE_sched_ctrl_t *UE_scheduling_control = &(UE_info->UE_sched_ctrl[UE_id]);
fprintf(fd,"UE rnti %x : %s, PHR %d dB DL CQI %d PUSCH SNR %d (TPC accum %d) PUCCH SNR %d (TPC accum %d)\n",
rnti,
UE_scheduling_control->ul_out_of_sync == 0 ? "in synch" : "out of sync",
UE_info->UE_template[CC_id][UE_id].phr_info,
UE_scheduling_control->dl_cqi[CC_id],
(5 * UE_scheduling_control->pusch_snr[CC_id] - 640) / 10, UE_scheduling_control->pucch_tpc_accumulated[CC_id],
(5 * UE_scheduling_control->pucch1_snr[CC_id] - 640) / 10, UE_scheduling_control->pusch_tpc_accumulated[CC_id]);
fprintf(fd," ULSCH rounds %d/%d/%d/%d, DLSCH rounds %d/%d/%d/%d, ULSCH errors %d, DLSCH errors %d\n",
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[0],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[1],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[2],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_rounds[3],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[0],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[1],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[2],
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_rounds[3],
UE_info->eNB_UE_stats[CC_id][UE_id].ulsch_errors,
UE_info->eNB_UE_stats[CC_id][UE_id].dlsch_errors);
}
}
fclose(fd);
}
return(NULL);
}
void init_UE_info(UE_info_t *UE_info)
{
@@ -128,6 +171,9 @@ void mac_top_init_eNB(void)
pdcp_layer_init();
rrc_init_global_param();
for (i=0;i<RC.nb_macrlc_inst; i++) pthread_create(&mac[i]->mac_stats_thread,NULL,mac_stats_thread,(void*)mac[i]);
}
void mac_init_cell_params(int Mod_idP, int CC_idP)