Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wangwenhui
OpenXG-RAN
Commits
47abf562
Commit
47abf562
authored
Dec 06, 2019
by
laurent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add FS6 transport time measurement
parent
08ea6180
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
80 additions
and
34 deletions
+80
-34
common/config/config_userapi.c
common/config/config_userapi.c
+1
-1
executables/main-fs6.c
executables/main-fs6.c
+50
-10
executables/main-ocp.c
executables/main-ocp.c
+1
-1
executables/split_headers.h
executables/split_headers.h
+3
-0
executables/transport_split.c
executables/transport_split.c
+1
-0
nfapi/oai_integration/nfapi.c
nfapi/oai_integration/nfapi.c
+1
-1
openair2/UTIL/OPT/probe.c
openair2/UTIL/OPT/probe.c
+3
-3
targets/ARCH/rfsimulator/simulator.c
targets/ARCH/rfsimulator/simulator.c
+6
-4
targets/RT/USER/lte-softmodem-common.c
targets/RT/USER/lte-softmodem-common.c
+9
-9
targets/RT/USER/lte-uesoftmodem.c
targets/RT/USER/lte-uesoftmodem.c
+5
-5
No files found.
common/config/config_userapi.c
View file @
47abf562
...
...
@@ -81,7 +81,7 @@ char *config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length) {
}
if
(
*
ptr
==
NULL
)
{
*
ptr
=
malloc
(
length
);
*
ptr
=
malloc
(
length
>
40
?
length
:
40
);
// LTS: dummy fix, waiting Francois full fix in 4G branch
if
(
*
ptr
!=
NULL
)
{
memset
(
*
ptr
,
0
,
length
);
...
...
executables/main-fs6.c
View file @
47abf562
...
...
@@ -82,7 +82,34 @@ static inline void updateTimesReset(uint64_t start, Meas *M, int period, bool Ma
}
}
static
inline
void
measTransportTime
(
uint64_t
DuSend
,
uint64_t
CuMicroSec
,
Meas
*
M
,
int
period
,
bool
MaxMin
,
char
*
txt
)
{
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
++
;
if
(
MaxMin
)
qsort
(
M
->
maxArray
,
11
,
sizeof
(
uint64_t
),
cmpint
);
else
qsort
(
M
->
maxArray
,
11
,
sizeof
(
uint64_t
),
cmpintRev
);
printMeas2
(
txt
,
M
,
period
,
MaxMin
);
if
(
M
->
iterations
%
period
==
0
)
{
bzero
(
M
,
sizeof
(
*
M
));
if
(
!
MaxMin
)
for
(
int
i
=
0
;
i
<
11
;
i
++
)
M
->
maxArray
[
i
]
=
INT_MAX
;
}
}
}
#define ceil16_bytes(a) ((((a+15)/16)*16)/8)
static
void
fs6Dlunpack
(
void
*
out
,
void
*
in
,
int
szUnpacked
)
{
static
uint64_t
*
lut
=
NULL
;
...
...
@@ -1297,12 +1324,16 @@ void *DL_du_fs6(void *arg) {
RU_t
*
ru
=
(
RU_t
*
)
arg
;
static
uint64_t
lastTS
;
L1_rxtx_proc_t
L1_proc
=
{
0
};
initStaticTime
(
begingWait
);
initStaticTime
(
begingProcessing
);
initRefTimes
(
fullLoop
);
initRefTimes
(
DuHigh
);
initRefTimes
(
DuLow
);
initRefTimes
(
transportTime
);
while
(
1
)
{
for
(
int
i
=
0
;
i
<
ru
->
num_eNB
;
i
++
)
{
initBufferZone
(
bufferZone
);
initStaticTime
(
begingWait
);
initRefTimes
(
fullLoop
);
pickStaticTime
(
begingWait
);
int
nb_blocks
=
receiveSubFrame
(
&
sockFS6
,
bufferZone
,
sizeof
(
bufferZone
),
CTsentCUv0
);
updateTimesReset
(
begingWait
,
&
fullLoop
,
1000
,
false
,
"DU wait CU"
);
...
...
@@ -1313,18 +1344,22 @@ void *DL_du_fs6(void *arg) {
lastTS
+
ru
->
eNB_list
[
i
]
->
frame_parms
.
samples_per_tti
,
hUDP
(
bufferZone
)
->
timestamp
);
}
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"
);
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"
);
}
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
;
}
...
...
@@ -1371,7 +1406,7 @@ void UL_du_fs6(RU_t *ru, L1_rxtx_proc_t *proc) {
}
}
void
DL_cu_fs6
(
RU_t
*
ru
,
L1_rxtx_proc_t
*
proc
)
{
void
DL_cu_fs6
(
RU_t
*
ru
,
L1_rxtx_proc_t
*
proc
,
uint64_t
DuClock
,
uint64_t
startCycle
)
{
// Fixme: datamodel issue
PHY_VARS_eNB
*
eNB
=
RC
.
eNB
[
0
][
0
];
pthread_mutex_lock
(
&
eNB
->
UL_INFO_mutex
);
...
...
@@ -1390,17 +1425,21 @@ void DL_cu_fs6(RU_t *ru, L1_rxtx_proc_t *proc) {
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
)
{
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
();
updateTimesReset
(
begingWait
,
&
fullLoop
,
1000
,
false
,
"CU wait DU"
);
if
(
nb_blocks
==
0
)
{
...
...
@@ -1462,15 +1501,16 @@ void *cu_fs6(void *arg) {
initRefTimes
(
waitDUAndProcessingUL
);
initRefTimes
(
makeSendDL
);
initRefTimes
(
fullLoop
);
uint64_t
DuClock
=
0
,
startProcessing
=
0
;
while
(
1
)
{
timeStamp
+=
ru
->
frame_parms
.
samples_per_tti
;
updateTimesReset
(
begingWait
,
&
fullLoop
,
1000
,
true
,
"CU for full SubFrame (must be less 1ms)"
);
pickStaticTime
(
begingWait
);
UL_cu_fs6
(
ru
,
&
L1proc
,
&
timeStamp
,
&
DuClock
,
&
startProcessing
);
updateTimesReset
(
begingWait
,
&
waitDUAndProcessingUL
,
1000
,
true
,
"CU Time in wait Rx + Ul processing"
);
UL_cu_fs6
(
ru
,
&
L1proc
,
&
timeStamp
);
pickStaticTime
(
begingWait2
);
DL_cu_fs6
(
ru
,
&
L1proc
);
DL_cu_fs6
(
ru
,
&
L1proc
,
DuClock
,
startProcessing
);
updateTimesReset
(
begingWait2
,
&
makeSendDL
,
1000
,
true
,
"CU Time in DL build+send"
);
}
...
...
executables/main-ocp.c
View file @
47abf562
...
...
@@ -613,7 +613,7 @@ void rx_rf(RU_t *ru, L1_rxtx_proc_t *proc) {
#endif
}
if
(
timestamp_rx
-
old_ts
!=
fp
->
samples_per_tti
)
{
if
(
old_ts
!=
0
&&
timestamp_rx
-
old_ts
!=
fp
->
samples_per_tti
)
{
LOG_E
(
HW
,
"impossible shift in rx stream, rx: %ld, previous rx distance: %ld, should be %d
\n
"
,
timestamp_rx
,
proc
->
timestamp_rx
-
old_ts
,
fp
->
samples_per_tti
);
//ru->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti);
//proc->timestamp_rx = ts-ru->ts_offset;
...
...
executables/split_headers.h
View file @
47abf562
...
...
@@ -36,6 +36,7 @@ typedef struct commonUDP_s {
uint16_t
blockID
;
// id: 0..nbBocks-1
uint16_t
contentType
;
// defines the content format
uint16_t
contentBytes
;
// will be sent in a UDP packet, so must be < 2^16 bytes
uint64_t
senderClock
;
}
commonUDP_t
;
// FS6 UL common header (DU to CU)
...
...
@@ -57,6 +58,8 @@ typedef struct {
int
num_mdci
;
int
amp
;
LTE_eNB_PHICH
phich_vars
;
uint64_t
DuClock
;
uint64_t
CuSpentMicroSec
;
}
fs6_dl_t
;
// a value to type all sub packets,
...
...
executables/transport_split.c
View file @
47abf562
...
...
@@ -129,6 +129,7 @@ int receiveSubFrame(UDPsock_t *sock, void *bufferZone, int bufferSize, uint16_t
int
sendSubFrame
(
UDPsock_t
*
sock
,
void
*
bufferZone
,
ssize_t
secondHeaderSize
,
uint16_t
contentType
)
{
commonUDP_t
*
UDPheader
=
(
commonUDP_t
*
)
bufferZone
;
UDPheader
->
contentType
=
contentType
;
UDPheader
->
senderClock
=
rdtsc
();
int
nbBlocks
=
UDPheader
->
nbBlocks
;
int
blockId
=
0
;
...
...
nfapi/oai_integration/nfapi.c
View file @
47abf562
...
...
@@ -29,7 +29,7 @@ typedef struct {
nfapi_mode_t
nfapi_mode
;
}
nfapi_params_t
;
static
nfapi_params_t
nfapi_params
;
static
nfapi_params_t
nfapi_params
=
{
0
}
;
void
set_thread_priority
(
int
priority
)
{
//printf("%s(priority:%d)\n", __FUNCTION__, priority);
...
...
openair2/UTIL/OPT/probe.c
View file @
47abf562
...
...
@@ -98,8 +98,8 @@ int opt_enabled=0;
//static unsigned char g_PDUBuffer[1600];
//static unsigned int g_PDUOffset;
static
char
*
in_ip
;
static
char
*
in_path
;
static
char
in_ip
[
128
]
=
{
0
}
;
static
char
in_path
[
128
]
=
{
0
}
;
FILE
*
file_fd
=
NULL
;
pcap_hdr_t
file_header
=
{
0xa1b2c3d4
,
/* magic number */
...
...
@@ -450,7 +450,7 @@ int init_opt(void) {
char
*
in_type
=
NULL
;
paramdef_t
opt_params
[]
=
OPT_PARAMS_DESC
;
checkedparam_t
opt_checkParams
[]
=
OPTPARAMS_CHECK_DESC
;
uint16_t
in_port
;
uint16_t
in_port
=
0
;
config_set_checkfunctions
(
opt_params
,
opt_checkParams
,
sizeof
(
opt_params
)
/
sizeof
(
paramdef_t
));
config_get
(
opt_params
,
sizeof
(
opt_params
)
/
sizeof
(
paramdef_t
),
OPT_CONFIGPREFIX
);
...
...
targets/ARCH/rfsimulator/simulator.c
View file @
47abf562
...
...
@@ -346,7 +346,8 @@ static int rfsimulator_write_internal(rfsimulator_state_t *t, openair0_timestamp
if
(
t
->
lastWroteTS
!=
0
&&
abs
((
double
)
t
->
lastWroteTS
-
timestamp
)
>
(
double
)
CirSize
)
LOG_E
(
HW
,
"Discontinuous TX gap too large Tx:%lu, %lu
\n
"
,
t
->
lastWroteTS
,
timestamp
);
AssertFatal
(
t
->
lastWroteTS
<=
timestamp
+
1
,
" Not supported to send Tx out of order (same in USRP) %lu, %lu
\n
"
,
if
(
t
->
lastWroteTS
>=
timestamp
+
1
)
LOG_E
(
HW
,
"Not supported to send Tx out of order (same in USRP) %lu, %lu
\n
"
,
t
->
lastWroteTS
,
timestamp
);
t
->
lastWroteTS
=
timestamp
+
nsamps
;
...
...
@@ -420,7 +421,7 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
if
(
sz
<
0
)
{
if
(
errno
!=
EAGAIN
)
{
LOG_E
(
HW
,
"socket failed %s
\n
"
,
strerror
(
errno
));
abort
();
//
abort();
}
}
else
if
(
sz
==
0
)
continue
;
...
...
@@ -466,8 +467,9 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
}
else
if
(
b
->
lastReceivedTS
==
b
->
th
.
timestamp
)
{
// normal case
}
else
{
abort
();
AssertFatal
(
false
,
"received data in past: current is %lu, new reception: %lu!
\n
"
,
b
->
lastReceivedTS
,
b
->
th
.
timestamp
);
}
LOG_E
(
HW
,
"received data in past: current is %lu, new reception: %lu!
\n
"
,
b
->
lastReceivedTS
,
b
->
th
.
timestamp
);
b
->
trashingPacket
=
true
;
}
pthread_mutex_lock
(
&
Sockmutex
);
...
...
targets/RT/USER/lte-softmodem-common.c
View file @
47abf562
...
...
@@ -54,16 +54,16 @@ softmodem_params_t *get_softmodem_params(void) {
}
void
get_common_options
(
void
)
{
uint32_t
online_log_messages
;
uint32_t
glog_level
;
uint32_t
start_telnetsrv
;
uint32_t
noS1
;
uint32_t
nokrnmod
;
uint32_t
nonbiot
;
uint32_t
rfsim
;
uint32_t
basicsim
;
uint32_t
online_log_messages
=
0
;
uint32_t
glog_level
=
0
;
uint32_t
start_telnetsrv
=
0
;
uint32_t
noS1
=
0
;
uint32_t
nokrnmod
=
0
;
uint32_t
nonbiot
=
0
;
uint32_t
rfsim
=
0
;
uint32_t
basicsim
=
0
;
char
*
logmem_filename
=
NULL
;
uint32_t
do_forms
;
uint32_t
do_forms
=
0
;
paramdef_t
cmdline_params
[]
=
CMDLINE_PARAMS_DESC
;
paramdef_t
cmdline_logparams
[]
=
CMDLINE_LOGPARAMS_DESC
;
checkedparam_t
cmdline_log_CheckParams
[]
=
CMDLINE_LOGPARAMS_CHECK_DESC
;
...
...
targets/RT/USER/lte-uesoftmodem.c
View file @
47abf562
...
...
@@ -320,13 +320,13 @@ void exit_function(const char *file, const char *function, const int line, const
extern
int16_t
dlsch_demod_shift
;
static
void
get_options
(
void
)
{
int
CC_id
;
int
tddflag
;
int
CC_id
=
0
;
int
tddflag
=
0
;
char
*
loopfile
=
NULL
;
int
dumpframe
=
0
;
int
timingadv
;
uint8_t
nfapi_mode
;
int
simL1flag
;
int
timingadv
=
0
;
uint8_t
nfapi_mode
=
0
;
int
simL1flag
=
0
;
set_default_frame_parms
(
frame_parms
);
CONFIG_SETRTFLAG
(
CONFIG_NOEXITONHELP
);
/* unknown parameters on command line will be checked in main
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment