diff --git a/common/utils/telnetsrv/telnetsrv_cpumeasur_def.h b/common/utils/telnetsrv/telnetsrv_cpumeasur_def.h index a3f60a5becdb871eb65d6459d561bc0fe38a2c68..bbc9cb664d61781b323381c8f3cf78aa54b26c36 100644 --- a/common/utils/telnetsrv/telnetsrv_cpumeasur_def.h +++ b/common/utils/telnetsrv/telnetsrv_cpumeasur_def.h @@ -110,8 +110,6 @@ {"ulsch_ldpc_encoding_stats", &(UE->ulsch_ldpc_encoding_stats),0,1},\ {"ulsch_interleaving_stats", &(UE->ulsch_interleaving_stats),0,1},\ {"ulsch_multiplexing_stats", &(UE->ulsch_multiplexing_stats),0,1},\ - {"generic_stat", &(UE->generic_stat),0,1},\ - {"generic_stat_bis", &(UE->generic_stat_bis[0]),0,LTE_SLOTS_PER_SUBFRAME},\ {"ofdm_demod_stats", &(UE->ofdm_demod_stats),0,1},\ {"dlsch_rx_pdcch_stats", &(UE->dlsch_rx_pdcch_stats),0,1},\ {"rx_dft_stats", &(UE->rx_dft_stats),0,1},\ diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c index 37feb297eb14beb68831195360bb82ebadd264e7..08e641d127fcad55c53b1b7f3fca181496e5f271 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_demodulation.c @@ -406,8 +406,11 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, //--------------------- RBs extraction --------------------- //---------------------------------------------------------- const int n_rx = frame_parms->nb_antennas_rx; + time_stats_t meas = {0}; + const bool meas_enabled = cpumeas(CPUMEAS_GETSTATE); - start_meas(&ue->generic_stat_bis[slot]); + if (meas_enabled) + start_meas(&meas); { __attribute__((aligned(32))) c16_t rxdataF_ext[nbRx][rx_size_symbol]; memset(rxdataF_ext, 0, sizeof(rxdataF_ext)); @@ -429,14 +432,21 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, frame_parms, dlsch[0].dlsch_config.dlDmrsSymbPos, ue->chest_time); - stop_meas(&ue->generic_stat_bis[slot]); + if (meas_enabled) { + stop_meas(&meas); + LOG_D(PHY, + "[AbsSFN %u.%d] Slot%d Symbol %d: Pilot/Data extraction %5.2f \n", + frame, + nr_slot_rx, + slot, + symbol, + meas.p_time / (cpuf * 1000.0)); + } if (ue->phy_sim_pdsch_rxdataF_ext) for (unsigned char aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) { int offset = ((void *)rxdataF_ext[aarx] - (void *)rxdataF_ext) + symbol * rx_size_symbol; memcpy(ue->phy_sim_pdsch_rxdataF_ext + offset, rxdataF_ext, rx_size_symbol * sizeof(c16_t)); } - if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: Pilot/Data extraction %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); nb_re_pdsch = (pilots == 1) ? ((config_type == NFAPI_NR_DMRS_TYPE1) ? nb_rb_pdsch * (12 - 6 * dlsch[0].dlsch_config.n_dmrs_cdm_groups) : nb_rb_pdsch * (12 - 4 * dlsch[0].dlsch_config.n_dmrs_cdm_groups)) @@ -444,18 +454,26 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, //---------------------------------------------------------- //--------------------- Channel Scaling -------------------- //---------------------------------------------------------- - start_meas(&ue->generic_stat_bis[slot]); + if (meas_enabled) + start_meas(&meas); nr_dlsch_scale_channel(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, n_rx, symbol, pilots, nb_re_pdsch, nb_rb_pdsch); - stop_meas(&ue->generic_stat_bis[slot]); - - if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: Channel Scale %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); + if (meas_enabled) { + stop_meas(&meas); + LOG_D(PHY, + "[AbsSFN %u.%d] Slot%d Symbol %d: Channel Scale %5.2f \n", + frame, + nr_slot_rx, + slot, + symbol, + meas.p_time / (cpuf * 1000.0)); + } - //---------------------------------------------------------- - //--------------------- Channel Level Calc. ---------------- - //---------------------------------------------------------- - start_meas(&ue->generic_stat_bis[slot]); - if (first_symbol_flag==1) { + //---------------------------------------------------------- + //--------------------- Channel Level Calc. ---------------- + //---------------------------------------------------------- + if (meas_enabled) + start_meas(&meas); + if (first_symbol_flag == 1) { nr_dlsch_channel_level(rx_size_symbol, dl_ch_estimates_ext, frame_parms, nl, avg, symbol, nb_re_pdsch, nb_rb_pdsch); avgs = 0; for (aatx=0;aatx<nl;aatx++) @@ -476,45 +494,56 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, *log2_maxh = (log2_approx(avgs)/2) + 1; //LOG_I(PHY, "avgs Power per SC is %d lg2_maxh %d\n", avgs, log2_maxh); LOG_D(PHY, "[DLSCH] AbsSubframe %d.%d log2_maxh = %d (%d,%d)\n", frame % 1024, nr_slot_rx, *log2_maxh, avg[0], avgs); - } - stop_meas(&ue->generic_stat_bis[slot]); - + } + if (meas_enabled) { + stop_meas(&meas); + LOG_D(PHY, + "[AbsSFN %u.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n", + frame, + nr_slot_rx, + slot, + symbol, + first_symbol_flag, + meas.p_time / (cpuf * 1000.0)); + } #if T_TRACER - T(T_UE_PHY_PDSCH_ENERGY, T_INT(gNB_id), T_INT(0), T_INT(frame%1024), T_INT(nr_slot_rx), - T_INT(avg[0]), T_INT(avg[1]), T_INT(avg[2]), T_INT(avg[3])); + T(T_UE_PHY_PDSCH_ENERGY, + T_INT(gNB_id), + T_INT(0), + T_INT(frame % 1024), + T_INT(nr_slot_rx), + T_INT(avg[0]), + T_INT(avg[1]), + T_INT(avg[2]), + T_INT(avg[3])); #endif - if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, - "[AbsSFN %u.%d] Slot%d Symbol %d first_symbol_flag %d: Channel Level %5.2f \n", - frame, nr_slot_rx, slot, symbol, first_symbol_flag, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); - - //---------------------------------------------------------- - //--------------------- channel compensation --------------- - //---------------------------------------------------------- - // Disable correlation measurement for optimizing UE - start_meas(&ue->generic_stat_bis[slot]); - nr_dlsch_channel_compensation(rx_size_symbol, - nbRx, - rxdataF_ext, - dl_ch_estimates_ext, - dl_ch_mag, - dl_ch_magb, - dl_ch_magr, - rxdataF_comp, - NULL, - frame_parms, - nl, - symbol, - nb_re_pdsch, - first_symbol_flag, - dlsch[0].dlsch_config.qamModOrder, - nb_rb_pdsch, - *log2_maxh, - measurements); // log2_maxh+I0_shift - stop_meas(&ue->generic_stat_bis[slot]); - } - if (cpumeas(CPUMEAS_GETSTATE)) + //---------------------------------------------------------- + //--------------------- channel compensation --------------- + //---------------------------------------------------------- + // Disable correlation measurement for optimizing UE + if (meas_enabled) + start_meas(&meas); + nr_dlsch_channel_compensation(rx_size_symbol, + nbRx, + rxdataF_ext, + dl_ch_estimates_ext, + dl_ch_mag, + dl_ch_magb, + dl_ch_magr, + rxdataF_comp, + NULL, + frame_parms, + nl, + symbol, + nb_re_pdsch, + first_symbol_flag, + dlsch[0].dlsch_config.qamModOrder, + nb_rb_pdsch, + *log2_maxh, + measurements); // log2_maxh+I0_shift + if (meas_enabled) { + stop_meas(&meas); LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d log2_maxh %d Channel Comp %5.2f \n", frame, @@ -522,22 +551,54 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, slot, symbol, *log2_maxh, - ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); + meas.p_time / (cpuf * 1000.0)); + } + } - start_meas(&ue->generic_stat_bis[slot]); + if (meas_enabled) + start_meas(&meas); if (n_rx > 1) { - nr_dlsch_detection_mrc(rx_size_symbol, nl, n_rx, rxdataF_comp, NULL, dl_ch_mag, dl_ch_magb, dl_ch_magr, symbol, nb_rb_pdsch, nb_re_pdsch); - if (nl >= 2)//Apply zero forcing for 2, 3, and 4 Tx layers - nr_zero_forcing_rx( - rx_size_symbol, n_rx, nl, rxdataF_comp, dl_ch_mag, dl_ch_magb, dl_ch_magr, dl_ch_estimates_ext, nb_rb_pdsch, dlsch[0].dlsch_config.qamModOrder, *log2_maxh, symbol, nb_re_pdsch); + nr_dlsch_detection_mrc(rx_size_symbol, + nl, + n_rx, + rxdataF_comp, + NULL, + dl_ch_mag, + dl_ch_magb, + dl_ch_magr, + symbol, + nb_rb_pdsch, + nb_re_pdsch); + if (nl >= 2) // Apply zero forcing for 2, 3, and 4 Tx layers + nr_zero_forcing_rx(rx_size_symbol, + n_rx, + nl, + rxdataF_comp, + dl_ch_mag, + dl_ch_magb, + dl_ch_magr, + dl_ch_estimates_ext, + nb_rb_pdsch, + dlsch[0].dlsch_config.qamModOrder, + *log2_maxh, + symbol, + nb_re_pdsch); } - stop_meas(&ue->generic_stat_bis[slot]); - if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: Channel Combine and zero forcing %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); + if (meas_enabled) { + stop_meas(&meas); + LOG_D(PHY, + "[AbsSFN %u.%d] Slot%d Symbol %d: Channel Combine and zero forcing %5.2f \n", + frame, + nr_slot_rx, + slot, + symbol, + meas.p_time / (cpuf * 1000.0)); + } - start_meas(&ue->generic_stat_bis[slot]); + if (meas_enabled) + start_meas(&meas); /* Store the valid DL RE's */ dl_valid_re[symbol-1] = nb_re_pdsch; @@ -652,9 +713,16 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, #endif } - stop_meas(&ue->generic_stat_bis[slot]); - if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, "[AbsSFN %u.%d] Slot%d Symbol %d: LLR Computation %5.2f \n", frame, nr_slot_rx, slot, symbol, ue->generic_stat_bis[slot].p_time / (cpuf * 1000.0)); + if (meas_enabled) { + stop_meas(&meas); + LOG_D(PHY, + "[AbsSFN %u.%d] Slot%d Symbol %d: LLR Computation %5.2f \n", + frame, + nr_slot_rx, + slot, + symbol, + meas.p_time / (cpuf * 1000.0)); + } #if T_TRACER T(T_UE_PHY_PDSCH_IQ, diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index 97ff191d65c7e5c8fc7c728814a633b374a94118..f9934348c7f5c583dd4ba7e83a067211d8e8cf37 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -592,8 +592,6 @@ typedef struct { time_stats_t ulsch_interleaving_stats; time_stats_t ulsch_multiplexing_stats; - time_stats_t generic_stat; - time_stats_t generic_stat_bis[LTE_SLOTS_PER_SUBFRAME]; time_stats_t ue_front_end_stat; time_stats_t ue_front_end_per_slot_stat[LTE_SLOTS_PER_SUBFRAME]; time_stats_t pdcch_procedures_stat; diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index e53a788ffab598fff5638e9fa381f1eef09cc0ae..6831c7f4753a9a4bcf86b92da1b44b949df236da 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -1019,7 +1019,8 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, int gNB_id = proc->gNB_id; NR_UE_DLSCH_t *dlsch = &phy_data->dlsch[0]; - start_meas(&ue->generic_stat); + time_stats_t meas = {0}; + start_meas(&meas); // do procedures for C-RNTI int ret_pdsch = 0; @@ -1131,7 +1132,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, ue->csirs_vars[gNB_id]->active = 0; } - start_meas(&ue->generic_stat); + start_meas(&meas); if (nr_slot_rx==9) { if (frame_rx % 10 == 0) { @@ -1157,9 +1158,9 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, } - stop_meas(&ue->generic_stat); + stop_meas(&meas); if (cpumeas(CPUMEAS_GETSTATE)) - LOG_D(PHY, "after ldpc decode until end of Rx %5.2f \n", ue->generic_stat.p_time / (cpuf * 1000.0)); + LOG_D(PHY, "after ldpc decode until end of Rx %5.2f \n", meas.p_time / (cpuf * 1000.0)); #ifdef EMOS phy_procedures_emos_UE_RX(ue,slot,gNB_id);