From ee04caab8a50890f04971d545a637d57b57110e1 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Fri, 31 Aug 2018 12:58:49 +0200 Subject: [PATCH 01/11] replacing judgment from get_nprocs() and worker flags by paralle_stage and worker_stage --- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 39 ++++++++++++------ openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 4 +- openair1/PHY/defs_eNB.h | 6 +++ targets/RT/USER/lte-enb.c | 25 ++++++------ targets/RT/USER/lte-ru.c | 29 ++++++------- targets/RT/USER/lte-softmodem.c | 45 ++++++++++++++++++++- targets/RT/USER/lte-softmodem.h | 10 +++-- 7 files changed, 112 insertions(+), 46 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index a766bb8202..045b4349a0 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -58,7 +58,6 @@ uint64_t deadline, uint64_t period);*/ -extern int codingw; void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) { @@ -615,8 +614,10 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, } } - if(C >= 8 && get_nprocs()>=16 && codingw)//one main three worker + if(get_thread_worker_stage()) { + if(C >= 8)//one main three worker + { encoding_return = dlsch_encoding_2threads(eNB, a, @@ -632,9 +633,9 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, te_wakeup_stats1, i_stats, 3); - } - else if(C >= 6 && get_nprocs()>=8 && codingw)//one main two worker - { + } + else if(C >= 6)//one main two worker + { encoding_return = dlsch_encoding_2threads(eNB, a, @@ -650,9 +651,9 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, te_wakeup_stats1, i_stats, 2); - } - else if(C >= 4 && get_nprocs()>=4 && codingw)//one main one worker - { + } + else if(C >= 4)//one main one worker + { encoding_return = dlsch_encoding_2threads(eNB, a, @@ -668,9 +669,9 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, te_wakeup_stats1, i_stats, 1); - } - else - { + } + else + { encoding_return = dlsch_encoding(eNB, a, @@ -681,7 +682,21 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, rm_stats, te_stats, i_stats); - } + } + } + else + { + encoding_return = + dlsch_encoding(eNB, + a, + num_pdcch_symbols, + dlsch, + frame, + subframe, + rm_stats, + te_stats, + i_stats); + } return encoding_return; } diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 851bcfff5a..ac928cdbdd 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -45,7 +45,7 @@ #include "targets/RT/USER/rt_wrapper.h" #include "transport_proto.h" -extern int codingw; +extern uint8_t get_thread_worker_stage(void); void free_eNB_ulsch(LTE_eNB_ULSCH_t *ulsch) { @@ -723,7 +723,7 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) int ulsch_decoding_data_all(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) { int ret = 0; - /*if(codingw) + /*if(get_thread_worker_stage()) { ret = ulsch_decoding_data_2thread(eNB,UE_id,harq_pid,llr8_flag); } diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h index c58fffe0ef..cb30900f7b 100644 --- a/openair1/PHY/defs_eNB.h +++ b/openair1/PHY/defs_eNB.h @@ -888,6 +888,12 @@ typedef struct { int prach_I0; } PHY_MEASUREMENTS_eNB; +typedef struct THREAD_STRUCT_s { + uint8_t paralle_stage; + uint8_t worker_stage; + int core_number; +} THREAD_STRUCT; + /// Top-level PHY Data Structure for eNB typedef struct PHY_VARS_eNB_s { diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index c8c35cf2e8..8617c82cd6 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -153,7 +153,8 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe); #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) void wakeup_prach_eNB_br(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe); #endif -extern int codingw; +extern uint8_t get_thread_paralle_stage(void); +extern uint8_t get_thread_worker_stage(void); extern uint8_t nfapi_mode; extern void oai_subframe_ind(uint16_t sfn, uint16_t sf); @@ -225,7 +226,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 1 ); - if(!eNB->single_thread_flag && get_nprocs() >= 8){ + if(get_thread_paralle_stage() == 2){ if(wait_on_condition(&proc[1].mutex_rxtx,&proc[1].cond_rxtx,&proc[1].pipe_ready,"wakeup_tx")<0) { LOG_E(PHY,"Frame %d, subframe %d: TX1 not ready\n",proc[1].frame_rx,proc[1].subframe_rx); return(-1); @@ -247,7 +248,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam /* CONFLICT RESOLUTION: BEGIN */ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 ); if(oai_exit) return(-1); - if(eNB->single_thread_flag || get_nprocs() <= 4){ + if(get_thread_paralle_stage() == 0){ #ifndef PHY_TX_THREAD phy_procedures_eNB_TX(eNB, proc, 1); #endif @@ -423,8 +424,8 @@ static void* eNB_thread_rxtx( void* param ) { } pthread_mutex_unlock( &proc->mutex_rxtx ); if (nfapi_mode!=2){ - if(get_nprocs() >= 8) wakeup_tx(eNB,eNB->proc.ru_proc); - else + if(get_thread_paralle_stage() == 2) wakeup_tx(eNB,eNB->proc.ru_proc); + else if(get_thread_paralle_stage() == 1) { phy_procedures_eNB_TX(eNB, proc, 1); wakeup_txfh(proc,eNB->proc.ru_proc); @@ -883,7 +884,7 @@ static void* process_stats_thread(void* param) { void init_eNB_proc(int inst) { - int i=0; + /*int i=0;*/ int CC_id; PHY_VARS_eNB *eNB; eNB_proc_t *proc; @@ -955,7 +956,7 @@ void init_eNB_proc(int inst) { // attr_te = &proc->attr_te; #endif - if(get_nprocs() > 2 && codingw) + if(get_thread_worker_stage()) { init_te_thread(eNB); init_td_thread(eNB); @@ -964,7 +965,7 @@ void init_eNB_proc(int inst) { LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag); - if (eNB->single_thread_flag==0 && nfapi_mode!=2) { + if (get_thread_paralle_stage()!=0 && nfapi_mode!=2) { pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, proc ); pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, tx_thread, proc); } @@ -972,13 +973,13 @@ void init_eNB_proc(int inst) { #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) pthread_create( &proc->pthread_prach_br, attr_prach_br, eNB_thread_prach_br, eNB ); #endif - char name[16]; + /*char name[16]; if (eNB->single_thread_flag==0) { snprintf( name, sizeof(name), "RXTX0 %d", i ); pthread_setname_np( proc_rxtx[0].pthread_rxtx, name ); snprintf( name, sizeof(name), "RXTX1 %d", i ); pthread_setname_np( proc_rxtx[1].pthread_rxtx, name ); - } + }*/ AssertFatal(proc->instance_cnt_prach == -1,"instance_cnt_prach = %d\n",proc->instance_cnt_prach); @@ -1311,8 +1312,8 @@ void init_eNB(int single_thread_flag,int wait_for_sync) { #endif - eNB->td = ulsch_decoding_data_all;//(get_nprocs()<=4) ? ulsch_decoding_data : ulsch_decoding_data_2thread; - eNB->te = dlsch_encoding_all;//(get_nprocs()<=4) ? dlsch_encoding : dlsch_encoding_2threads; + eNB->td = ulsch_decoding_data_all; + eNB->te = dlsch_encoding_all; LOG_I(PHY,"Registering with MAC interface module\n"); diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index a0339e8f0f..f3210ea85a 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -119,10 +119,11 @@ static int DEFENBS[] = {0}; extern volatile int oai_exit; extern int emulate_rf; extern int numerology; -extern int fepw; -extern int single_thread_flag; extern clock_source_t clock_source; +extern uint8_t get_thread_paralle_stage(void); +extern uint8_t get_thread_worker_stage(void); +extern int get_thread_core_number(void); extern void phy_init_RU(RU_t*); extern void phy_free_RU(RU_t*); @@ -1257,7 +1258,7 @@ void wakeup_eNBs(RU_t *ru) { LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top); - if (ru->num_eNB==1 && ru->eNB_top!=0 && (get_nprocs() <= 4 || single_thread_flag)) { + if (ru->num_eNB==1 && ru->eNB_top!=0 && get_thread_paralle_stage() == 0) { // call eNB function directly char string[20]; @@ -1782,7 +1783,7 @@ static void* ru_thread( void* param ) { if (ru->num_eNB>0) wakeup_eNBs(ru); #ifndef PHY_TX_THREAD - if(get_nprocs() <= 4 || ru->num_eNB==0 || single_thread_flag){ + if(get_thread_paralle_stage() == 0 || ru->num_eNB==0){ // do TX front-end processing if needed (precoding and/or IDFTs) if (ru->feptx_prec) ru->feptx_prec(ru); @@ -2195,7 +2196,7 @@ void init_RU_proc(RU_t *ru) { if(emulate_rf) pthread_create( &proc->pthread_emulateRF, attr_emulateRF, emulatedRF_thread, (void*)proc ); - if (!single_thread_flag && get_nprocs() > 4) + if (get_thread_paralle_stage() != 0) pthread_create( &proc->pthread_FH1, attr_FH1, ru_thread_tx, (void*)ru ); if (ru->function == NGFI_RRU_IF4p5) { @@ -2222,7 +2223,7 @@ void init_RU_proc(RU_t *ru) { pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void*)ru ); } - if (get_nprocs()> 2 && fepw) { + if (get_thread_worker_stage()) { init_fep_thread(ru,NULL); init_feptx_thread(ru,NULL); } @@ -2235,7 +2236,7 @@ void kill_RU_proc(int inst) RU_t *ru = RC.ru[inst]; RU_proc_t *proc = &ru->proc; - if (get_nprocs() > 2 && fepw) { + if (get_thread_worker_stage()) { LOG_D(PHY, "killing FEP thread\n"); kill_fep_thread(ru); LOG_D(PHY, "killing FEP TX thread\n"); @@ -2554,8 +2555,8 @@ void set_function_spec_param(RU_t *ru) ru->fh_north_out = fh_if4p5_north_out; // send_IF4p5 on reception ru->fh_south_out = tx_rf; // send output to RF ru->fh_north_asynch_in = fh_if4p5_north_asynch_in; // TX packets come asynchronously - ru->feprx = (get_nprocs()<=2 || !fepw) ? fep_full :ru_fep_full_2thread; // RX DFTs - ru->feptx_ofdm = (get_nprocs()<=2 || !fepw) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft only (no precoding in RRU) + ru->feprx = (!get_thread_worker_stage()) ? fep_full :ru_fep_full_2thread; // RX DFTs + ru->feptx_ofdm = (!get_thread_worker_stage()) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft only (no precoding in RRU) ru->feptx_prec = NULL; ru->start_if = start_if; // need to start the if interface for if4p5 ru->ifdevice.host_type = RRU_HOST; @@ -2576,8 +2577,8 @@ void set_function_spec_param(RU_t *ru) } else if (ru->function == eNodeB_3GPP) { ru->do_prach = 0; // no prach processing in RU - ru->feprx = (get_nprocs()<=2 || !fepw) ? fep_full : ru_fep_full_2thread; // RX DFTs - ru->feptx_ofdm = (get_nprocs()<=2 || !fepw) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft and precoding + ru->feprx = (!get_thread_worker_stage()) ? fep_full : ru_fep_full_2thread; // RX DFTs + ru->feptx_ofdm = (!get_thread_worker_stage()) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft and precoding ru->feptx_prec = feptx_prec; // this is fep with idft and precoding ru->fh_north_in = NULL; // no incoming fronthaul from north ru->fh_north_out = NULL; // no outgoing fronthaul to north @@ -2605,9 +2606,9 @@ void set_function_spec_param(RU_t *ru) case REMOTE_IF5: // the remote unit is IF5 RRU ru->do_prach = 0; - ru->feprx = (get_nprocs()<=2 || !fepw) ? fep_full : fep_full; // this is frequency-shift + DFTs + ru->feprx = (!get_thread_worker_stage()) ? fep_full : fep_full; // this is frequency-shift + DFTs ru->feptx_prec = feptx_prec; // need to do transmit Precoding + IDFTs - ru->feptx_ofdm = (get_nprocs()<=2 || !fepw) ? feptx_ofdm : feptx_ofdm_2thread; // need to do transmit Precoding + IDFTs + ru->feptx_ofdm = (!get_thread_worker_stage()) ? feptx_ofdm : feptx_ofdm_2thread; // need to do transmit Precoding + IDFTs if (ru->if_timing == synch_to_other) { ru->fh_south_in = fh_slave_south_in; // synchronize to master ru->fh_south_out = fh_if5_mobipass_south_out; // use send_IF5 for mobipass @@ -2685,7 +2686,7 @@ void init_RU(char *rf_config_file) { // read in configuration file) printf("configuring RU from file\n"); RCconfig_RU(); - LOG_I(PHY,"number of L1 instances %d, number of RU %d, number of CPU cores %d\n",RC.nb_L1_inst,RC.nb_RU,get_nprocs()); + LOG_I(PHY,"number of L1 instances %d, number of RU %d, number of CPU cores %d\n",RC.nb_L1_inst,RC.nb_RU,get_thread_core_number()); if (RC.nb_CC != 0) for (i=0;i=8) + { + thread_struct.paralle_stage = 2; + thread_struct.worker_stage = 1; + } + else if(thread_struct.core_number>=4) + { + thread_struct.paralle_stage = 1; + thread_struct.worker_stage = 1; + } + else + { + thread_struct.paralle_stage = 0; + thread_struct.worker_stage = 0; + } + if(single_thread_flag) thread_struct.paralle_stage = 0; + if(dis_worker) thread_struct.worker_stage = 0; +printf("single_thread_flag=%d, dis_worker=%d \n" ,single_thread_flag, dis_worker); +printf("~~~~~~~~~~paralle_stage=%d, worker_stage=%d, core_number=%d ~~~~~~~~~~~~~~~~\n", + thread_struct.paralle_stage, + thread_struct.worker_stage, + thread_struct.core_number); +} + +uint8_t get_thread_paralle_stage(void) +{ + return thread_struct.paralle_stage; +} +uint8_t get_thread_worker_stage(void) +{ + return thread_struct.worker_stage; +} +int get_thread_core_number(void) +{ + return thread_struct.core_number; +} @@ -1174,6 +1214,7 @@ int main( int argc, char **argv ) printf("wait_eNBs()\n"); wait_eNBs(); + thread_structure_init(); printf("About to Init RU threads RC.nb_RU:%d\n", RC.nb_RU); if (RC.nb_RU >0) { diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index 2f8209f2d3..e27f743871 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -92,8 +92,7 @@ #define CONFIG_HLP_TNOFORK "to ease debugging with gdb\n" #define CONFIG_HLP_NUMEROLOGY "adding numerology for 5G\n" -#define CONFIG_HLP_CODINGW "coding worker thread enable(disable by defult)\n" -#define CONFIG_HLP_FEPW "FEP worker thread enabled(disable by defult)\n" +#define CONFIG_HLP_WORKER "coding and FEP worker thread disable(enable by defult)\n" #define CONFIG_HLP_EMULATE_RF "Emulated RF enabled(disable by defult)\n" #define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n" @@ -186,8 +185,7 @@ {"s" , CONFIG_HLP_SNR, 0, iptr:&snr_dB, defintval:25, TYPE_INT, 0}, \ {"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \ {"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \ -{"codingw" , CONFIG_HLP_CODINGW, PARAMFLAG_BOOL, iptr:&codingw, defintval:0, TYPE_INT, 0}, \ -{"fepw" , CONFIG_HLP_FEPW, PARAMFLAG_BOOL, iptr:&fepw, defintval:0, TYPE_INT, 0}, \ +{"worker-disable" , CONFIG_HLP_WORKER, PARAMFLAG_BOOL, iptr:&dis_worker, defintval:0, TYPE_INT, 0}, \ {"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, iptr:&nonbiotflag, defintval:0, TYPE_INT, 0} \ } @@ -278,6 +276,10 @@ PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag); void init_eNB_afterRU(void); +void thread_structure_init(void); +uint8_t get_thread_paralle_stage(void); +uint8_t get_thread_worker_stage(void); +int get_thread_core_number(void); extern int stop_L1L2(module_id_t enb_id); extern int restart_L1L2(module_id_t enb_id); From 3005929bca7b78be4eaf1a236c99c9100f69c2ef Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Tue, 11 Sep 2018 18:50:11 +0200 Subject: [PATCH 02/11] modify threading option into config file --- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 3 +- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 4 +- openair1/PHY/defs_eNB.h | 17 +++++-- openair2/ENB_APP/enb_config.c | 23 ++++++++++ openair2/ENB_APP/enb_paramdef.h | 25 +++++++++++ openair2/LAYER2/MAC/eNB_scheduler_phytest.c | 2 +- .../CONF/enb.band7.tm1.50PRB.usrpb210.conf | 9 ++++ targets/RT/USER/lte-enb.c | 18 ++++---- targets/RT/USER/lte-ru.c | 31 +++++++------ targets/RT/USER/lte-softmodem.c | 45 +++++-------------- targets/RT/USER/lte-softmodem.h | 9 ++-- 11 files changed, 113 insertions(+), 73 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 045b4349a0..1c3aa48ed3 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -57,6 +57,7 @@ uint64_t runtime, uint64_t deadline, uint64_t period);*/ +extern uint8_t get_thread_worker_conf(void); void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) @@ -614,7 +615,7 @@ int dlsch_encoding_all(PHY_VARS_eNB *eNB, } } - if(get_thread_worker_stage()) + if(get_thread_worker_conf() == WORKER_ENABLE) { if(C >= 8)//one main three worker { diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index ac928cdbdd..3948b5e018 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -45,7 +45,7 @@ #include "targets/RT/USER/rt_wrapper.h" #include "transport_proto.h" -extern uint8_t get_thread_worker_stage(void); +extern uint8_t get_thread_worker_conf(void); void free_eNB_ulsch(LTE_eNB_ULSCH_t *ulsch) { @@ -723,7 +723,7 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) int ulsch_decoding_data_all(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag) { int ret = 0; - /*if(get_thread_worker_stage()) + /*if(get_thread_worker_conf() == WORKER_ENABLE) { ret = ulsch_decoding_data_2thread(eNB,UE_id,harq_pid,llr8_flag); } diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h index cb30900f7b..5425932905 100644 --- a/openair1/PHY/defs_eNB.h +++ b/openair1/PHY/defs_eNB.h @@ -270,7 +270,6 @@ typedef enum { REMOTE_IF4p5 =3, REMOTE_IF1pp =4, MAX_RU_IF_TYPES =5 - //EMULATE_RF =6 } RU_if_south_t; typedef struct RU_t_s{ @@ -888,10 +887,20 @@ typedef struct { int prach_I0; } PHY_MEASUREMENTS_eNB; +typedef enum { + PARALLEL_SINGLE_THREAD =0, + PARALLEL_RU_L1_SPLIT =1, + PARALLEL_RU_L1_TRX_SPLIT =2 +}PARALLEL_CONF_t; + +typedef enum { + WORKER_DISABLE =0, + WORKER_ENABLE =1 +}WORKER_CONF_t; + typedef struct THREAD_STRUCT_s { - uint8_t paralle_stage; - uint8_t worker_stage; - int core_number; + PARALLEL_CONF_t parallel_conf; + WORKER_CONF_t worker_conf; } THREAD_STRUCT; diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 6d9b2edf82..2e82cf7a7e 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -61,6 +61,8 @@ #include "enb_paramdef.h" extern uint16_t sf_ahead; +extern void set_parallel_conf(int parallel_conf); +extern void set_parallel_worker_conf(int worker_conf); void RCconfig_flexran() { @@ -2484,6 +2486,26 @@ int RCconfig_X2(MessageDef *msg_p, uint32_t i) return 0; } +int RCconfig_parallel(void) +{ + char *parallel_conf; + char *worker_conf; + + paramdef_t ThreadParams[] = THREAD_CONF_DESC; + paramlist_def_t THREADParamList = {THREAD_CONFIG_STRING_THREAD_STRUCT,NULL,0}; + + config_getlist( &THREADParamList,ThreadParams,sizeof(ThreadParams)/sizeof(paramdef_t),NULL); + parallel_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); + worker_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); + + if(strcmp(parallel_conf,"PARALLEL_SINGLE_THREAD")==0) set_parallel_conf(0); + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_SPLIT")==0) set_parallel_conf(1); + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_TRX_SPLIT")==0) set_parallel_conf(2); + if(strcmp(worker_conf,"WORKER_DISABLE")==0) set_parallel_worker_conf(0); + else if(strcmp(worker_conf,"WORKER_ENABLE")==0) set_parallel_worker_conf(1); + return 0; +} + void RCConfig(void) { paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; @@ -2528,5 +2550,6 @@ void RCConfig(void) { config_getlist( &RUParamList,NULL,0, NULL); RC.nb_RU = RUParamList.numelt; + RCconfig_parallel(); } diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h index 04edea1493..9403362c4f 100755 --- a/openair2/ENB_APP/enb_paramdef.h +++ b/openair2/ENB_APP/enb_paramdef.h @@ -879,3 +879,28 @@ typedef enum { #define MACRLC_SCHED_MODE_IDX 17 #define MACRLC_PHY_TEST_IDX 18 /*---------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/* thread configuration parameters section name */ +#define THREAD_CONFIG_STRING_THREAD_STRUCT "THREAD_STRUCT" + +/* thread configuration parameters names */ +#define THREAD_CONFIG_STRING_PARALLEL "parallel_config" +#define THREAD_CONFIG_STRING_WORKER "worker_config" + + +#define THREAD_PARALLEL_IDX 0 +#define THREAD_WORKER_IDX 1 + +/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* thread configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define THREAD_CONF_DESC { \ +{THREAD_CONFIG_STRING_PARALLEL, CONFIG_HLP_PARALLEL, 0, strptr:NULL, defstrval:"PARALLEL_RU_L1_TRX_SPLIT", TYPE_STRING, 0}, \ +{THREAD_CONFIG_STRING_WORKER, CONFIG_HLP_WORKER, 0, strptr:NULL, defstrval:"WORKER_ENABLE", TYPE_STRING, 0} \ +} + + +#define CONFIG_HLP_WORKER "coding and FEP worker thread WORKER_DISABLE or WORKER_ENABLE\n" +#define CONFIG_HLP_PARALLEL "PARALLEL_SINGLE_THREAD, PARALLEL_RU_L1_SPLIT, or PARALLEL_RU_L1_TRX_SPLIT(RU_L1_TRX_SPLIT by defult)\n" +/*-------------------------------------------------------------------------------------------------------------------------------------------------------------*/ diff --git a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c index 03def31172..81c418c123 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_phytest.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_phytest.c @@ -71,7 +71,7 @@ schedule_ue_spec_phy_test( uint16_t rnti = 0x1235; uint32_t rb_alloc = 0x1FFFFF; int32_t tpc = 1; - int32_t mcs = 10; + int32_t mcs = 28; int32_t cqi = 15; int32_t ndi = (frameP*10+subframeP)/8; int32_t dai = 0; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf index c2f10e20ae..e08b83d58a 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf @@ -238,6 +238,15 @@ NETWORK_CONTROLLER : FLEXRAN_AWAIT_RECONF = "no"; }; +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config : { global_log_level ="info"; diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index a1798ed3e4..fdabc62aab 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -151,8 +151,8 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe); #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) void wakeup_prach_eNB_br(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe); #endif -extern uint8_t get_thread_paralle_stage(void); -extern uint8_t get_thread_worker_stage(void); +extern uint8_t get_thread_paralle_conf(void); +extern uint8_t get_thread_worker_conf(void); extern uint8_t nfapi_mode; extern void oai_subframe_ind(uint16_t sfn, uint16_t sf); @@ -224,7 +224,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 1 ); - if(get_thread_paralle_stage() == 2){ + if(get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT){ if(wait_on_condition(&proc[1].mutex_rxtx,&proc[1].cond_rxtx,&proc[1].pipe_ready,"wakeup_tx")<0) { LOG_E(PHY,"Frame %d, subframe %d: TX1 not ready\n",proc[1].frame_rx,proc[1].subframe_rx); return(-1); @@ -246,7 +246,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam /* CONFLICT RESOLUTION: BEGIN */ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 ); if(oai_exit) return(-1); - if(get_thread_paralle_stage() == 0){ + if(get_thread_paralle_conf() == PARALLEL_SINGLE_THREAD){ #ifndef PHY_TX_THREAD phy_procedures_eNB_TX(eNB, proc, 1); #endif @@ -422,8 +422,8 @@ static void* eNB_thread_rxtx( void* param ) { } pthread_mutex_unlock( &proc->mutex_rxtx ); if (nfapi_mode!=2){ - if(get_thread_paralle_stage() == 2) wakeup_tx(eNB,eNB->proc.ru_proc); - else if(get_thread_paralle_stage() == 1) + if(get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) wakeup_tx(eNB,eNB->proc.ru_proc); + else if(get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT) { phy_procedures_eNB_TX(eNB, proc, 1); wakeup_txfh(proc,eNB->proc.ru_proc); @@ -954,7 +954,7 @@ void init_eNB_proc(int inst) { // attr_te = &proc->attr_te; #endif - if(get_thread_worker_stage()) + if(get_thread_worker_conf() == WORKER_ENABLE) { init_te_thread(eNB); init_td_thread(eNB); @@ -963,7 +963,7 @@ void init_eNB_proc(int inst) { LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag); - if (get_thread_paralle_stage()!=0 && nfapi_mode!=2) { + if ((get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT || get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) && nfapi_mode!=2) { pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, proc ); pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, tx_thread, proc); } @@ -1030,7 +1030,7 @@ void kill_eNB_proc(int inst) { proc = &eNB->proc; proc_rxtx = &proc->proc_rxtx[0]; - if(get_nprocs() > 2 && codingw) { + if(get_thread_worker_conf == WORKER_ENABLE) { kill_td_thread(eNB); kill_te_thread(eNB); } diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index c6eab9f6a1..39e482a81f 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -121,9 +121,8 @@ extern int emulate_rf; extern int numerology; extern clock_source_t clock_source; -extern uint8_t get_thread_paralle_stage(void); -extern uint8_t get_thread_worker_stage(void); -extern int get_thread_core_number(void); +extern uint8_t get_thread_paralle_conf(void); +extern uint8_t get_thread_worker_conf(void); extern void phy_init_RU(RU_t*); extern void phy_free_RU(RU_t*); @@ -1258,7 +1257,7 @@ void wakeup_eNBs(RU_t *ru) { LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top); - if (ru->num_eNB==1 && ru->eNB_top!=0 && get_thread_paralle_stage() == 0) { + if (ru->num_eNB==1 && ru->eNB_top!=0 && get_thread_paralle_conf() == PARALLEL_SINGLE_THREAD) { // call eNB function directly char string[20]; @@ -1783,7 +1782,7 @@ static void* ru_thread( void* param ) { if (ru->num_eNB>0) wakeup_eNBs(ru); #ifndef PHY_TX_THREAD - if(get_thread_paralle_stage() == 0 || ru->num_eNB==0){ + if(get_thread_paralle_conf() == PARALLEL_SINGLE_THREAD || ru->num_eNB==0){ // do TX front-end processing if needed (precoding and/or IDFTs) if (ru->feptx_prec) ru->feptx_prec(ru); @@ -2196,7 +2195,7 @@ void init_RU_proc(RU_t *ru) { if(emulate_rf) pthread_create( &proc->pthread_emulateRF, attr_emulateRF, emulatedRF_thread, (void*)proc ); - if (get_thread_paralle_stage() != 0) + if (get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT || get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) pthread_create( &proc->pthread_FH1, attr_FH1, ru_thread_tx, (void*)ru ); if (ru->function == NGFI_RRU_IF4p5) { @@ -2223,7 +2222,7 @@ void init_RU_proc(RU_t *ru) { pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void*)ru ); } - if (get_thread_worker_stage()) { + if (get_thread_worker_conf() == WORKER_ENABLE) { init_fep_thread(ru,NULL); init_feptx_thread(ru,NULL); } @@ -2261,7 +2260,7 @@ void kill_RU_proc(RU_t *ru) pthread_cond_destroy( &proc->cond_rf_tx); #endif - if (get_thread_worker_stage()) { + if (get_thread_worker_conf() == WORKER_ENABLE) { LOG_D(PHY, "killing FEP thread\n"); kill_fep_thread(ru); LOG_D(PHY, "killing FEP TX thread\n"); @@ -2310,7 +2309,7 @@ void kill_RU_proc(RU_t *ru) LOG_D(PHY, "Joining pthread_FH\n"); pthread_join(proc->pthread_FH, NULL); - if (!single_thread_flag && get_nprocs() > 4) { + if (get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT || get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) { LOG_D(PHY, "Joining pthread_FHTX\n"); pthread_join(proc->pthread_FH1, NULL); } @@ -2584,8 +2583,8 @@ void set_function_spec_param(RU_t *ru) ru->fh_north_out = fh_if4p5_north_out; // send_IF4p5 on reception ru->fh_south_out = tx_rf; // send output to RF ru->fh_north_asynch_in = fh_if4p5_north_asynch_in; // TX packets come asynchronously - ru->feprx = (!get_thread_worker_stage()) ? fep_full :ru_fep_full_2thread; // RX DFTs - ru->feptx_ofdm = (!get_thread_worker_stage()) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft only (no precoding in RRU) + ru->feprx = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full :ru_fep_full_2thread; // RX DFTs + ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft only (no precoding in RRU) ru->feptx_prec = NULL; ru->start_if = start_if; // need to start the if interface for if4p5 ru->ifdevice.host_type = RRU_HOST; @@ -2606,8 +2605,8 @@ void set_function_spec_param(RU_t *ru) } else if (ru->function == eNodeB_3GPP) { ru->do_prach = 0; // no prach processing in RU - ru->feprx = (!get_thread_worker_stage()) ? fep_full : ru_fep_full_2thread; // RX DFTs - ru->feptx_ofdm = (!get_thread_worker_stage()) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft and precoding + ru->feprx = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : ru_fep_full_2thread; // RX DFTs + ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread; // this is fep with idft and precoding ru->feptx_prec = feptx_prec; // this is fep with idft and precoding ru->fh_north_in = NULL; // no incoming fronthaul from north ru->fh_north_out = NULL; // no outgoing fronthaul to north @@ -2635,9 +2634,9 @@ void set_function_spec_param(RU_t *ru) case REMOTE_IF5: // the remote unit is IF5 RRU ru->do_prach = 0; - ru->feprx = (!get_thread_worker_stage()) ? fep_full : fep_full; // this is frequency-shift + DFTs + ru->feprx = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : fep_full; // this is frequency-shift + DFTs ru->feptx_prec = feptx_prec; // need to do transmit Precoding + IDFTs - ru->feptx_ofdm = (!get_thread_worker_stage()) ? feptx_ofdm : feptx_ofdm_2thread; // need to do transmit Precoding + IDFTs + ru->feptx_ofdm = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread; // need to do transmit Precoding + IDFTs if (ru->if_timing == synch_to_other) { ru->fh_south_in = fh_slave_south_in; // synchronize to master ru->fh_south_out = fh_if5_mobipass_south_out; // use send_IF5 for mobipass @@ -2715,7 +2714,7 @@ void init_RU(char *rf_config_file) { // read in configuration file) printf("configuring RU from file\n"); RCconfig_RU(); - LOG_I(PHY,"number of L1 instances %d, number of RU %d, number of CPU cores %d\n",RC.nb_L1_inst,RC.nb_RU,get_thread_core_number()); + LOG_I(PHY,"number of L1 instances %d, number of RU %d, number of CPU cores %d\n",RC.nb_L1_inst,RC.nb_RU,get_nprocs()); if (RC.nb_CC != 0) for (i=0;i=8) - { - thread_struct.paralle_stage = 2; - thread_struct.worker_stage = 1; - } - else if(thread_struct.core_number>=4) - { - thread_struct.paralle_stage = 1; - thread_struct.worker_stage = 1; - } - else - { - thread_struct.paralle_stage = 0; - thread_struct.worker_stage = 0; - } - if(single_thread_flag) thread_struct.paralle_stage = 0; - if(dis_worker) thread_struct.worker_stage = 0; -printf("single_thread_flag=%d, dis_worker=%d \n" ,single_thread_flag, dis_worker); -printf("~~~~~~~~~~paralle_stage=%d, worker_stage=%d, core_number=%d ~~~~~~~~~~~~~~~~\n", - thread_struct.paralle_stage, - thread_struct.worker_stage, - thread_struct.core_number); -} - -uint8_t get_thread_paralle_stage(void) -{ - return thread_struct.paralle_stage; + thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; } -uint8_t get_thread_worker_stage(void) +void set_parallel_worker_conf(int worker_conf) { - return thread_struct.worker_stage; + thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; } -int get_thread_core_number(void) +PARALLEL_CONF_t get_thread_paralle_conf(void) { - return thread_struct.core_number; + return thread_struct.parallel_conf; +} +WORKER_CONF_t get_thread_worker_conf(void) +{ + return thread_struct.worker_conf; } @@ -1177,7 +1153,6 @@ int main( int argc, char **argv ) printf("wait_eNBs()\n"); wait_eNBs(); - thread_structure_init(); printf("About to Init RU threads RC.nb_RU:%d\n", RC.nb_RU); if (RC.nb_RU >0) { diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index c7c8e44661..e3ffeaab10 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -92,7 +92,6 @@ #define CONFIG_HLP_TNOFORK "to ease debugging with gdb\n" #define CONFIG_HLP_NUMEROLOGY "adding numerology for 5G\n" -#define CONFIG_HLP_WORKER "coding and FEP worker thread disable(enable by defult)\n" #define CONFIG_HLP_EMULATE_RF "Emulated RF enabled(disable by defult)\n" #define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n" @@ -185,7 +184,6 @@ {"s" , CONFIG_HLP_SNR, 0, iptr:&snr_dB, defintval:25, TYPE_INT, 0}, \ {"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \ {"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \ -{"worker-disable" , CONFIG_HLP_WORKER, PARAMFLAG_BOOL, iptr:&dis_worker, defintval:0, TYPE_INT, 0}, \ {"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, iptr:&nonbiotflag, defintval:0, TYPE_INT, 0} \ } @@ -278,9 +276,10 @@ PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t abstraction_flag); void init_eNB_afterRU(void); void thread_structure_init(void); -uint8_t get_thread_paralle_stage(void); -uint8_t get_thread_worker_stage(void); -int get_thread_core_number(void); +PARALLEL_CONF_t get_thread_paralle_conf(void); +WORKER_CONF_t get_thread_worker_conf(void); +void set_parallel_conf(int parallel_conf); +void set_parallel_worker_conf(int worker_conf); extern int stop_L1L2(module_id_t enb_id); extern int restart_L1L2(module_id_t enb_id); From d7fd3013a12e1d44a78cb79794ec24288f649c9d Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Wed, 12 Sep 2018 10:49:57 +0200 Subject: [PATCH 03/11] config file adding parallel configuration --- .../CONF/enb.band38.tm1.100PRB.usrpx310.conf | 9 +++++++++ .../GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf | 9 +++++++++ .../CONF/enb.band7.tm1.100PRB.usrpx310.conf | 9 +++++++++ .../CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf | 9 +++++++++ .../CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf | 9 +++++++++ .../CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf | 9 +++++++++ .../CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf | 9 +++++++++ .../CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf | 9 +++++++++ .../GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf | 9 +++++++++ .../GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf | 9 +++++++++ .../CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf | 9 +++++++++ targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf | 9 +++++++++ .../PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.tdd.conf | 9 +++++++++ 13 files changed, 117 insertions(+) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf index bec9c2c6dd..2761fe5fdb 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.100PRB.usrpx310.conf @@ -156,6 +156,15 @@ eNBs = ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config : { global_log_level ="debug"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf index 834b6cf044..56b3c37c0a 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm1.usrpx310.conf @@ -156,6 +156,15 @@ eNBs = ENB_PORT_FOR_X2C = 36422; # Spec 36422 }; +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config : { global_log_level ="debug"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf index 6b3614f490..f088eda84f 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.100PRB.usrpx310.conf @@ -193,6 +193,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config : { global_log_level ="info"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf index fb184549c5..3bd4b1275a 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.25PRB.usrpb210.replay.conf @@ -235,6 +235,15 @@ NETWORK_CONTROLLER : FLEXRAN_CACHE = "/mnt/oai_agent_cache"; FLEXRAN_AWAIT_RECONF = "no"; }; + +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); /* log_config : { diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf index c6ace3b68f..a419122846 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210-d2d.conf @@ -225,6 +225,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config : { global_log_level ="info"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf index e46467598e..f0a3cb524a 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210_ue_expansion.conf @@ -192,6 +192,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config : { global_log_level ="info"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf index a6efe74283..039f0c39c1 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band38.tm1.if4p5.50PRB.lo.conf @@ -199,6 +199,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config = { global_log_level ="info"; global_log_verbosity ="medium"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf index fefb4b11de..8f6aac632b 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi-STUB.conf @@ -182,6 +182,15 @@ MACRLCs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config : { global_log_level ="debug"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf index cd21fb935e..f4ac5a9aa3 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.50PRB.nfapi.conf @@ -210,6 +210,15 @@ MACRLCs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config = { global_log_level ="info"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf index 581012d7d3..ea205e44d1 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.conf @@ -198,6 +198,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config = { global_log_level ="info"; global_log_verbosity ="medium"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf index 5f9f8c4d7b..a2e97648c9 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rcc.band7.tm1.if4p5.50PRB.lo.conf @@ -197,6 +197,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config = { global_log_level ="info"; global_log_verbosity ="medium"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf index 41b322fb55..ba2e7f1ada 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.conf @@ -17,6 +17,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config = { global_log_level ="info"; global_log_verbosity ="medium"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.tdd.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.tdd.conf index da1481ac7b..494086defd 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.tdd.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/rru.oaisim.tdd.conf @@ -18,6 +18,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + log_config = { global_log_level ="info"; global_log_verbosity ="medium"; From c5cd47f976ac4ed724b39f2b46e5e70aa053c307 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Wed, 12 Sep 2018 15:32:44 +0200 Subject: [PATCH 04/11] fixes for not having parallel config inside the config file --- openair2/ENB_APP/enb_config.c | 16 +++++++++++++--- targets/RT/USER/lte-enb.c | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 2e82cf7a7e..bbe3ca5c2c 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -2493,10 +2493,20 @@ int RCconfig_parallel(void) paramdef_t ThreadParams[] = THREAD_CONF_DESC; paramlist_def_t THREADParamList = {THREAD_CONFIG_STRING_THREAD_STRUCT,NULL,0}; + + config_getlist( &THREADParamList,NULL,0,NULL); - config_getlist( &THREADParamList,ThreadParams,sizeof(ThreadParams)/sizeof(paramdef_t),NULL); - parallel_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); - worker_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); + if(THREADParamList.numelt>0) + { + config_getlist( &THREADParamList,ThreadParams,sizeof(ThreadParams)/sizeof(paramdef_t),NULL); + parallel_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); + worker_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); + } + else + { + parallel_conf = "PARALLEL_RU_L1_TRX_SPLIT"; + worker_conf = "WORKER_ENABLE"; + } if(strcmp(parallel_conf,"PARALLEL_SINGLE_THREAD")==0) set_parallel_conf(0); else if(strcmp(parallel_conf,"PARALLEL_RU_L1_SPLIT")==0) set_parallel_conf(1); diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index fdabc62aab..b51495c43f 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -1030,7 +1030,7 @@ void kill_eNB_proc(int inst) { proc = &eNB->proc; proc_rxtx = &proc->proc_rxtx[0]; - if(get_thread_worker_conf == WORKER_ENABLE) { + if(get_thread_worker_conf() == WORKER_ENABLE) { kill_td_thread(eNB); kill_te_thread(eNB); } From cf09d19879757a588f121c4651b90e9bded6c61c Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 13 Sep 2018 12:52:44 +0200 Subject: [PATCH 05/11] adding definition for UE --- openair1/PHY/defs_common.h | 15 +++++++++++++++ openair1/PHY/defs_eNB.h | 16 ---------------- targets/RT/USER/lte-uesoftmodem.c | 20 ++++++++++++++++++-- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h index e27622c059..4dab209dd5 100644 --- a/openair1/PHY/defs_common.h +++ b/openair1/PHY/defs_common.h @@ -862,7 +862,22 @@ typedef enum { RESYNCH=4 } UE_MODE_t; +/// Threading Parameter +typedef enum { + PARALLEL_SINGLE_THREAD =0, + PARALLEL_RU_L1_SPLIT =1, + PARALLEL_RU_L1_TRX_SPLIT =2 +}PARALLEL_CONF_t; +typedef enum { + WORKER_DISABLE =0, + WORKER_ENABLE =1 +}WORKER_CONF_t; + +typedef struct THREAD_STRUCT_s { + PARALLEL_CONF_t parallel_conf; + WORKER_CONF_t worker_conf; +} THREAD_STRUCT; typedef enum {SF_DL, SF_UL, SF_S} lte_subframe_t; diff --git a/openair1/PHY/defs_eNB.h b/openair1/PHY/defs_eNB.h index 5425932905..f23485cad8 100644 --- a/openair1/PHY/defs_eNB.h +++ b/openair1/PHY/defs_eNB.h @@ -887,22 +887,6 @@ typedef struct { int prach_I0; } PHY_MEASUREMENTS_eNB; -typedef enum { - PARALLEL_SINGLE_THREAD =0, - PARALLEL_RU_L1_SPLIT =1, - PARALLEL_RU_L1_TRX_SPLIT =2 -}PARALLEL_CONF_t; - -typedef enum { - WORKER_DISABLE =0, - WORKER_ENABLE =1 -}WORKER_CONF_t; - -typedef struct THREAD_STRUCT_s { - PARALLEL_CONF_t parallel_conf; - WORKER_CONF_t worker_conf; -} THREAD_STRUCT; - /// Top-level PHY Data Structure for eNB typedef struct PHY_VARS_eNB_s { diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index 2efcb496ac..d87e3e69b1 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -220,8 +220,24 @@ int transmission_mode=1; int emulate_rf = 0; int numerology = 0; -int codingw = 0; -int fepw = 0; + +static THREAD_STRUCT thread_struct; +void set_parallel_conf(int parallel_conf) +{ + thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; +} +void set_parallel_worker_conf(int worker_conf) +{ + thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; +} +PARALLEL_CONF_t get_thread_paralle_conf(void) +{ + return thread_struct.parallel_conf; +} +WORKER_CONF_t get_thread_worker_conf(void) +{ + return thread_struct.worker_conf; +} /* struct for ethernet specific parameters given in eNB conf file */ eth_params_t *eth_params; From 5b1260a759809b1f08f22fcaa0f6ee11001ee913 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 13 Sep 2018 15:02:15 +0200 Subject: [PATCH 06/11] fixed for phy-simulation mode --- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 2 +- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 2 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 18 +++++++++++++++++- openair1/SIMULATION/LTE_PHY/ulsim.c | 18 +++++++++++++++++- targets/RT/USER/lte-enb.c | 14 +++++++------- targets/RT/USER/lte-ru.c | 12 ++++++------ targets/RT/USER/lte-softmodem.c | 2 +- targets/RT/USER/lte-softmodem.h | 2 +- targets/RT/USER/lte-uesoftmodem.c | 2 +- 9 files changed, 52 insertions(+), 20 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 1c3aa48ed3..ded0905388 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -57,7 +57,7 @@ uint64_t runtime, uint64_t deadline, uint64_t period);*/ -extern uint8_t get_thread_worker_conf(void); +extern WORKER_CONF_t get_thread_worker_conf(void); void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 3948b5e018..046e456916 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -45,7 +45,7 @@ #include "targets/RT/USER/rt_wrapper.h" #include "transport_proto.h" -extern uint8_t get_thread_worker_conf(void); +extern WORKER_CONF_t get_thread_worker_conf(void); void free_eNB_ulsch(LTE_eNB_ULSCH_t *ulsch) { diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index a03ce34bca..fd649ec0e4 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -82,7 +82,23 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for rx */ int n_tx_dropped = 0; /*!< \brief initial max process time for tx */ int n_rx_dropped = 0; /*!< \brief initial max process time for rx */ -int codingw = 0; +static THREAD_STRUCT thread_struct; +void set_parallel_conf(int parallel_conf) +{ + thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; +} +void set_parallel_worker_conf(int worker_conf) +{ + thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; +} +PARALLEL_CONF_t get_thread_parallel_conf(void) +{ + return thread_struct.parallel_conf; +} +WORKER_CONF_t get_thread_worker_conf(void) +{ + return thread_struct.worker_conf; +} int emulate_rf = 0; diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 3fcb010685..826f185d2a 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -97,7 +97,23 @@ nfapi_tx_request_pdu_t tx_pdu_list[MAX_NUM_TX_REQUEST_PDU]; nfapi_tx_request_t TX_req; Sched_Rsp_t sched_resp; -int codingw = 0; +static THREAD_STRUCT thread_struct; +void set_parallel_conf(int parallel_conf) +{ + thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; +} +void set_parallel_worker_conf(int worker_conf) +{ + thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; +} +PARALLEL_CONF_t get_thread_parallel_conf(void) +{ + return thread_struct.parallel_conf; +} +WORKER_CONF_t get_thread_worker_conf(void) +{ + return thread_struct.worker_conf; +} void fill_nfapi_ulsch_config_request(nfapi_ul_config_request_pdu_t *ul_config_pdu, diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index b51495c43f..91a3c2e479 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -151,8 +151,8 @@ void wakeup_prach_eNB(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe); #if (RRC_VERSION >= MAKE_VERSION(14, 0, 0)) void wakeup_prach_eNB_br(PHY_VARS_eNB *eNB,RU_t *ru,int frame,int subframe); #endif -extern uint8_t get_thread_paralle_conf(void); -extern uint8_t get_thread_worker_conf(void); +extern PARALLEL_CONF_t get_thread_parallel_conf(void); +extern WORKER_CONF_t get_thread_worker_conf(void); extern uint8_t nfapi_mode; extern void oai_subframe_ind(uint16_t sfn, uint16_t sf); @@ -224,7 +224,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 1 ); - if(get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT){ + if(get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT){ if(wait_on_condition(&proc[1].mutex_rxtx,&proc[1].cond_rxtx,&proc[1].pipe_ready,"wakeup_tx")<0) { LOG_E(PHY,"Frame %d, subframe %d: TX1 not ready\n",proc[1].frame_rx,proc[1].subframe_rx); return(-1); @@ -246,7 +246,7 @@ static inline int rxtx(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, char *thread_nam /* CONFLICT RESOLUTION: BEGIN */ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER , 0 ); if(oai_exit) return(-1); - if(get_thread_paralle_conf() == PARALLEL_SINGLE_THREAD){ + if(get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD){ #ifndef PHY_TX_THREAD phy_procedures_eNB_TX(eNB, proc, 1); #endif @@ -422,8 +422,8 @@ static void* eNB_thread_rxtx( void* param ) { } pthread_mutex_unlock( &proc->mutex_rxtx ); if (nfapi_mode!=2){ - if(get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) wakeup_tx(eNB,eNB->proc.ru_proc); - else if(get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT) + if(get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) wakeup_tx(eNB,eNB->proc.ru_proc); + else if(get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT) { phy_procedures_eNB_TX(eNB, proc, 1); wakeup_txfh(proc,eNB->proc.ru_proc); @@ -963,7 +963,7 @@ void init_eNB_proc(int inst) { LOG_I(PHY,"eNB->single_thread_flag:%d\n", eNB->single_thread_flag); - if ((get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT || get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) && nfapi_mode!=2) { + if ((get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) && nfapi_mode!=2) { pthread_create( &proc_rxtx[0].pthread_rxtx, attr0, eNB_thread_rxtx, proc ); pthread_create( &proc_rxtx[1].pthread_rxtx, attr1, tx_thread, proc); } diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 39e482a81f..8ee2cb04f6 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -121,8 +121,8 @@ extern int emulate_rf; extern int numerology; extern clock_source_t clock_source; -extern uint8_t get_thread_paralle_conf(void); -extern uint8_t get_thread_worker_conf(void); +extern PARALLEL_CONF_t get_thread_parallel_conf(void); +extern WORKER_CONF_t get_thread_worker_conf(void); extern void phy_init_RU(RU_t*); extern void phy_free_RU(RU_t*); @@ -1257,7 +1257,7 @@ void wakeup_eNBs(RU_t *ru) { LOG_D(PHY,"wakeup_eNBs (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top); - if (ru->num_eNB==1 && ru->eNB_top!=0 && get_thread_paralle_conf() == PARALLEL_SINGLE_THREAD) { + if (ru->num_eNB==1 && ru->eNB_top!=0 && get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD) { // call eNB function directly char string[20]; @@ -1782,7 +1782,7 @@ static void* ru_thread( void* param ) { if (ru->num_eNB>0) wakeup_eNBs(ru); #ifndef PHY_TX_THREAD - if(get_thread_paralle_conf() == PARALLEL_SINGLE_THREAD || ru->num_eNB==0){ + if(get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD || ru->num_eNB==0){ // do TX front-end processing if needed (precoding and/or IDFTs) if (ru->feptx_prec) ru->feptx_prec(ru); @@ -2195,7 +2195,7 @@ void init_RU_proc(RU_t *ru) { if(emulate_rf) pthread_create( &proc->pthread_emulateRF, attr_emulateRF, emulatedRF_thread, (void*)proc ); - if (get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT || get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) + if (get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) pthread_create( &proc->pthread_FH1, attr_FH1, ru_thread_tx, (void*)ru ); if (ru->function == NGFI_RRU_IF4p5) { @@ -2309,7 +2309,7 @@ void kill_RU_proc(RU_t *ru) LOG_D(PHY, "Joining pthread_FH\n"); pthread_join(proc->pthread_FH, NULL); - if (get_thread_paralle_conf() == PARALLEL_RU_L1_SPLIT || get_thread_paralle_conf() == PARALLEL_RU_L1_TRX_SPLIT) { + if (get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT) { LOG_D(PHY, "Joining pthread_FHTX\n"); pthread_join(proc->pthread_FH1, NULL); } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index f935677124..b9458afa1e 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -229,7 +229,7 @@ void set_parallel_worker_conf(int worker_conf) { thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; } -PARALLEL_CONF_t get_thread_paralle_conf(void) +PARALLEL_CONF_t get_thread_parallel_conf(void) { return thread_struct.parallel_conf; } diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index e3ffeaab10..7074172a03 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -276,7 +276,7 @@ PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t abstraction_flag); void init_eNB_afterRU(void); void thread_structure_init(void); -PARALLEL_CONF_t get_thread_paralle_conf(void); +PARALLEL_CONF_t get_thread_parallel_conf(void); WORKER_CONF_t get_thread_worker_conf(void); void set_parallel_conf(int parallel_conf); void set_parallel_worker_conf(int worker_conf); diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index d87e3e69b1..1613622567 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -230,7 +230,7 @@ void set_parallel_worker_conf(int worker_conf) { thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; } -PARALLEL_CONF_t get_thread_paralle_conf(void) +PARALLEL_CONF_t get_thread_parallel_conf(void) { return thread_struct.parallel_conf; } From 0511ff45dc8f9fa3ddc40f0cc5a23ffb2fba4521 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 20 Sep 2018 12:06:55 +0200 Subject: [PATCH 07/11] adding both configurable at config file and commandline --- openair2/ENB_APP/enb_config.c | 30 ++++++++++++++++++++---------- targets/RT/USER/lte-softmodem.c | 17 +++++++++++++---- targets/RT/USER/lte-softmodem.h | 11 +++++++---- targets/RT/USER/lte-uesoftmodem.c | 21 ++++++++++++++++----- 4 files changed, 56 insertions(+), 23 deletions(-) diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index bbe3ca5c2c..2d6ebc966e 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -63,6 +63,8 @@ extern uint16_t sf_ahead; extern void set_parallel_conf(int parallel_conf); extern void set_parallel_worker_conf(int worker_conf); +extern PARALLEL_CONF_t get_thread_parallel_conf(void); +extern WORKER_CONF_t get_thread_worker_conf(void); void RCconfig_flexran() { @@ -2488,8 +2490,10 @@ return 0; int RCconfig_parallel(void) { - char *parallel_conf; - char *worker_conf; + char *parallel_conf = NULL; + char *worker_conf = NULL; + extern char *parallel_config; + extern char *worker_config; paramdef_t ThreadParams[] = THREAD_CONF_DESC; paramlist_def_t THREADParamList = {THREAD_CONFIG_STRING_THREAD_STRUCT,NULL,0}; @@ -2500,19 +2504,25 @@ int RCconfig_parallel(void) { config_getlist( &THREADParamList,ThreadParams,sizeof(ThreadParams)/sizeof(paramdef_t),NULL); parallel_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); - worker_conf = strdup(*(THREADParamList.paramarray[0][THREAD_PARALLEL_IDX].strptr)); } else { - parallel_conf = "PARALLEL_RU_L1_TRX_SPLIT"; - worker_conf = "WORKER_ENABLE"; + parallel_conf = strdup("PARALLEL_RU_L1_TRX_SPLIT"); + } + if(THREADParamList.numelt>0) + { + config_getlist( &THREADParamList,ThreadParams,sizeof(ThreadParams)/sizeof(paramdef_t),NULL); + worker_conf = strdup(*(THREADParamList.paramarray[0][THREAD_WORKER_IDX].strptr)); + } + else + { + worker_conf = strdup("WORKER_ENABLE"); } - if(strcmp(parallel_conf,"PARALLEL_SINGLE_THREAD")==0) set_parallel_conf(0); - else if(strcmp(parallel_conf,"PARALLEL_RU_L1_SPLIT")==0) set_parallel_conf(1); - else if(strcmp(parallel_conf,"PARALLEL_RU_L1_TRX_SPLIT")==0) set_parallel_conf(2); - if(strcmp(worker_conf,"WORKER_DISABLE")==0) set_parallel_worker_conf(0); - else if(strcmp(worker_conf,"WORKER_ENABLE")==0) set_parallel_worker_conf(1); + + if(parallel_config == NULL) set_parallel_conf(parallel_conf); + if(worker_config == NULL) set_worker_conf(worker_conf); + return 0; } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index b9458afa1e..03871d5fc3 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -219,15 +219,22 @@ extern void init_eNB_afterRU(void); int transmission_mode=1; int emulate_rf = 0; int numerology = 0; +char *parallel_config = NULL; +char *worker_config = NULL; static THREAD_STRUCT thread_struct; -void set_parallel_conf(int parallel_conf) +void set_parallel_conf(char *parallel_conf) { - thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; + if(strcmp(parallel_conf,"PARALLEL_SINGLE_THREAD")==0) thread_struct.parallel_conf = PARALLEL_SINGLE_THREAD; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_SPLIT; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_TRX_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_TRX_SPLIT; + printf("[CONFIG] parallel conf is set to %d\n",thread_struct.parallel_conf); } -void set_parallel_worker_conf(int worker_conf) +void set_worker_conf(char *worker_conf) { - thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; + if(strcmp(worker_conf,"WORKER_DISABLE")==0) thread_struct.worker_conf = WORKER_DISABLE; + else if(strcmp(worker_conf,"WORKER_ENABLE")==0) thread_struct.worker_conf = WORKER_ENABLE; + printf("[CONFIG] worker conf is set to %d\n",thread_struct.worker_conf); } PARALLEL_CONF_t get_thread_parallel_conf(void) { @@ -562,6 +569,8 @@ static void get_options(unsigned int *start_msc) { RC.nb_nb_iot_rrc_inst=RC.nb_nb_iot_L1_inst=RC.nb_nb_iot_macrlc_inst=0; } } + if(parallel_config != NULL) set_parallel_conf(parallel_config); + if(worker_config != NULL) set_worker_conf(worker_config); } diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index 7074172a03..2b087e5456 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -93,6 +93,8 @@ #define CONFIG_HLP_NUMEROLOGY "adding numerology for 5G\n" #define CONFIG_HLP_EMULATE_RF "Emulated RF enabled(disable by defult)\n" +#define CONFIG_HLP_PARALLEL_CMD "three config for level of parallelism 'PARALLEL_SINGLE_THREAD', 'PARALLEL_RU_L1_SPLIT', or 'PARALLEL_RU_L1_TRX_SPLIT'\n" +#define CONFIG_HLP_WORKER_CMD "two option for worker 'WORKER_DISABLE' or 'WORKER_ENABLE'\n" #define CONFIG_HLP_DISABLNBIOT "disable nb-iot, even if defined in config\n" @@ -184,7 +186,9 @@ {"s" , CONFIG_HLP_SNR, 0, iptr:&snr_dB, defintval:25, TYPE_INT, 0}, \ {"numerology" , CONFIG_HLP_NUMEROLOGY, PARAMFLAG_BOOL, iptr:&numerology, defintval:0, TYPE_INT, 0}, \ {"emulate-rf" , CONFIG_HLP_EMULATE_RF, PARAMFLAG_BOOL, iptr:&emulate_rf, defintval:0, TYPE_INT, 0}, \ -{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, iptr:&nonbiotflag, defintval:0, TYPE_INT, 0} \ +{"parallel-config", CONFIG_HLP_PARALLEL_CMD,0, strptr:(char **)¶llel_config, defstrval:NULL, TYPE_STRING, 0}, \ +{"worker-config", CONFIG_HLP_WORKER_CMD, 0, strptr:(char **)&worker_config, defstrval:NULL, TYPE_STRING, 0}, \ +{"nbiot-disable", CONFIG_HLP_DISABLNBIOT, PARAMFLAG_BOOL, iptr:&nonbiotflag, defintval:0, TYPE_INT, 0} \ } #define CONFIG_HLP_FLOG "Enable online log \n" @@ -275,11 +279,10 @@ PHY_VARS_UE* init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, uint8_t abstraction_flag); void init_eNB_afterRU(void); -void thread_structure_init(void); PARALLEL_CONF_t get_thread_parallel_conf(void); WORKER_CONF_t get_thread_worker_conf(void); -void set_parallel_conf(int parallel_conf); -void set_parallel_worker_conf(int worker_conf); +void set_parallel_conf(char *parallel_conf); +void set_worker_conf(char *worker_conf); extern int stop_L1L2(module_id_t enb_id); extern int restart_L1L2(module_id_t enb_id); diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index 1613622567..c52fe130a1 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -220,15 +220,22 @@ int transmission_mode=1; int emulate_rf = 0; int numerology = 0; +char *parallel_config = NULL; +char *worker_config = NULL; static THREAD_STRUCT thread_struct; -void set_parallel_conf(int parallel_conf) +void set_parallel_conf(char *parallel_conf) { - thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; + if(strcmp(parallel_conf,"PARALLEL_SINGLE_THREAD")==0) thread_struct.parallel_conf = PARALLEL_SINGLE_THREAD; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_SPLIT; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_TRX_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_TRX_SPLIT; + printf("[CONFIG] parallel conf is set to %d\n",thread_struct.parallel_conf); } -void set_parallel_worker_conf(int worker_conf) +void set_worker_conf(char *worker_conf) { - thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; + if(strcmp(worker_conf,"WORKER_DISABLE")==0) thread_struct.worker_conf = WORKER_DISABLE; + else if(strcmp(worker_conf,"WORKER_ENABLE")==0) thread_struct.worker_conf = WORKER_ENABLE; + printf("[CONFIG] worker conf is set to %d\n",thread_struct.worker_conf); } PARALLEL_CONF_t get_thread_parallel_conf(void) { @@ -237,7 +244,7 @@ PARALLEL_CONF_t get_thread_parallel_conf(void) WORKER_CONF_t get_thread_worker_conf(void) { return thread_struct.worker_conf; -} +} /* struct for ethernet specific parameters given in eNB conf file */ eth_params_t *eth_params; @@ -599,6 +606,8 @@ static void get_options(unsigned int *start_msc) { if(nfapi_mode!=3) uecap_xer_in=1; } *//* UE with config file */ + if(parallel_config != NULL) set_parallel_conf(parallel_config); + if(worker_config != NULL) set_worker_conf(worker_config); } @@ -816,6 +825,8 @@ int main( int argc, char **argv ) for (int i=0;i 1 && simL1flag != 1) { From 2dc3dfa373fbcf3973fd99e270ec16d60c5fbc38 Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Thu, 20 Sep 2018 15:17:32 +0200 Subject: [PATCH 08/11] adding parallel config in dlsim and ulsim --- openair1/SIMULATION/LTE_PHY/dlsim.c | 18 ++++++++++++++---- openair1/SIMULATION/LTE_PHY/ulsim.c | 17 +++++++++++++---- openair2/ENB_APP/enb_config.c | 4 ++-- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index fd649ec0e4..6d85b47a10 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -82,14 +82,21 @@ double t_rx_min = 1000000000; /*!< \brief initial min process time for rx */ int n_tx_dropped = 0; /*!< \brief initial max process time for tx */ int n_rx_dropped = 0; /*!< \brief initial max process time for rx */ +char *parallel_config = NULL; +char *worker_config = NULL; static THREAD_STRUCT thread_struct; -void set_parallel_conf(int parallel_conf) +void set_parallel_conf(char *parallel_conf) { - thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; + if(strcmp(parallel_conf,"PARALLEL_SINGLE_THREAD")==0) thread_struct.parallel_conf = PARALLEL_SINGLE_THREAD; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_SPLIT; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_TRX_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_TRX_SPLIT; + printf("[CONFIG] parallel conf is set to %d\n",thread_struct.parallel_conf); } -void set_parallel_worker_conf(int worker_conf) +void set_worker_conf(char *worker_conf) { - thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; + if(strcmp(worker_conf,"WORKER_DISABLE")==0) thread_struct.worker_conf = WORKER_DISABLE; + else if(strcmp(worker_conf,"WORKER_ENABLE")==0) thread_struct.worker_conf = WORKER_ENABLE; + printf("[CONFIG] worker conf is set to %d\n",thread_struct.worker_conf); } PARALLEL_CONF_t get_thread_parallel_conf(void) { @@ -1057,6 +1064,9 @@ int main(int argc, char **argv) break; } } + if() + set_parallel_conf("PARALLEL_RU_L1_TRX_SPLIT"); + set_worker_conf("WORKER_ENABLE"); if (transmission_mode>1) pa=dBm3; printf("dlsim: tmode %d, pa %d\n",transmission_mode,pa); diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 826f185d2a..89c0d09b1d 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -97,14 +97,21 @@ nfapi_tx_request_pdu_t tx_pdu_list[MAX_NUM_TX_REQUEST_PDU]; nfapi_tx_request_t TX_req; Sched_Rsp_t sched_resp; +char *parallel_config = NULL; +char *worker_config = NULL; static THREAD_STRUCT thread_struct; -void set_parallel_conf(int parallel_conf) +void set_parallel_conf(char *parallel_conf) { - thread_struct.parallel_conf = (PARALLEL_CONF_t)parallel_conf; + if(strcmp(parallel_conf,"PARALLEL_SINGLE_THREAD")==0) thread_struct.parallel_conf = PARALLEL_SINGLE_THREAD; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_SPLIT; + else if(strcmp(parallel_conf,"PARALLEL_RU_L1_TRX_SPLIT")==0) thread_struct.parallel_conf = PARALLEL_RU_L1_TRX_SPLIT; + printf("[CONFIG] parallel conf is set to %d\n",thread_struct.parallel_conf); } -void set_parallel_worker_conf(int worker_conf) +void set_worker_conf(char *worker_conf) { - thread_struct.worker_conf = (WORKER_CONF_t)worker_conf; + if(strcmp(worker_conf,"WORKER_DISABLE")==0) thread_struct.worker_conf = WORKER_DISABLE; + else if(strcmp(worker_conf,"WORKER_ENABLE")==0) thread_struct.worker_conf = WORKER_ENABLE; + printf("[CONFIG] worker conf is set to %d\n",thread_struct.worker_conf); } PARALLEL_CONF_t get_thread_parallel_conf(void) { @@ -741,6 +748,8 @@ int main(int argc, char **argv) break; } } + set_parallel_conf("PARALLEL_RU_L1_TRX_SPLIT"); + set_worker_conf("WORKER_ENABLE"); RC.nb_L1_inst = 1; RC.nb_RU = 1; diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index 2d6ebc966e..73a7cfb9ca 100644 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -61,8 +61,8 @@ #include "enb_paramdef.h" extern uint16_t sf_ahead; -extern void set_parallel_conf(int parallel_conf); -extern void set_parallel_worker_conf(int worker_conf); +extern void set_parallel_conf(char* parallel_conf); +extern void set_worker_conf(char* worker_conf); extern PARALLEL_CONF_t get_thread_parallel_conf(void); extern WORKER_CONF_t get_thread_worker_conf(void); From 85477b4eef63920fcb9dc73417c7ef50bd042f4e Mon Sep 17 00:00:00 2001 From: Wang Tsu-Han Date: Fri, 21 Sep 2018 12:49:56 +0200 Subject: [PATCH 09/11] fixes for femoval empty function in dlsim --- openair1/SIMULATION/LTE_PHY/dlsim.c | 1 - 1 file changed, 1 deletion(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 6d85b47a10..3583c0f25e 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1064,7 +1064,6 @@ int main(int argc, char **argv) break; } } - if() set_parallel_conf("PARALLEL_RU_L1_TRX_SPLIT"); set_worker_conf("WORKER_ENABLE"); From 9a1a256a8e985b2226022efb90da32d162b52fa8 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 21 Sep 2018 15:57:09 +0200 Subject: [PATCH 10/11] Adding, as test, parallel threading conf to CI configuration files -- FDD -- basic simulator Signed-off-by: Raphael Defosseux --- ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf | 9 +++++++++ ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf | 9 +++++++++ ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf | 9 +++++++++ ci-scripts/conf_files/lte-basic-sim.conf | 9 +++++++++ 4 files changed, 36 insertions(+) diff --git a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf index 37656de755..3d79fd0986 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.100PRB.usrpb210.conf @@ -228,6 +228,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + NETWORK_CONTROLLER : { FLEXRAN_ENABLED = "no"; diff --git a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf index 01c1ca1428..b4c20ba644 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf @@ -228,6 +228,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + NETWORK_CONTROLLER : { FLEXRAN_ENABLED = "no"; diff --git a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf index eb5822cb22..a6ac1f8c14 100644 --- a/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf +++ b/ci-scripts/conf_files/enb.band7.tm1.50PRB.usrpb210.conf @@ -228,6 +228,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + NETWORK_CONTROLLER : { FLEXRAN_ENABLED = "no"; diff --git a/ci-scripts/conf_files/lte-basic-sim.conf b/ci-scripts/conf_files/lte-basic-sim.conf index f0fab0bdcb..4d4930ad88 100644 --- a/ci-scripts/conf_files/lte-basic-sim.conf +++ b/ci-scripts/conf_files/lte-basic-sim.conf @@ -229,6 +229,15 @@ RUs = ( } ); +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + NETWORK_CONTROLLER : { FLEXRAN_ENABLED = "no"; From f5d384774fe69ff0c80d8f9fe586ad5d7097ee64 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 27 Sep 2018 14:08:49 +0200 Subject: [PATCH 11/11] CI: changing basic-simulator eNB conf file to PARALLEL_SINGLE_THREAD Signed-off-by: Raphael Defosseux --- ci-scripts/conf_files/lte-basic-sim.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/conf_files/lte-basic-sim.conf b/ci-scripts/conf_files/lte-basic-sim.conf index 4d4930ad88..0b02e8f871 100644 --- a/ci-scripts/conf_files/lte-basic-sim.conf +++ b/ci-scripts/conf_files/lte-basic-sim.conf @@ -232,7 +232,7 @@ RUs = ( THREAD_STRUCT = ( { #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" - parallel_config = "PARALLEL_RU_L1_TRX_SPLIT"; + parallel_config = "PARALLEL_SINGLE_THREAD"; #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" worker_config = "WORKER_ENABLE"; }