From 3b44919d0b03f8f0a1033ac2d4b89f51c1718a63 Mon Sep 17 00:00:00 2001
From: laurent <laurent.thomas@free.fr>
Date: Tue, 27 Dec 2016 15:48:56 +0100
Subject: [PATCH] better performance measurements
---
openair2/UTIL/LOG/log.h | 435 +++++++++++++++++++++----------------
openair2/UTIL/LOG/log_if.h | 59 +----
targets/RT/USER/lte-ue.c | 120 +---------
3 files changed, 258 insertions(+), 356 deletions(-)
diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h
index 171f74da41..b15f7064ac 100644
--- a/openair2/UTIL/LOG/log.h
+++ b/openair2/UTIL/LOG/log.h
@@ -53,26 +53,6 @@
extern "C" {
#endif
- extern double cpuf;
- static inline unsigned long long rdtsc(void) {
- unsigned long long a, d;
- __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
- return (d<<32) | a;
- }
- static inline unsigned long long checkT(int timeout, char * file, int line) {
- static unsigned long long __thread last=0;
- unsigned long long cur=rdtsc();
- int microCycles=(int)(cpuf*1000);
- int duration=(int)((cur-last)/microCycles);
- if ( last!=0 && duration > timeout )
- printf("%s:%d lte-ue delay %d (exceed %d)\n", file, line,
- duration, timeout);
- last=cur;
- return cur;
- }
-
-#define check(a) checkT(a,__FILE__,__LINE__)
-
/** @defgroup _LOG LOG Generator
* @{*/
/* @}*/
@@ -96,41 +76,197 @@ extern "C" {
* @ingroup _macro
* @brief LOG defines 9 levels of messages for users. Importance of these levels decrease gradually from 0 to 8
* @{*/
-#ifndef LOG_EMERG
# define LOG_EMERG 0 /*!< \brief system is unusable */
-#endif
-#ifndef LOG_ALERT
# define LOG_ALERT 1 /*!< \brief action must be taken immediately */
-#endif
-#ifndef LOG_CRIT
# define LOG_CRIT 2 /*!< \brief critical conditions */
-#endif
-#ifndef LOG_ERR
# define LOG_ERR 3 /*!< \brief error conditions */
-#endif
-#ifndef LOG_WARNING
# define LOG_WARNING 4 /*!< \brief warning conditions */
-#endif
-#ifndef LOG_NOTICE
# define LOG_NOTICE 5 /*!< \brief normal but significant condition */
-#endif
-#ifndef LOG_INFO
# define LOG_INFO 6 /*!< \brief informational */
-#endif
-#ifndef LOG_DEBUG
# define LOG_DEBUG 7 /*!< \brief debug-level messages */
-#endif
-#ifndef LOG_FILE
# define LOG_FILE 8 /*!< \brief message sequence chart -level */
-#endif
-#ifndef LOG_TRACE
# define LOG_TRACE 9 /*!< \brief trace-level messages */
-#endif
-
#define NUM_LOG_LEVEL 10 /*!< \brief the number of message levels users have with LOG */
/* @}*/
+/** @defgroup _log_format Defined log format
+ * @ingroup _macro
+ * @brief Macro of log formats defined by LOG
+ * @{*/
+
+/* .log_format = 0x13 uncolored standard messages
+ * .log_format = 0x93 colored standard messages */
+
+#define LOG_RED "\033[1;31m" /*!< \brief VT100 sequence for bold red foreground */
+#define LOG_GREEN "\033[32m" /*!< \brief VT100 sequence for green foreground */
+#define LOG_ORANGE "\033[93m" /*!< \brief VT100 sequence for orange foreground */
+#define LOG_BLUE "\033[34m" /*!< \brief VT100 sequence for blue foreground */
+#define LOG_CYBL "\033[40;36m" /*!< \brief VT100 sequence for cyan foreground on black background */
+#define LOG_RESET "\033[0m" /*!< \brief VT100 sequence for reset (black) foreground */
+/* @}*/
+
+
+/** @defgroup _syslog_conf Macros for write in syslog.conf
+ * @ingroup _macro
+ * @brief Macros used to write lines (local/remote) in syslog.conf
+ * @{*/
+#define LOG_LOCAL 0x01
+#define LOG_REMOTE 0x02
+
+#define FLAG_COLOR 0x001 /*!< \brief defaults */
+#define FLAG_PID 0x002 /*!< \brief defaults */
+#define FLAG_COMP 0x004
+#define FLAG_THREAD 0x008 /*!< \brief all : 255/511 */
+#define FLAG_LEVEL 0x010
+#define FLAG_FUNCT 0x020
+#define FLAG_FILE_LINE 0x040
+#define FLAG_TIME 0x100
+
+#define LOG_NONE 0x00
+#define LOG_LOW 0x5
+#define LOG_MED 0x15
+#define LOG_HIGH 0x35
+#define LOG_FULL 0x75
+
+#define OAI_OK 0 /*!< \brief all ok */
+#define OAI_ERR 1 /*!< \brief generic error */
+#define OAI_ERR_READ_ONLY 2 /*!< \brief tried to write to read-only item */
+#define OAI_ERR_NOTFOUND 3 /*!< \brief something wasn't found */
+/* @}*/
+
+
+//static char *log_level_highlight_start[] = {LOG_RED, LOG_RED, LOG_RED, LOG_RED, LOG_BLUE, "", "", "", LOG_GREEN}; /*!< \brief Optional start-format strings for highlighting */
+
+//static char *log_level_highlight_end[] = {LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, "", "", "", LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
+
+typedef enum {
+ MIN_LOG_COMPONENTS = 0,
+ PHY = MIN_LOG_COMPONENTS,
+ MAC,
+ EMU,
+ OCG,
+ OMG,
+ OPT,
+ OTG,
+ OTG_LATENCY,
+ OTG_LATENCY_BG,
+ OTG_GP,
+ OTG_GP_BG,
+ OTG_JITTER,
+ RLC,
+ PDCP,
+ RRC,
+ NAS,
+ PERF,
+ OIP,
+ CLI,
+ MSC,
+ OCM,
+ UDP_,
+ GTPU,
+ SPGW,
+ S1AP,
+ SCTP,
+ HW,
+ OSA,
+ RAL_ENB,
+ RAL_UE,
+ ENB_APP,
+ FLEXRAN_AGENT,
+ TMR,
+ USIM,
+ LOCALIZE,
+ RRH,
+ X2AP,
+ MAX_LOG_COMPONENTS,
+}
+comp_name_t;
+
+//#define msg printf
+
+typedef struct {
+ char *name; /*!< \brief string name of item */
+ int value; /*!< \brief integer value of mapping */
+} mapping;
+
+
+typedef struct {
+ const char *name;
+ int level;
+ int flag;
+ int interval;
+ int fd;
+ int filelog;
+ char *filelog_name;
+
+ /* SR: make the log buffer component relative */
+ char log_buffer[MAX_LOG_TOTAL];
+} log_component_t;
+
+typedef struct {
+ unsigned int remote_ip;
+ unsigned int audit_ip;
+ int remote_level;
+ int facility;
+ int audit_facility;
+ int format;
+} log_config_t;
+
+
+typedef struct {
+ log_component_t log_component[MAX_LOG_COMPONENTS];
+ log_config_t config;
+ char* level2string[NUM_LOG_LEVEL];
+ int level;
+ int onlinelog;
+ int flag;
+ int syslog;
+ int filelog;
+ char* filelog_name;
+} log_t;
+
+typedef struct LOG_params {
+ const char *file;
+ const char *func;
+ int line;
+ int comp;
+ int level;
+ const char *format;
+ char l_buff_info [MAX_LOG_INFO];
+ int len;
+} LOG_params;
+
+#if defined(ENABLE_ITTI)
+typedef enum log_instance_type_e {
+ LOG_INSTANCE_UNKNOWN,
+ LOG_INSTANCE_ENB,
+ LOG_INSTANCE_UE,
+} log_instance_type_t;
+
+void log_set_instance_type (log_instance_type_t instance);
+#endif
+
+
+/*--- INCLUDES ---------------------------------------------------------------*/
+# include "log_if.h"
+/*----------------------------------------------------------------------------*/
+int logInit (void);
+void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...);
+void logRecord(const char *file, const char *func, int line,int comp, int level, const char *format, ...);
+int set_comp_log(int component, int level, int verbosity, int interval);
+int set_log(int component, int level, int interval);
+void set_glog(int level, int verbosity);
+void set_log_syslog(int enable);
+void set_log_onlinelog(int enable);
+void set_log_filelog(int enable);
+void set_component_filelog(int comp);
+int map_str_to_int(mapping *map, const char *str);
+char *map_int_to_str(mapping *map, int val);
+void logClean (void);
+int is_newline( char *str, int size);
+void *log_thread_function(void * list);
+
/** @defgroup _logIt logIt function
* @ingroup _macro
* @brief Macro used to call tr_log_full_ex with file, function and line information
@@ -206,169 +342,82 @@ extern "C" {
#define LOG_RETURN(c,x) do {uint32_t __rv;__rv=(unsigned int)(x);LOG_T(c,"Returning %08x\n", __rv);return((typeof(x))__rv);}while(0) /*!< \brief Macro to log a function exit, including integer value, then to return a value to the calling function */
/* @}*/
-
-/** @defgroup _log_format Defined log format
- * @ingroup _macro
- * @brief Macro of log formats defined by LOG
- * @{*/
-
-/* .log_format = 0x13 uncolored standard messages
- * .log_format = 0x93 colored standard messages */
-
-#define LOG_RED "\033[1;31m" /*!< \brief VT100 sequence for bold red foreground */
-#define LOG_GREEN "\033[32m" /*!< \brief VT100 sequence for green foreground */
-#define LOG_ORANGE "\033[93m" /*!< \brief VT100 sequence for orange foreground */
-#define LOG_BLUE "\033[34m" /*!< \brief VT100 sequence for blue foreground */
-#define LOG_CYBL "\033[40;36m" /*!< \brief VT100 sequence for cyan foreground on black background */
-#define LOG_RESET "\033[0m" /*!< \brief VT100 sequence for reset (black) foreground */
-/* @}*/
-
-
-/** @defgroup _syslog_conf Macros for write in syslog.conf
- * @ingroup _macro
- * @brief Macros used to write lines (local/remote) in syslog.conf
- * @{*/
-#define LOG_LOCAL 0x01
-#define LOG_REMOTE 0x02
-
-#define FLAG_COLOR 0x001 /*!< \brief defaults */
-#define FLAG_PID 0x002 /*!< \brief defaults */
-#define FLAG_COMP 0x004
-#define FLAG_THREAD 0x008 /*!< \brief all : 255/511 */
-#define FLAG_LEVEL 0x010
-#define FLAG_FUNCT 0x020
-#define FLAG_FILE_LINE 0x040
-#define FLAG_TIME 0x100
-
-#define LOG_NONE 0x00
-#define LOG_LOW 0x5
-#define LOG_MED 0x15
-#define LOG_HIGH 0x35
-#define LOG_FULL 0x75
-
-#define OAI_OK 0 /*!< \brief all ok */
-#define OAI_ERR 1 /*!< \brief generic error */
-#define OAI_ERR_READ_ONLY 2 /*!< \brief tried to write to read-only item */
-#define OAI_ERR_NOTFOUND 3 /*!< \brief something wasn't found */
-/* @}*/
-
-
-//static char *log_level_highlight_start[] = {LOG_RED, LOG_RED, LOG_RED, LOG_RED, LOG_BLUE, "", "", "", LOG_GREEN}; /*!< \brief Optional start-format strings for highlighting */
-
-//static char *log_level_highlight_end[] = {LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, LOG_RESET, "", "", "", LOG_RESET}; /*!< \brief Optional end-format strings for highlighting */
-
-typedef enum {
- MIN_LOG_COMPONENTS = 0,
- PHY = MIN_LOG_COMPONENTS,
- MAC,
- EMU,
- OCG,
- OMG,
- OPT,
- OTG,
- OTG_LATENCY,
- OTG_LATENCY_BG,
- OTG_GP,
- OTG_GP_BG,
- OTG_JITTER,
- RLC,
- PDCP,
- RRC,
- NAS,
- PERF,
- OIP,
- CLI,
- MSC,
- OCM,
- UDP_,
- GTPU,
- SPGW,
- S1AP,
- SCTP,
- HW,
- OSA,
- RAL_ENB,
- RAL_UE,
- ENB_APP,
- FLEXRAN_AGENT,
- TMR,
- USIM,
- LOCALIZE,
- RRH,
- X2AP,
- MAX_LOG_COMPONENTS,
+static inline unsigned long long rdtsc(void) {
+ unsigned long long a, d;
+ __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d));
+ return (d<<32) | a;
}
-comp_name_t;
-
-//#define msg printf
-
-typedef struct {
- char *name; /*!< \brief string name of item */
- int value; /*!< \brief integer value of mapping */
-} mapping;
-
-typedef struct {
- const char *name;
- int level;
- int flag;
- int interval;
- int fd;
- int filelog;
- char *filelog_name;
-
- /* SR: make the log buffer component relative */
- char log_buffer[MAX_LOG_TOTAL];
-} log_component_t;
+#define DEBUG_REALTIME 1
+#if DEBUG_REALTIME
-typedef struct {
- unsigned int remote_ip;
- unsigned int audit_ip;
- int remote_level;
- int facility;
- int audit_facility;
- int format;
-} log_config_t;
+extern double cpuf;
+static inline unsigned long long checkT(int timeout, char * file, int line) {
+ static unsigned long long __thread last=0;
+ unsigned long long cur=rdtsc();
+ int microCycles=(int)(cpuf*1000);
+ int duration=(int)((cur-last)/microCycles);
+ if ( last!=0 && duration > timeout )
+ printf("%s:%d lte-ue delay %d (exceed %d)\n", file, line,
+ duration, timeout);
+ last=cur;
+ return cur;
+}
-typedef struct {
- log_component_t log_component[MAX_LOG_COMPONENTS];
- log_config_t config;
- char* level2string[NUM_LOG_LEVEL];
- int level;
- int onlinelog;
- int flag;
- int syslog;
- int filelog;
- char* filelog_name;
-} log_t;
+typedef struct m {
+ unsigned long long iterations;
+ unsigned long long sum;
+ unsigned long long maxArray[11];
+} Meas;
+
+static inline void printMeas(char * txt, Meas *M, int period) {
+ if (M->iterations%period == 0 ) {
+ char txt2[512];
+ sprintf(txt2,"%s avg=%llu, iterations=%llu, max=%llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
+ txt, M->sum/M->iterations,M->iterations,
+ M->maxArray[1],M->maxArray[2], M->maxArray[3],M->maxArray[4],
+ M->maxArray[5], M->maxArray[6],M->maxArray[7], M->maxArray[8],M->maxArray[9],M->maxArray[10]);
+ LOG_W(PHY,txt2);
+ }
+}
-typedef struct LOG_params {
- const char *file;
- const char *func;
- int line;
- int comp;
- int level;
- const char *format;
- char l_buff_info [MAX_LOG_INFO];
- int len;
-} LOG_params;
+static inline int cmpint(const void* a, const void* b) {
+ unsigned long long* aa=(unsigned long long*)a;
+ unsigned long long* bb=(unsigned long long*)b;
+ return (int)(*aa-*bb);
+}
+static inline void updateTimes(unsigned long long start, Meas *M, int period, char * txt) {
+ if (start!=0) {
+ unsigned long long end=rdtsc();
+ long long diff=(end-start)/(cpuf*1000);
+ M->maxArray[0]=diff;
+ M->sum+=diff;
+ M->iterations++;
+ qsort(M->maxArray, 11, sizeof(unsigned long long), cmpint);
+ printMeas(txt,M,period);
+ }
+}
-#if defined(ENABLE_ITTI)
-typedef enum log_instance_type_e {
- LOG_INSTANCE_UNKNOWN,
- LOG_INSTANCE_ENB,
- LOG_INSTANCE_UE,
-} log_instance_type_t;
+#define check(a) checkT(a,__FILE__,__LINE__)
+#define initRefTimes(a) static __thread Meas a= {0}
+#define pickTime(a) unsigned long long a=rdtsc()
+#define readTime(a) a
+#define initStaticTime(a) static __thread unsigned long long a={0}
+#define pickStaticTime(a) a=rdtsc()
-void log_set_instance_type (log_instance_type_t instance);
+#else
+#define check(a) do {} while (0)
+#define initRefTimes(a) do {} while (0)
+#define initStaticTime(a) do {} while (0)
+#define pickTime(a) do {} while (0)
+#define readTime(a) 0
+#define pickStaticTime(a) do {} while (0)
+#define updateTimes(a,b,c,d) do {} while (0)
+#define printMeas(a,b,c) do {} while (0)
#endif
-int logInit (void);
-/*--- INCLUDES ---------------------------------------------------------------*/
-# include "log_if.h"
-/*----------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
diff --git a/openair2/UTIL/LOG/log_if.h b/openair2/UTIL/LOG/log_if.h
index 1b447a7f60..6338fab829 100644
--- a/openair2/UTIL/LOG/log_if.h
+++ b/openair2/UTIL/LOG/log_if.h
@@ -27,59 +27,8 @@
* \warning This component can be runned only in user-space
* @ingroup routing
*/
-#ifndef __LOG_IF_H__
-# define __LOG_IF_H__
-
-
-/*--- INCLUDES ---------------------------------------------------------------*/
-# include "log.h"
-/*----------------------------------------------------------------------------*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-# ifdef COMPONENT_LOG
-# ifdef COMPONENT_LOG_IF
-# define private_log_if(x) x
-# define friend_log_if(x) x
-# define public_log_if(x) x
-# else
-# define private_log_if(x)
-# define friend_log_if(x) extern x
-# define public_log_if(x) extern x
-# endif
-# else
-# define private_log_if(x)
-# define friend_log_if(x)
-# define public_log_if(x) extern x
-# endif
-
-/** @defgroup _log_if Interfaces of LOG
- * @{*/
-
-//public_log_if( log_t *g_log;)
-
-public_log_if( int logInit (void);)
-public_log_if( void logRecord_mt(const char *file, const char *func, int line,int comp, int level, const char *format, ...);)
-public_log_if( void logRecord(const char *file, const char *func, int line,int comp, int level, const char *format, ...);)
-public_log_if( int set_comp_log(int component, int level, int verbosity, int interval);)
-public_log_if( int set_log(int component, int level, int interval);)
-public_log_if( void set_glog(int level, int verbosity);)
-public_log_if( void set_log_syslog(int enable);)
-public_log_if( void set_log_onlinelog(int enable);)
-public_log_if( void set_log_filelog(int enable);)
-public_log_if( void set_component_filelog(int comp);)
-public_log_if( int map_str_to_int(mapping *map, const char *str);)
-public_log_if( char *map_int_to_str(mapping *map, int val);)
-public_log_if( void logClean (void); )
-public_log_if( int is_newline( char *str, int size);)
-public_log_if( void *log_thread_function(void * list);)
-
-/* @}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+// LTS: kept this file for compatibility
+// this file was probably a trial to separate internal functions and external ones
+// but it has never been finished, most source code include directly log.h (not log_if.h)
+#include "log.h"
diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c
index 6e588f7f3c..b398d5127e 100644
--- a/targets/RT/USER/lte-ue.c
+++ b/targets/RT/USER/lte-ue.c
@@ -75,101 +75,6 @@
#include "UTIL/LOG/vcd_signal_dumper.h"
#include "UTIL/OPT/opt.h"
-
-#define DEBUG_REALTIME 1
-#if DEBUG_REALTIME
-
-typedef struct latency_stat {
- uint64_t counter;
- uint64_t stat1100;
- uint64_t stat1200;
- uint64_t stat1500;
- uint64_t stat2000;
- uint64_t stat3000;
-} latency_stat_t;
-
-static inline void saif_meas(int frame_rx) {
- static latency_stat_t __thread latency_stat;
- static struct timespec __thread last= {0};
- struct timespec now;
- clock_gettime(CLOCK_MONOTONIC_RAW, &now);
- if ( last.tv_sec ) {
- uint64_t diffTime = ((uint64_t)now.tv_sec *1000 *1000 *1000 + now.tv_nsec) -
- ((uint64_t)last.tv_sec *1000 *1000 *1000 + last.tv_nsec);
- diffTime/=1000;
- latency_stat.counter++;
- if ( diffTime >= 1100 ) {
- if (diffTime < 1200 )
- latency_stat.stat1100++;
- else if ( diffTime < 1500 )
- latency_stat.stat1200++;
- else if ( diffTime < 2000 )
- latency_stat.stat1500++;
- else if ( diffTime < 3000 )
- latency_stat.stat2000++;
- else
- latency_stat.stat3000++;
- }
- if ( diffTime>=1100 || latency_stat.counter%20000==0 ) {
- time_t current=time(NULL);
- LOG_W(HW,
- "%.2f delay=%llu Period stats %2.6f%% below 100µs\ncumul of events: 1100=%ld 1200=%ld 1500=%ld 2000=%ld >3000=%ld - (frame_rx=%d) - %s",
- now.tv_sec+(double)now.tv_nsec/1e9,
- diffTime,
- (latency_stat.counter-latency_stat.stat1100-latency_stat.stat1200-
- latency_stat.stat1500-latency_stat.stat2000-latency_stat.stat3000)/
- (float)latency_stat.counter *100,
- latency_stat.stat1100, latency_stat.stat1200,
- latency_stat.stat1500, latency_stat.stat2000,
- latency_stat.stat3000,
- frame_rx, ctime(¤t));
- fflush(stdout);
- }
-
- }
- last=now;
-}
-
-typedef struct m {
- unsigned long long iterations;
- unsigned long long sum;
- unsigned long long maxArray[11];
-} Meas;
-
-
-void printMeas(char * txt, Meas *M, int period) {
- if (M->iterations%period == 0 ) {
- char txt2[512];
- sprintf(txt2,"%s avg=%llu, iterations=%llu, max=%llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu/%llu\n",
- txt, M->sum/M->iterations,M->iterations,
- M->maxArray[1],M->maxArray[2], M->maxArray[3],M->maxArray[4],
- M->maxArray[5], M->maxArray[6],M->maxArray[7], M->maxArray[8],M->maxArray[9],M->maxArray[10]);
- LOG_W(PHY,txt2);
- }
-}
-
-int cmpint(const void* a, const void* b) {
- unsigned long long* aa=(unsigned long long*)a;
- unsigned long long* bb=(unsigned long long*)b;
- return (int)(*aa-*bb);
-}
-
-void updateTimes(unsigned long long start, Meas *M, int period, char * txt) {
- unsigned long long end=rdtsc();
- long long diff=(end-start)/(cpuf*1000);
- M->maxArray[0]=diff;
- M->sum+=diff;
- M->iterations++;
- qsort(M->maxArray, 11, sizeof(unsigned long long), cmpint);
- printMeas(txt,M,period);
-}
-
-#else
-#define check(a) do {} while (0)
-#define saif_meas(a) do {} while (0)
-#define update_max_times(a,b) do {} while (0)
-#define print_meas(a,b) do {} while (0)
-#endif
/* End of Changed by SYRTEM */
#define FRAME_PERIOD 100000000ULL
@@ -742,9 +647,10 @@ static void *UE_thread_rxn_txnp4(void *arg) {
instance_cnt_rxtx=proc->subframe_rx;
AssertFatal(pthread_mutex_unlock(&proc->mutex_rxtx) ==0,"");
- static __thread Meas t2= {0}, t3= {0};
- unsigned long long current=rdtsc();
- updateTimes(proc->gotIQs, &t2, 10000, "saif: Delay to wake up UE_Thread_Rx (case 2)");
+ initRefTimes(t2);
+ initRefTimes(t3);
+ pickTime(current);
+ updateTimes(proc->gotIQs, &t2, 10000, "Delay to wake up UE_Thread_Rx (case 2)");
// Process Rx data for one sub-frame
lte_subframe_t sf_type = subframe_select( &UE->frame_parms, proc->subframe_rx);
@@ -812,7 +718,7 @@ static void *UE_thread_rxn_txnp4(void *arg) {
(UE->frame_parms.frame_type == TDD))
if (UE->mode != loop_through_memory)
phy_procedures_UE_S_TX(UE,0,0,no_relay);
- updateTimes(current, &t3, 10000, "saif: Delay to process sub-frame (case 3)");
+ updateTimes(current, &t3, 10000, "Delay to process sub-frame (case 3)");
}
@@ -1002,15 +908,15 @@ void *UE_thread(void *arg) {
if ( first_symbols <0 )
LOG_E(PHY,"can't compensate: diff =%d\n", first_symbols);
}
- unsigned long long gotIQs=rdtsc();
+ pickTime(gotIQs);
// operate on thread sf mod 2
AssertFatal(pthread_mutex_lock(&proc->mutex_rxtx) ==0,"");
if(sub_frame == 0) {
UE->proc.proc_rxtx[0].frame_rx++;
UE->proc.proc_rxtx[1].frame_rx++;
}
- UE->proc.proc_rxtx[0].gotIQs=gotIQs;
- UE->proc.proc_rxtx[1].gotIQs=gotIQs;
+ UE->proc.proc_rxtx[0].gotIQs=readTime(gotIQs);
+ UE->proc.proc_rxtx[1].gotIQs=readTime(gotIQs);
proc->subframe_rx=sub_frame;
proc->subframe_tx=(sub_frame+4)%10;
proc->frame_tx = proc->frame_rx + (proc->subframe_rx>5?1:0);
@@ -1020,12 +926,10 @@ void *UE_thread(void *arg) {
AssertFatal (pthread_cond_signal(&proc->cond_rxtx) ==0 ,"");
AssertFatal(pthread_mutex_unlock(&proc->mutex_rxtx) ==0,"");
- static __thread Meas t1= {0};
- static unsigned long long lastTime=0;
- if ( lastTime != 0 )
- updateTimes(lastTime, &t1, 20000, "saif: Delay between two IQ acquisitions (case 1)");
- lastTime=rdtsc();
- saif_meas(proc->frame_rx);
+ initRefTimes(t1);
+ initStaticTime(lastTime);
+ updateTimes(lastTime, &t1, 20000, "Delay between two IQ acquisitions (case 1)");
+ pickStaticTime(lastTime);
} else {
printf("Processing subframe %d",proc->subframe_rx);
--
GitLab