diff --git a/executables/main-fs6.c b/executables/main-fs6.c index e39fad1c04..0dbd9a3b45 100644 --- a/executables/main-fs6.c +++ b/executables/main-fs6.c @@ -86,7 +86,6 @@ static inline void measTransportTime(uint64_t DuSend, uint64_t CuMicroSec, Meas if (DuSend!=0) { uint64_t end=rdtsc(); long long diff=(end-DuSend)/(cpuf*1000)-CuMicroSec; - LOG_E(HW, "total: %f, cu time %lu\n", (end-DuSend)/(cpuf*1000), CuMicroSec); M->maxArray[0]=diff; M->sum+=diff; M->iterations++; @@ -1344,24 +1343,26 @@ void *DL_du_fs6(void *arg) { lastTS+ru->eNB_list[i]->frame_parms.samples_per_tti, hUDP(bufferZone)->timestamp); } - pickStaticTime(begingProcessing); + + pickStaticTime(begingProcessing); lastTS=hUDP(bufferZone)->timestamp; setAllfromTS(hUDP(bufferZone)->timestamp - sf_ahead*ru->eNB_list[i]->frame_parms.samples_per_tti, &L1_proc); - measTransportTime(hDL(bufferZone)->DuClock, hDL(bufferZone)->CuSpentMicroSec, - &transportTime, 1000, false, "Transport time, to CU + from CU for one subframe"); + measTransportTime(hDL(bufferZone)->DuClock, hDL(bufferZone)->CuSpentMicroSec, + &transportTime, 1000, false, "Transport time, to CU + from CU for one subframe"); phy_procedures_eNB_TX_fromsplit( bufferZone, nb_blocks, ru->eNB_list[i], &L1_proc, 1); - updateTimesReset(begingProcessing, &DuHigh, 1000, false, "DU high layer1 processing for DL"); + updateTimesReset(begingProcessing, &DuHigh, 1000, false, "DU high layer1 processing for DL"); } else LOG_E(PHY,"DL not received for subframe\n"); } + pickStaticTime(begingProcessing); feptx_prec(ru, &L1_proc); feptx_ofdm(ru, &L1_proc); tx_rf(ru, &L1_proc); updateTimesReset(begingProcessing, &DuLow, 1000, false, "DU low layer1 processing for DL"); - - if ( IS_SOFTMODEM_RFSIM ) - return NULL; + + if ( IS_SOFTMODEM_RFSIM ) + return NULL; } return NULL; @@ -1425,21 +1426,21 @@ void DL_cu_fs6(RU_t *ru, L1_rxtx_proc_t *proc, uint64_t DuClock, uint64_t start hUDP(bufferZone)->blockID=0; hUDP(bufferZone)->contentBytes=sizeof(fs6_dl_t); } + hDL(bufferZone)->DuClock=DuClock; hDL(bufferZone)->CuSpentMicroSec=(rdtsc()-startCycle)/(cpuf*1000); - sendSubFrame(&sockFS6, bufferZone, sizeof(fs6_dl_t), CTsentCUv0 ); return; } -void UL_cu_fs6(RU_t *ru, L1_rxtx_proc_t *proc, uint64_t *TS, uint64_t * DuClock, uint64_t * startProcessing) { +void UL_cu_fs6(RU_t *ru, L1_rxtx_proc_t *proc, uint64_t *TS, uint64_t *DuClock, uint64_t *startProcessing) { initBufferZone(bufferZone); initStaticTime(begingWait); initRefTimes(fullLoop); pickStaticTime(begingWait); int nb_blocks=receiveSubFrame(&sockFS6, bufferZone, sizeof(bufferZone), CTsentDUv0 ); * DuClock=hUDP(bufferZone)->senderClock; - * startProcessing=rdtsc(); + * startProcessing=rdtsc(); updateTimesReset(begingWait, &fullLoop, 1000, false, "CU wait DU"); if (nb_blocks ==0) { @@ -1485,8 +1486,8 @@ void *cu_fs6(void *arg) { remoteIP=DU_IP; AssertFatal(createUDPsock(NULL, CU_PORT, remoteIP, DU_PORT, &sockFS6), ""); - L1_rxtx_proc_t L1proc= {0}; + if ( strlen(get_softmodem_params()->threadPoolConfig) > 0 ) initTpool(get_softmodem_params()->threadPoolConfig, &L1proc.threadPool, true); else @@ -1494,7 +1495,6 @@ void *cu_fs6(void *arg) { initNotifiedFIFO(&L1proc.respEncode); initNotifiedFIFO(&L1proc.respDecode); - uint64_t timeStamp=0; initStaticTime(begingWait); initStaticTime(begingWait2); @@ -1548,16 +1548,19 @@ void *du_fs6(void *arg) { initRefTimes(waitRxAndProcessingUL); initRefTimes(fullLoop); pthread_t t; - if ( !IS_SOFTMODEM_RFSIM ) - threadCreate(&t, DL_du_fs6, (void *)ru, "MainDuTx", -1, OAI_PRIORITY_RT_MAX); + + if ( !IS_SOFTMODEM_RFSIM ) + threadCreate(&t, DL_du_fs6, (void *)ru, "MainDuTx", -1, OAI_PRIORITY_RT_MAX); while(1) { L1_rxtx_proc_t L1proc; updateTimesReset(begingWait, &fullLoop, 1000, true,"DU for full SubFrame (must be less 1ms)"); pickStaticTime(begingWait); UL_du_fs6(ru, &L1proc); - if ( IS_SOFTMODEM_RFSIM ) - DL_du_fs6((void *)ru); + + if ( IS_SOFTMODEM_RFSIM ) + DL_du_fs6((void *)ru); + updateTimesReset(begingWait, &waitRxAndProcessingUL, 1000, true,"DU Time in wait Rx + Ul processing"); } diff --git a/executables/main-ocp.c b/executables/main-ocp.c index fe36d89bc4..2fad1bf08f 100644 --- a/executables/main-ocp.c +++ b/executables/main-ocp.c @@ -688,7 +688,7 @@ static void *ru_thread( void *param ) { setbuf(stdout, NULL); setbuf(stderr, NULL); RU_t *ru = (RU_t *)param; - L1_rxtx_proc_t L1proc={0}; + L1_rxtx_proc_t L1proc= {0}; L1_rxtx_proc_t *proc=&L1proc; if ( strlen(get_softmodem_params()->threadPoolConfig) > 0 ) diff --git a/executables/transport_split.c b/executables/transport_split.c index ee19db082f..1ed95db7a0 100644 --- a/executables/transport_split.c +++ b/executables/transport_split.c @@ -58,8 +58,10 @@ bool createUDPsock (char *sourceIP, char *sourcePort, char *destIP, char *destPo int enable=1; AssertFatal(setsockopt(result->sockHandler, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable))==0,""); struct timeval tv= {0,UDP_TIMEOUT}; + if (IS_SOFTMODEM_RFSIM) tv.tv_sec=2; //debug: wait 2 seconds for human understanding + AssertFatal(setsockopt(result->sockHandler, SOL_SOCKET, SO_RCVTIMEO,&tv,sizeof(tv)) ==0,""); // Make a send/recv buffer larger than a a couple of subframe // so the kernel will store for us in and out paquets @@ -118,9 +120,9 @@ int receiveSubFrame(UDPsock_t *sock, void *bufferZone, int bufferSize, uint16_t rcved++; bufferZone+=ret; } - LOG_D(HW,"Received: blocks: %d/%d, size %d, TS: %lu\n", - rcved, bufOrigin->nbBlocks, ret, bufOrigin->timestamp); + LOG_D(HW,"Received: blocks: %d/%d, size %d, TS: %lu\n", + rcved, bufOrigin->nbBlocks, ret, bufOrigin->timestamp); } while ( rcved == 0 || rcved < bufOrigin->nbBlocks ); return rcved; @@ -159,11 +161,10 @@ int sendSubFrame(UDPsock_t *sock, void *bufferZone, ssize_t secondHeaderSize, ui sz, ret, errno, strerror(errno)); LOG_D(HW,"Sent: TS: %lu, blocks %d/%d, block size : %d \n", - UDPheader->timestamp, UDPheader->nbBlocks-nbBlocks, UDPheader->nbBlocks, sz); - + UDPheader->timestamp, UDPheader->nbBlocks-nbBlocks, UDPheader->nbBlocks, sz); bufferZone+=sz; nbBlocks--; } while (nbBlocks); - return 0; + return 0; }