feat(tstats): split PDSCH task preparation timer

This commit is contained in:
Ilhan Ghauri
2026-05-20 09:23:14 +02:00
parent 6ef6a533b5
commit 49517a2ae4
3 changed files with 81 additions and 12 deletions

View File

@@ -131,13 +131,13 @@ static void tx_func(processingData_L1tx_t *info)
frame_tx,
slot_tx,
1);
if (tx_slot_type == NR_DOWNLINK_SLOT) {
stop_meas(&info->gNB->gnb_tx_procedures_stats);
}
PHY_VARS_gNB *gNB = info->gNB;
processingData_RU_t syncMsgRU;
syncMsgRU.frame_tx = frame_tx;
@@ -158,7 +158,7 @@ static void tx_func(processingData_L1tx_t *info)
}
}
void *L1_rx_thread(void *arg)
void *L1_rx_thread(void *arg)
{
PHY_VARS_gNB *gNB = (PHY_VARS_gNB*)arg;
@@ -274,6 +274,7 @@ static size_t dump_L1_meas_stats(PHY_VARS_gNB *gNB, RU_t *ru, char *output, size
NULL,
output,
end - output);
output += print_meas_log(&gNB->ru_tx_func_stats,
"L1 RU TX function",
NULL,
@@ -298,6 +299,24 @@ static size_t dump_L1_meas_stats(PHY_VARS_gNB *gNB, RU_t *ru, char *output, size
NULL,
output,
end - output);
output += print_meas_log(&gNB->dlsch_pdsch_task_setup_stats,
"PDSCH task setup",
NULL,
NULL,
output,
end - output);
output += print_meas_log(&gNB->dlsch_pdsch_task_push_stats,
"PDSCH task push",
NULL,
NULL,
output,
end - output);
output += print_meas_log(&gNB->dlsch_pdsch_direct_proc_stats,
"PDSCH direct processing",
NULL,
NULL,
output,
end - output);
output += print_meas_log(&gNB->dlsch_pdsch_task_wait_stats,
"PDSCH task wait",
NULL,
@@ -378,7 +397,7 @@ static size_t dump_L1_meas_stats(PHY_VARS_gNB *gNB, RU_t *ru, char *output, size
reset_meas(&gNB->l1_tx_proc);
reset_meas(&gNB->l1_rx_proc);
reset_meas(&gNB->phy_proc_tx);
reset_meas(&gNB->gnb_tx_procedures_stats);
reset_meas(&gNB->ru_tx_func_stats);
@@ -398,8 +417,12 @@ static size_t dump_L1_meas_stats(PHY_VARS_gNB *gNB, RU_t *ru, char *output, size
reset_meas(&gNB->dlsch_resource_mapping_stats);
reset_meas(&gNB->dlsch_pdsch_generation_stats);
reset_meas(&gNB->dlsch_pdsch_task_prep_stats);
reset_meas(&gNB->dlsch_pdsch_task_setup_stats);
reset_meas(&gNB->dlsch_pdsch_task_push_stats);
reset_meas(&gNB->dlsch_pdsch_direct_proc_stats);
reset_meas(&gNB->dlsch_pdsch_task_wait_stats);
reset_meas(&gNB->dlsch_pdsch_task_merge_stats);
reset_meas(&gNB->phy_proc_rx);
reset_meas(&gNB->ulsch_decoding_stats);
reset_meas(&gNB->ts_deinterleave);
@@ -467,9 +490,14 @@ void *nrL1_stats_thread(void *param) {
init_sorted_list_meas(&gNB->dlsch_scrambling_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_modulation_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_pdsch_generation_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_pdsch_task_prep_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_pdsch_task_setup_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_pdsch_task_push_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_pdsch_direct_proc_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_pdsch_task_wait_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->dlsch_pdsch_task_merge_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->phy_proc_rx, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->ulsch_decoding_stats, SORTED_LIST_SIZE);
init_sorted_list_meas(&gNB->ts_deinterleave, SORTED_LIST_SIZE);
@@ -515,9 +543,14 @@ void *nrL1_stats_thread(void *param) {
reset_meas(&gNB->dlsch_scrambling_stats);
reset_meas(&gNB->dlsch_modulation_stats);
reset_meas(&gNB->dlsch_pdsch_generation_stats);
reset_meas(&gNB->dlsch_pdsch_task_prep_stats);
reset_meas(&gNB->dlsch_pdsch_task_setup_stats);
reset_meas(&gNB->dlsch_pdsch_task_push_stats);
reset_meas(&gNB->dlsch_pdsch_direct_proc_stats);
reset_meas(&gNB->dlsch_pdsch_task_wait_stats);
reset_meas(&gNB->dlsch_pdsch_task_merge_stats);
reset_meas(&gNB->phy_proc_rx);
reset_meas(&gNB->ulsch_decoding_stats);
reset_meas(&gNB->ts_deinterleave);
@@ -578,9 +611,14 @@ void *nrL1_stats_thread(void *param) {
free_sorted_list_meas(&gNB->dlsch_scrambling_stats);
free_sorted_list_meas(&gNB->dlsch_modulation_stats);
free_sorted_list_meas(&gNB->dlsch_pdsch_generation_stats);
free_sorted_list_meas(&gNB->dlsch_pdsch_task_prep_stats);
free_sorted_list_meas(&gNB->dlsch_pdsch_task_setup_stats);
free_sorted_list_meas(&gNB->dlsch_pdsch_task_push_stats);
free_sorted_list_meas(&gNB->dlsch_pdsch_direct_proc_stats);
free_sorted_list_meas(&gNB->dlsch_pdsch_task_wait_stats);
free_sorted_list_meas(&gNB->dlsch_pdsch_task_merge_stats);
free_sorted_list_meas(&gNB->phy_proc_rx);
free_sorted_list_meas(&gNB->ulsch_decoding_stats);
free_sorted_list_meas(&gNB->ts_deinterleave);

View File

@@ -832,9 +832,14 @@ static int do_one_dlsch(unsigned char *input_ptr, PHY_VARS_gNB *gNB, NR_gNB_DLSC
int sz_arr = 0;
unsigned int re_beginning_of_symbol = 0;
int res = 0;
for (int l_symbol = rel15->StartSymbolIndex; l_symbol < rel15->StartSymbolIndex + rel15->NrOfSymbols;
l_symbol += num_pdsch_symbols_per_task) {
for (int l_symbol = rel15->StartSymbolIndex; l_symbol < rel15->StartSymbolIndex + rel15->NrOfSymbols; l_symbol += num_pdsch_symbols_per_task) {
pdschSymbolProc_t *rdata = &arr[sz_arr];
if (slot_type == NR_DOWNLINK_SLOT) {
start_meas(&gNB->dlsch_pdsch_task_setup_stats);
}
rdata->ans = &ans;
++sz_arr;
@@ -867,11 +872,33 @@ static int do_one_dlsch(unsigned char *input_ptr, PHY_VARS_gNB *gNB, NR_gNB_DLSC
reset_meas(&rdata->dlsch_precoding_stats);
for (int l = 0; l < rel15->nrOfLayers; l++)
rdata->tx_layers[l] = tx_layers[l];
if (slot_type == NR_DOWNLINK_SLOT) {
stop_meas(&gNB->dlsch_pdsch_task_setup_stats);
}
if (l_symbol < rel15->StartSymbolIndex + rel15->NrOfSymbols - num_pdsch_symbols_per_task) {
task_t t = {.func = &nr_pdsch_symbol_processing, .args = rdata};
if (slot_type == NR_DOWNLINK_SLOT) {
start_meas(&gNB->dlsch_pdsch_task_push_stats);
}
pushTpool(&gNB->threadPool, t);
if (slot_type == NR_DOWNLINK_SLOT) {
stop_meas(&gNB->dlsch_pdsch_task_push_stats);
}
} else {
if (slot_type == NR_DOWNLINK_SLOT) {
start_meas(&gNB->dlsch_pdsch_direct_proc_stats);
}
nr_pdsch_symbol_processing(rdata);
if (slot_type == NR_DOWNLINK_SLOT) {
stop_meas(&gNB->dlsch_pdsch_direct_proc_stats);
}
}
}
@@ -891,7 +918,7 @@ static int do_one_dlsch(unsigned char *input_ptr, PHY_VARS_gNB *gNB, NR_gNB_DLSC
merge_meas(&gNB->dlsch_resource_mapping_stats, &arr[i].dlsch_resource_mapping_stats);
merge_meas(&gNB->dlsch_precoding_stats, &arr[i].dlsch_precoding_stats);
}
if (slot_type == NR_DOWNLINK_SLOT) {
stop_meas(&gNB->dlsch_pdsch_task_merge_stats);
}

View File

@@ -271,7 +271,7 @@ typedef struct {
int16_t *llr;
#ifdef ENABLE_CUDA
/// \brief llr values link to device memory
int16_t* llr_dev;
int16_t* llr_dev;
#endif
// PTRS symbol index, to be updated every PTRS symbol within a slot.
uint8_t ptrs_symbol_index;
@@ -467,15 +467,19 @@ typedef struct PHY_VARS_gNB_s {
time_stats_t dlsch_resource_mapping_stats;
time_stats_t dlsch_precoding_stats;
time_stats_t dlsch_pdsch_task_prep_stats;
time_stats_t dlsch_pdsch_task_wait_stats;
time_stats_t dlsch_pdsch_task_wait_stats;
time_stats_t dlsch_pdsch_task_merge_stats;
time_stats_t dlsch_pdsch_task_setup_stats;
time_stats_t dlsch_pdsch_task_push_stats;
time_stats_t dlsch_pdsch_direct_proc_stats;
time_stats_t tinput;
time_stats_t tinput_memcpy;
time_stats_t tprep;
time_stats_t tparity;
time_stats_t toutput;
time_stats_t tconcat;
time_stats_t dlsch_rate_matching_stats;
time_stats_t dlsch_interleaving_stats;
time_stats_t dlsch_segmentation_stats;
@@ -551,7 +555,7 @@ typedef struct LDPCDecode_s {
NR_UL_gNB_HARQ_t *ulsch_harq;
t_nrLDPC_dec_params decoderParms;
NR_gNB_ULSCH_t *ulsch;
int16_t* ulsch_llr;
int16_t* ulsch_llr;
int ulsch_id;
int harq_pid;
int rv_index;