From eaa83242a8de21ceac762a294b8e1dab7cfd1aed Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 21 May 2019 07:14:56 +0200 Subject: [PATCH 1/3] first try to add a function to the usrp_lib to set the thread priority --- targets/ARCH/COMMON/common_lib.c | 6 ++++-- targets/ARCH/COMMON/common_lib.h | 4 ++++ targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp | 5 +++++ targets/RT/USER/nr-ru.c | 1 + 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index bcfa08c7eb..c54ede53ec 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -98,7 +98,7 @@ typedef int(*devfunc_t)(openair0_device *, openair0_config_t *, eth_params_t *); /* look for the interface library and load it */ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * cfg, uint8_t flag) { - loader_shlibfunc_t shlib_fdesc[1]; + loader_shlibfunc_t shlib_fdesc[2]; int ret=0; char *libname; if (flag == RAU_LOCAL_RADIO_HEAD) { @@ -107,15 +107,17 @@ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_param else libname=OAI_RF_LIBNAME; shlib_fdesc[0].fname="device_init"; + shlib_fdesc[1].fname="uhd_set_thread_priority"; } else { libname=OAI_TP_LIBNAME; shlib_fdesc[0].fname="transport_init"; } - ret=load_module_shlib(libname,shlib_fdesc,1,NULL); + ret=load_module_shlib(libname,shlib_fdesc,2,NULL); if (ret < 0) { LOG_E(HW,"Library %s couldn't be loaded\n",libname); } else { ret=((devfunc_t)shlib_fdesc[0].fptr)(device,openair0_cfg,cfg); + uhd_set_thread_priority_fun = (set_prio_func_t)shlib_fdesc[1].fptr; } return ret; } diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index 5530a68f9b..d8e8cd5d6f 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -445,6 +445,10 @@ int openair0_set_rx_frequencies(openair0_device *device, openair0_config_t *open #define gettid() syscall(__NR_gettid) /*@}*/ + void uhd_set_thread_priority(void); + typedef void(*set_prio_func_t)(void); + set_prio_func_t uhd_set_thread_priority_fun; + #ifdef __cplusplus } #endif diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index 819a8d0c5b..c66364c41a 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -1461,5 +1461,10 @@ extern "C" { #endif return 0; } + + void uhd_set_thread_priority(void) { + uhd::set_thread_priority_safe(1.0); + } + } /*@}*/ diff --git a/targets/RT/USER/nr-ru.c b/targets/RT/USER/nr-ru.c index bad5adf9e6..e7566b673f 100644 --- a/targets/RT/USER/nr-ru.c +++ b/targets/RT/USER/nr-ru.c @@ -1285,6 +1285,7 @@ static void* ru_thread_tx( void* param ) { wait_on_condition(&proc->mutex_FH1,&proc->cond_FH1,&proc->instance_cnt_FH1,"ru_thread_tx"); + uhd_set_thread_priority_fun(); while (!oai_exit) { From 173f10e51d344852b04297a269ce13ec44ea6173 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Mon, 27 May 2019 18:05:03 +0200 Subject: [PATCH 2/3] adding uhd priority setting in ru_thread_tx --- executables/nr-gnb.c | 11 ------ executables/nr-ru.c | 6 +++ targets/ARCH/COMMON/common_lib.c | 38 +++++++++++++++---- targets/ARCH/COMMON/common_lib.h | 2 +- .../CONF/gnb.band78.tm1.106PRB.usrpx300.conf | 2 +- .../CONF/gnb.band78.tm1.217PRB.usrpx300.conf | 2 +- 6 files changed, 40 insertions(+), 21 deletions(-) diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c index 78d898cd74..2960131227 100644 --- a/executables/nr-gnb.c +++ b/executables/nr-gnb.c @@ -415,9 +415,6 @@ int wakeup_txfh(PHY_VARS_gNB *gNB,gNB_L1_rxtx_proc_t *proc,int frame_tx,int slot RU_proc_t *ru_proc; int waitret,ret; - struct timespec wait; - wait.tv_sec=0; - wait.tv_nsec=10000000L; @@ -484,10 +481,6 @@ int wakeup_tx(PHY_VARS_gNB *gNB,int frame_rx,int slot_rx,int frame_tx,int slot_t int ret; - struct timespec wait; - wait.tv_sec=0; - wait.tv_nsec=5000000L; - AssertFatal((ret = pthread_mutex_lock(&L1_proc_tx->mutex))==0,"mutex_lock returns %d\n",ret); @@ -524,7 +517,6 @@ int wakeup_rxtx(PHY_VARS_gNB *gNB,RU_t *ru) { RU_proc_t *ru_proc=&ru->proc; int ret; int i; - struct timespec wait; AssertFatal((ret=pthread_mutex_lock(&proc->mutex_RU))==0,"mutex_lock returns %d\n",ret); for (i=0;inum_RU;i++) { @@ -546,9 +538,6 @@ int wakeup_rxtx(PHY_VARS_gNB *gNB,RU_t *ru) { } - wait.tv_sec=0; - wait.tv_nsec=5000000L; - // wake up TX for subframe n+sl_ahead // lock the TX mutex and make sure the thread is ready AssertFatal((ret=pthread_mutex_lock(&L1_proc->mutex)) == 0,"mutex_lock returns %d\n", ret); diff --git a/executables/nr-ru.c b/executables/nr-ru.c index 6f173109cd..2510963eb0 100644 --- a/executables/nr-ru.c +++ b/executables/nr-ru.c @@ -1208,6 +1208,12 @@ static void *ru_thread_tx( void *param ) { int i = 0; int ret; + + if(ru->if_south == LOCAL_RF) + { + uhd_set_thread_prio(); + LOG_I(PHY,"set ru_thread_tx uhd priority"); + } wait_on_condition(&proc->mutex_FH1,&proc->cond_FH1,&proc->instance_cnt_FH1,"ru_thread_tx"); printf( "ru_thread_tx ready\n"); diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index c54ede53ec..058f9799e5 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -43,6 +43,8 @@ int set_device(openair0_device *device) { switch (device->type) { + +printf("/////////////HW device type %s\n",device->type); case EXMIMO_DEV: LOG_I(HW,"[%s] has loaded EXPRESS MIMO device.\n",((device->host_type == RAU_HOST) ? "RAU": "RRU")); @@ -95,34 +97,56 @@ int set_transport(openair0_device *device) { } typedef int(*devfunc_t)(openair0_device *, openair0_config_t *, eth_params_t *); +//loader_shlibfunc_t shlib_fdesc[2]; + /* look for the interface library and load it */ int load_lib(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * cfg, uint8_t flag) { - loader_shlibfunc_t shlib_fdesc[2]; + loader_shlibfunc_t shlib_fdesc[1]; int ret=0; char *libname; if (flag == RAU_LOCAL_RADIO_HEAD) { - if (getenv("RFSIMULATOR") != NULL) - libname="rfsimulator"; - else + if (getenv("RFSIMULATOR") != NULL) + libname="rfsimulator"; + else libname=OAI_RF_LIBNAME; shlib_fdesc[0].fname="device_init"; - shlib_fdesc[1].fname="uhd_set_thread_priority"; + //shlib_fdesc[1].fname="uhd_set_thread_priority"; } else { libname=OAI_TP_LIBNAME; shlib_fdesc[0].fname="transport_init"; } - ret=load_module_shlib(libname,shlib_fdesc,2,NULL); + ret=load_module_shlib(libname,shlib_fdesc,1,NULL); if (ret < 0) { LOG_E(HW,"Library %s couldn't be loaded\n",libname); } else { ret=((devfunc_t)shlib_fdesc[0].fptr)(device,openair0_cfg,cfg); - uhd_set_thread_priority_fun = (set_prio_func_t)shlib_fdesc[1].fptr; + //uhd_set_thread_priority_fun = (set_prio_func_t)shlib_fdesc[1].fptr; } return ret; } +void uhd_set_thread_prio(void) { + + loader_shlibfunc_t shlib_fdesc[1]; + int ret = 0; + + char *libname; + if (getenv("RFSIMULATOR") != NULL) + libname="rfsimulator"; + else + libname=OAI_RF_LIBNAME; + shlib_fdesc[0].fname="uhd_set_thread_priority"; + ret=load_module_shlib(libname,shlib_fdesc,1,NULL); + if (ret < 0) { + LOG_E(HW,"Library %s couldn't be loaded\n",libname); + } else { + (set_prio_func_t)shlib_fdesc[0].fptr(); + } + return ret; + +} int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cfg) { diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index d8e8cd5d6f..a50480888c 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -445,7 +445,7 @@ int openair0_set_rx_frequencies(openair0_device *device, openair0_config_t *open #define gettid() syscall(__NR_gettid) /*@}*/ - void uhd_set_thread_priority(void); + void uhd_set_thread_prio(void); typedef void(*set_prio_func_t)(void); set_prio_func_t uhd_set_thread_priority_fun; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf index be98106d1e..8b896fc58a 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpx300.conf @@ -254,7 +254,7 @@ RUs = ( max_pdschReferenceSignalPower = -27; max_rxgain = 114; eNB_instances = [0]; - sdr_addrs = "addr=192.168.30.2"; + sdr_addrs = "type=x300"; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf index 51910091f7..73f2214baf 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpx300.conf @@ -254,7 +254,7 @@ RUs = ( max_pdschReferenceSignalPower = -27; max_rxgain = 114; eNB_instances = [0]; - sdr_addrs = "addr=192.168.30.2"; + sdr_addrs = "type=x300"; } ); From bdc6aff4a006bba9f27fe025b63efa5507109c08 Mon Sep 17 00:00:00 2001 From: WANG Tsu-Han Date: Tue, 11 Jun 2019 16:43:17 +0200 Subject: [PATCH 3/3] adding tracer --- common/utils/LOG/vcd_signal_dumper.c | 1 + common/utils/LOG/vcd_signal_dumper.h | 1 + common/utils/T/T_defs.h | 2 +- common/utils/T/T_messages.txt | 5 +++++ openair1/SCHED_NR/phy_procedures_nr_gNB.c | 2 ++ targets/ARCH/COMMON/common_lib.c | 2 -- .../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf | 2 +- .../GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf | 2 +- 8 files changed, 12 insertions(+), 5 deletions(-) diff --git a/common/utils/LOG/vcd_signal_dumper.c b/common/utils/LOG/vcd_signal_dumper.c index 12971c3761..884e296c72 100644 --- a/common/utils/LOG/vcd_signal_dumper.c +++ b/common/utils/LOG/vcd_signal_dumper.c @@ -313,6 +313,7 @@ const char* eurecomFunctionsNames[] = { "phy_enb_prach_rx", "phy_ru_prach_rx", "phy_enb_pdcch_tx", + "phy_enb_common_tx", "phy_enb_rs_tx", "phy_ue_generate_prach", "phy_ue_ulsch_modulation", diff --git a/common/utils/LOG/vcd_signal_dumper.h b/common/utils/LOG/vcd_signal_dumper.h index 7b439d4dd5..d437880c1b 100644 --- a/common/utils/LOG/vcd_signal_dumper.h +++ b/common/utils/LOG/vcd_signal_dumper.h @@ -292,6 +292,7 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PRACH_RX, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_RU_PRACH_RX, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_PDCCH_TX, + VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_COMMON_TX, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GENERATE_PRACH, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_ULSCH_MODULATION, diff --git a/common/utils/T/T_defs.h b/common/utils/T/T_defs.h index 5300237178..f7ec8dfbe7 100644 --- a/common/utils/T/T_defs.h +++ b/common/utils/T/T_defs.h @@ -41,7 +41,7 @@ typedef struct { } T_cache_t; /* number of VCD functions (to be kept up to date! see in T_messages.txt) */ -#define VCD_NUM_FUNCTIONS 192//190 +#define VCD_NUM_FUNCTIONS 193//192//190 /* number of VCD variables (to be kept up to date! see in T_messages.txt) */ #define VCD_NUM_VARIABLES 136//128 diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index 10dc5fb07c..c5aae75826 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -2249,6 +2249,11 @@ ID = VCD_FUNCTION_PHY_ENB_PDCCH_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value VCD_NAME = phy_enb_pdcch_tx +ID = VCD_FUNCTION_PHY_ENB_COMMON_TX + DESC = VCD function PHY_ENB_COMMON_TX + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value + VCD_NAME = phy_enb_common_tx ID = VCD_FUNCTION_PHY_ENB_RS_TX DESC = VCD function PHY_ENB_RS_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index fd7ee6e5c9..32eeb6739c 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -149,11 +149,13 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB, memset(gNB->common_vars.txdataF[aa],0,fp->samples_per_slot_wCP*sizeof(int32_t)); } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_COMMON_TX,1); if (nfapi_mode == 0 || nfapi_mode == 1) { nr_common_signal_procedures(gNB,frame, slot); //if (frame == 9) //write_output("txdataF.m","txdataF",gNB->common_vars.txdataF[aa],fp->samples_per_frame_wCP, 1, 1); } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_COMMON_TX,0); num_dci = gNB->pdcch_vars.num_dci; num_pdsch_rnti = gNB->pdcch_vars.num_pdsch_rnti; diff --git a/targets/ARCH/COMMON/common_lib.c b/targets/ARCH/COMMON/common_lib.c index 058f9799e5..27fd632a65 100644 --- a/targets/ARCH/COMMON/common_lib.c +++ b/targets/ARCH/COMMON/common_lib.c @@ -44,8 +44,6 @@ int set_device(openair0_device *device) { switch (device->type) { -printf("/////////////HW device type %s\n",device->type); - case EXMIMO_DEV: LOG_I(HW,"[%s] has loaded EXPRESS MIMO device.\n",((device->host_type == RAU_HOST) ? "RAU": "RRU")); break; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf index f22abf3112..ad88a0b89f 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.106PRB.usrpn300.conf @@ -254,7 +254,7 @@ RUs = ( max_pdschReferenceSignalPower = -27; max_rxgain = 114; eNB_instances = [0]; - sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2,mgmt_addr=192.168.100.8,clock_source=external,time_source=external"; + sdr_addrs = "addr=192.168.10.2,second_addr=192.168.20.2,mgmt_addr=192.168.10.2,clock_source=external,time_source=external"; } ); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf index dbd937d61a..06c52e1aff 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/gnb.band78.tm1.217PRB.usrpn300.conf @@ -254,7 +254,7 @@ RUs = ( max_pdschReferenceSignalPower = -27; max_rxgain = 114; eNB_instances = [0]; - sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.100.8"; + sdr_addrs = "addr=192.168.10.2,mgmt_addr=192.168.10.2"; clock_src = "external"; } );