Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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
lizhongxiao
OpenXG UE
Commits
6a0d7d9b
Commit
6a0d7d9b
authored
Jan 12, 2021
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
writing L1/L2 stats to files rather than screen
parent
8c4c78c1
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
89 additions
and
43 deletions
+89
-43
openair1/PHY/LTE_TRANSPORT/pucch.c
openair1/PHY/LTE_TRANSPORT/pucch.c
+11
-6
openair1/PHY/LTE_TRANSPORT/transport_proto.h
openair1/PHY/LTE_TRANSPORT/transport_proto.h
+2
-2
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+11
-8
openair1/PHY/defs_eNB.h
openair1/PHY/defs_eNB.h
+2
-0
openair1/SCHED/phy_procedures_lte_eNb.c
openair1/SCHED/phy_procedures_lte_eNb.c
+0
-6
openair2/LAYER2/MAC/eNB_scheduler.c
openair2/LAYER2/MAC/eNB_scheduler.c
+0
-21
openair2/LAYER2/MAC/mac.h
openair2/LAYER2/MAC/mac.h
+2
-0
openair2/LAYER2/MAC/main.c
openair2/LAYER2/MAC/main.c
+46
-0
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+15
-0
No files found.
openair1/PHY/LTE_TRANSPORT/pucch.c
View file @
6a0d7d9b
...
...
@@ -65,21 +65,24 @@ int16_t cfo_pucch_ep[24*6] = {24278,-22005,29621,-14010,32412,-4808,32412,4807,2
void
dump_uci_stats
(
PHY_VARS_eNB
*
eNB
,
int
frame
)
{
void
dump_uci_stats
(
FILE
*
fd
,
PHY_VARS_eNB
*
eNB
,
int
frame
)
{
for
(
int
i
=
0
;
i
<
NUMBER_OF_SCH_STATS_MAX
;
i
++
)
int
strpos
=
0
;
char
output
[
16384
];
for
(
int
i
=
0
;
i
<
NUMBER_OF_SCH_STATS_MAX
;
i
++
){
if
(
eNB
->
uci_stats
[
i
].
rnti
>
0
)
{
eNB_UCI_STATS_t
*
uci_stats
=
&
eNB
->
uci_stats
[
i
];
LOG_I
(
PHY
,
"UCI RNTI %x: pucch1_trials %d, pucch1_thres %d dB, current pucch1_stat %d dB,positive SR count %d
\n
"
,
strpos
+=
sprintf
(
output
+
strpos
,
"UCI RNTI %x: pucch1_trials %d, pucch1_thres %d dB, current pucch1_stat %d dB,positive SR count %d
\n
"
,
uci_stats
->
rnti
,
uci_stats
->
pucch1_trials
,
uci_stats
->
pucch1_thres
,
dB_fixed
(
uci_stats
->
current_pucch1_stat
),
uci_stats
->
pucch1_positive_SR
);
LOG_I
(
PHY
,
"UCI RNTI %x: pucch1_low (%d,%d)dB pucch1_high (%d,%d)dB
\n
"
,
strpos
+=
sprintf
(
output
+
strpos
,
"UCI RNTI %x: pucch1_low (%d,%d)dB pucch1_high (%d,%d)dB
\n
"
,
uci_stats
->
rnti
,
dB_fixed
(
uci_stats
->
pucch1_low_stat
[
0
]),
dB_fixed
(
uci_stats
->
pucch1_low_stat
[
1
]),
dB_fixed
(
uci_stats
->
pucch1_high_stat
[
0
]),
dB_fixed
(
uci_stats
->
pucch1_high_stat
[
1
]));
LOG_I
(
PHY
,
"UCI RNTI %x: pucch1a_trials %d, pucch1a_stat (%d,%d), pucch1b_trials %d, pucch1b_stat (%d,%d) pucch1ab_DTX %d
\n
"
,
strpos
+=
sprintf
(
output
+
strpos
,
"UCI RNTI %x: pucch1a_trials %d, pucch1a_stat (%d,%d), pucch1b_trials %d, pucch1b_stat (%d,%d) pucch1ab_DTX %d
\n
"
,
uci_stats
->
rnti
,
uci_stats
->
pucch1a_trials
,
uci_stats
->
current_pucch1a_stat_re
,
...
...
@@ -89,7 +92,9 @@ void dump_uci_stats(PHY_VARS_eNB *eNB,int frame) {
uci_stats
->
current_pucch1b_stat_im
,
uci_stats
->
pucch1ab_DTX
);
}
}
if
(
fd
)
fprintf
(
fd
,
"%s"
,
output
);
else
printf
(
"%s"
,
output
);
}
/* PUCCH format3 >> */
/* SubCarrier Demap */
...
...
openair1/PHY/LTE_TRANSPORT/transport_proto.h
View file @
6a0d7d9b
...
...
@@ -520,8 +520,8 @@ int generate_eNB_ulsch_params_from_dci(PHY_VARS_eNB *PHY_vars_eNB,
void
dump_ulsch
(
PHY_VARS_eNB
*
phy_vars_eNB
,
int
frame
,
int
subframe
,
uint8_t
UE_id
,
int
round
);
void
dump_ulsch_stats
(
PHY_VARS_eNB
*
eNB
,
int
frame
);
void
dump_uci_stats
(
PHY_VARS_eNB
*
eNB
,
int
frame
);
void
dump_ulsch_stats
(
FILE
*
fd
,
PHY_VARS_eNB
*
eNB
,
int
frame
);
void
dump_uci_stats
(
FILE
*
fd
,
PHY_VARS_eNB
*
eNB
,
int
frame
);
...
...
openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
View file @
6a0d7d9b
...
...
@@ -1116,16 +1116,18 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,
return
(
ret
);
}
#define STATSTRLEN 16384
void
dump_ulsch_stats
(
FILE
*
fd
,
PHY_VARS_eNB
*
eNB
,
int
frame
)
{
void
dump_ulsch_stats
(
PHY_VARS_eNB
*
eNB
,
int
frame
)
{
char
output
[
16384
];
int
stroff
=
0
;
for
(
int
i
=
0
;
i
<
NUMBER_OF_ULSCH_MAX
;
i
++
)
if
(
eNB
->
ulsch_stats
[
i
].
rnti
>
0
)
{
for
(
int
aa
=
0
;
aa
<
eNB
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
LOG_I
(
PHY
,
"ULSCH RNTI %x: ulsch_power[%d] %d, ulsch_noise_power[%d] %d
\n
"
,
for
(
int
aa
=
0
;
aa
<
eNB
->
frame_parms
.
nb_antennas_rx
;
aa
++
)
stroff
+=
sprintf
(
output
+
stroff
,
"ULSCH RNTI %x: ulsch_power[%d] %d, ulsch_noise_power[%d] %d
\n
"
,
eNB
->
ulsch_stats
[
i
].
rnti
,
aa
,
eNB
->
ulsch_stats
[
i
].
ulsch_power
[
aa
],
aa
,
eNB
->
ulsch_stats
[
i
].
ulsch_noise_power
[
aa
]);
LOG_I
(
PHY
,
"ULSCH RNTI %x: round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d
\n
"
,
AssertFatal
(
stroff
<
(
STATSTRLEN
-
1000
),
"Increase STATSTRLEN
\n
"
);
stroff
+=
sprintf
(
output
+
stroff
,
"ULSCH RNTI %x: round_trials %d(%1.1e):%d(%1.1e):%d(%1.1e):%d
\n
"
,
eNB
->
ulsch_stats
[
i
].
rnti
,
eNB
->
ulsch_stats
[
i
].
round_trials
[
0
],
(
double
)
eNB
->
ulsch_stats
[
i
].
round_trials
[
1
]
/
eNB
->
ulsch_stats
[
i
].
round_trials
[
0
],
...
...
@@ -1134,7 +1136,7 @@ void dump_ulsch_stats(PHY_VARS_eNB *eNB,int frame) {
eNB
->
ulsch_stats
[
i
].
round_trials
[
2
],
(
double
)
eNB
->
ulsch_stats
[
i
].
round_trials
[
3
]
/
eNB
->
ulsch_stats
[
i
].
round_trials
[
0
],
eNB
->
ulsch_stats
[
i
].
round_trials
[
3
]);
LOG_I
(
PHY
,
"ULSCH RNTI %x: current_Qm %d, current_G %d, current_TBS %d, current_rate %f,current_RI %d, timing_offset %d, total_bytes RX/SCHED %d/%d
\n
"
,
stroff
+=
sprintf
(
output
+
stroff
,
"ULSCH RNTI %x: current_Qm %d, current_G %d, current_TBS %d, current_rate %f,current_RI %d, timing_offset %d, total_bytes RX/SCHED %d/%d
\n
"
,
eNB
->
ulsch_stats
[
i
].
rnti
,
eNB
->
ulsch_stats
[
i
].
current_Qm
,
eNB
->
ulsch_stats
[
i
].
current_G
,
...
...
@@ -1145,7 +1147,8 @@ void dump_ulsch_stats(PHY_VARS_eNB *eNB,int frame) {
eNB
->
ulsch_stats
[
i
].
total_bytes_rx
,
eNB
->
ulsch_stats
[
i
].
total_bytes_tx
);
}
if
(
fd
)
fprintf
(
fd
,
"%s"
,
output
);
else
printf
(
"%s"
,
output
);
}
void
clear_ulsch_stats
(
PHY_VARS_eNB
*
eNB
)
{
...
...
openair1/PHY/defs_eNB.h
View file @
6a0d7d9b
...
...
@@ -362,6 +362,8 @@ typedef struct L1_proc_t_s {
L1_rxtx_proc_t
L1_proc
,
L1_proc_tx
;
/// stats thread pthread descriptor
pthread_t
process_stats_thread
;
/// L1 stats pthread descriptor
pthread_t
L1_stats_thread
;
/// for waking up tx procedure
RU_proc_t
*
ru_proc
;
struct
PHY_VARS_eNB_s
*
eNB
;
...
...
openair1/SCHED/phy_procedures_lte_eNb.c
View file @
6a0d7d9b
...
...
@@ -2182,12 +2182,6 @@ void phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc) {
LOG_I
(
PHY
,
"max_I0 %d (rb %d), min_I0 %d (rb %d), avg I0 %d
\n
"
,
max_I0
,
amax
,
min_I0
,
amin
,
eNB
->
measurements
.
n0_subband_power_avg_dB
);
}
// figure out a better way to choose slot_rx, 19 is ok for a particular TDD configuration with 30kHz SCS
if
((
frame
&
127
)
==
0
&&
subframe
==
3
)
{
dump_ulsch_stats
(
eNB
,
frame
);
dump_uci_stats
(
eNB
,
frame
);
}
// clear unused statistics after 2 seconds
for
(
int
i
=
0
;
i
<
NUMBER_OF_SCH_STATS_MAX
;
i
++
)
{
if
(
eNB
->
ulsch_stats
[
i
].
frame
<=
frame
)
{
...
...
openair2/LAYER2/MAC/eNB_scheduler.c
View file @
6a0d7d9b
...
...
@@ -595,27 +595,6 @@ eNB_dlsch_ulsch_scheduler(module_id_t module_idP,
CC_id
=
UE_PCCID
(
module_idP
,
UE_id
);
UE_scheduling_control
=
&
(
UE_info
->
UE_sched_ctrl
[
UE_id
]);
if
(((
frameP
&
127
)
==
0
)
&&
(
subframeP
==
0
))
{
LOG_I
(
MAC
,
"UE rnti %x : %s, PHR %d dB DL CQI %d PUSCH SNR %d (TPC accum %d) PUCCH SNR %d (TPC accum %d)
\n
"
,
rnti
,
UE_scheduling_control
->
ul_out_of_sync
==
0
?
"in synch"
:
"out of sync"
,
UE_info
->
UE_template
[
CC_id
][
UE_id
].
phr_info
,
UE_scheduling_control
->
dl_cqi
[
CC_id
],
(
5
*
UE_scheduling_control
->
pusch_snr
[
CC_id
]
-
640
)
/
10
,
UE_scheduling_control
->
pucch_tpc_accumulated
[
CC_id
],
(
5
*
UE_scheduling_control
->
pucch1_snr
[
CC_id
]
-
640
)
/
10
,
UE_scheduling_control
->
pusch_tpc_accumulated
[
CC_id
]);
LOG_I
(
MAC
,
" ULSCH rounds %d/%d/%d/%d, DLSCH rounds %d/%d/%d/%d, ULSCH errors %d, DLSCH errors %d
\n
"
,
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
0
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
1
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
2
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
3
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
0
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
1
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
2
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
3
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_errors
,
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_errors
);
}
RC
.
eNB
[
module_idP
][
CC_id
]
->
pusch_stats_bsr
[
UE_id
][(
frameP
*
10
)
+
subframeP
]
=
-
63
;
if
(
UE_id
==
UE_info
->
list
.
head
)
{
...
...
openair2/LAYER2/MAC/mac.h
View file @
6a0d7d9b
...
...
@@ -1433,6 +1433,8 @@ typedef struct eNB_MAC_INST_s {
int32_t
puSch10xSnr
;
int32_t
puCch10xSnr
;
pthread_t
mac_stats_thread
;
}
eNB_MAC_INST
;
/*
...
...
openair2/LAYER2/MAC/main.c
View file @
6a0d7d9b
...
...
@@ -40,8 +40,51 @@
#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h"
#include "common/ran_context.h"
#include "intertask_interface.h"
#include <pthread.h>
extern
RAN_CONTEXT_t
RC
;
extern
int
oai_exit
;
void
*
mac_stats_thread
(
void
*
param
)
{
eNB_MAC_INST
*
mac
=
(
eNB_MAC_INST
*
)
param
;
FILE
*
fd
;
UE_info_t
*
UE_info
=
&
(
mac
->
UE_info
);
while
(
!
oai_exit
)
{
sleep
(
1
);
fd
=
fopen
(
"MAC_stats.log"
,
"w+"
);
AssertFatal
(
fd
!=
NULL
,
"Cannot open MAC_stats.log
\n
"
);
for
(
int
UE_id
=
0
;
UE_id
<
MAX_MOBILES_PER_ENB
;
UE_id
++
)
{
if
(
UE_info
->
active
[
UE_id
])
{
int
rnti
=
UE_RNTI
(
mac
->
Mod_id
,
UE_id
);
int
CC_id
=
UE_PCCID
(
mac
->
Mod_id
,
UE_id
);
UE_sched_ctrl_t
*
UE_scheduling_control
=
&
(
UE_info
->
UE_sched_ctrl
[
UE_id
]);
fprintf
(
fd
,
"UE rnti %x : %s, PHR %d dB DL CQI %d PUSCH SNR %d (TPC accum %d) PUCCH SNR %d (TPC accum %d)
\n
"
,
rnti
,
UE_scheduling_control
->
ul_out_of_sync
==
0
?
"in synch"
:
"out of sync"
,
UE_info
->
UE_template
[
CC_id
][
UE_id
].
phr_info
,
UE_scheduling_control
->
dl_cqi
[
CC_id
],
(
5
*
UE_scheduling_control
->
pusch_snr
[
CC_id
]
-
640
)
/
10
,
UE_scheduling_control
->
pucch_tpc_accumulated
[
CC_id
],
(
5
*
UE_scheduling_control
->
pucch1_snr
[
CC_id
]
-
640
)
/
10
,
UE_scheduling_control
->
pusch_tpc_accumulated
[
CC_id
]);
fprintf
(
fd
,
" ULSCH rounds %d/%d/%d/%d, DLSCH rounds %d/%d/%d/%d, ULSCH errors %d, DLSCH errors %d
\n
"
,
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
0
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
1
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
2
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_rounds
[
3
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
0
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
1
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
2
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_rounds
[
3
],
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
ulsch_errors
,
UE_info
->
eNB_UE_stats
[
CC_id
][
UE_id
].
dlsch_errors
);
}
}
fclose
(
fd
);
}
return
(
NULL
);
}
void
init_UE_info
(
UE_info_t
*
UE_info
)
{
...
...
@@ -128,6 +171,9 @@ void mac_top_init_eNB(void)
pdcp_layer_init
();
rrc_init_global_param
();
for
(
i
=
0
;
i
<
RC
.
nb_macrlc_inst
;
i
++
)
pthread_create
(
&
mac
[
i
]
->
mac_stats_thread
,
NULL
,
mac_stats_thread
,(
void
*
)
mac
[
i
]);
}
void
mac_init_cell_params
(
int
Mod_idP
,
int
CC_idP
)
...
...
targets/RT/USER/lte-enb.c
View file @
6a0d7d9b
...
...
@@ -846,6 +846,20 @@ static void *process_stats_thread(void *param) {
return
(
NULL
);
}
void
*
L1_stats_thread
(
void
*
param
)
{
PHY_VARS_eNB
*
eNB
=
(
PHY_VARS_eNB
*
)
param
;
wait_sync
(
"L1_stats_thread"
);
FILE
*
fd
;
while
(
!
oai_exit
)
{
sleep
(
1
);
fd
=
fopen
(
"L1_stats.log"
,
"w"
);
AssertFatal
(
fd
!=
NULL
,
"Cannot open L1_stats.log
\n
"
);
dump_ulsch_stats
(
fd
,
eNB
,
eNB
->
proc
.
L1_proc_tx
.
frame_tx
);
dump_uci_stats
(
fd
,
eNB
,
eNB
->
proc
.
L1_proc_tx
.
frame_tx
);
fclose
(
fd
);
}
return
(
NULL
);
}
void
init_eNB_proc
(
int
inst
)
{
/*int i=0;*/
...
...
@@ -940,6 +954,7 @@ void init_eNB_proc(int inst) {
AssertFatal
(
proc
->
instance_cnt_prach
==
-
1
,
"instance_cnt_prach = %d
\n
"
,
proc
->
instance_cnt_prach
);
if
(
opp_enabled
==
1
)
pthread_create
(
&
proc
->
process_stats_thread
,
NULL
,
process_stats_thread
,(
void
*
)
eNB
);
pthread_create
(
&
proc
->
L1_stats_thread
,
NULL
,
L1_stats_thread
,(
void
*
)
eNB
);
}
//for multiple CCs: setup master and slaves
...
...
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