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
Michael Black
OpenXG-RAN
Commits
51625f3c
Commit
51625f3c
authored
Feb 17, 2022
by
Robert Schmidt
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Resolve memory issues in nr_prachsim
Except for config module and dlopen()
parent
dcae8574
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
20 deletions
+49
-20
openair1/PHY/INIT/nr_init_ru.c
openair1/PHY/INIT/nr_init_ru.c
+18
-16
openair1/SCHED_NR/sched_nr.h
openair1/SCHED_NR/sched_nr.h
+1
-0
openair1/SIMULATION/NR_PHY/prachsim.c
openair1/SIMULATION/NR_PHY/prachsim.c
+30
-4
No files found.
openair1/PHY/INIT/nr_init_ru.c
View file @
51625f3c
...
...
@@ -174,17 +174,13 @@ void nr_phy_free_RU(RU_t *ru)
LOG_I
(
PHY
,
"Feeing RU signal buffers (if_south %s) nb_tx %d
\n
"
,
ru_if_types
[
ru
->
if_south
],
ru
->
nb_tx
);
free_and_zero
(
ru
->
nr_frame_parms
);
free_and_zero
(
ru
->
frame_parms
);
if
(
ru
->
if_south
<=
REMOTE_IF5
)
{
// this means REMOTE_IF5 or LOCAL_RF, so free memory for time-domain signals
int32_t
*
ptr
;
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
{
ptr
=&
ru
->
common
.
txdata
[
i
][
-
ru
->
sf_extension
];
free_and_zero
(
ptr
);
}
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
free_and_zero
(
ru
->
common
.
rxdata
[
i
]);
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
free_and_zero
(
ru
->
common
.
txdata
[
i
]);
free_and_zero
(
ru
->
common
.
txdata
);
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
free_and_zero
(
ru
->
common
.
rxdata
[
i
]);
free_and_zero
(
ru
->
common
.
rxdata
);
}
// else: IF5 or local RF -> nothing to free()
...
...
@@ -193,7 +189,7 @@ void nr_phy_free_RU(RU_t *ru)
free_and_zero
(
ru
->
common
.
rxdata_7_5kHz
);
// free beamforming input buffers (TX)
for
(
i
=
0
;
i
<
15
;
i
++
)
free_and_zero
(
ru
->
common
.
txdataF
[
i
]);
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
i
++
)
free_and_zero
(
ru
->
common
.
txdataF
[
i
]);
free_and_zero
(
ru
->
common
.
txdataF
);
// free IFFT input buffers (TX)
...
...
@@ -205,15 +201,21 @@ void nr_phy_free_RU(RU_t *ru)
free_and_zero
(
ru
->
common
.
rxdataF
);
for
(
j
=
0
;
j
<
NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX
;
j
++
)
{
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
{
for
(
i
=
0
;
i
<
ru
->
nb_rx
;
i
++
)
free_and_zero
(
ru
->
prach_rxsigF
[
j
][
i
]);
}
free_and_zero
(
ru
->
prach_rxsigF
[
j
]);
}
for
(
i
=
0
;
i
<
ru
->
num_gNB
;
i
++
)
{
for
(
p
=
0
;
p
<
15
;
p
++
)
{
for
(
j
=
0
;
j
<
ru
->
nb_tx
;
j
++
)
free_and_zero
(
ru
->
beam_weights
[
i
][
p
][
j
]);
free_and_zero
(
ru
->
beam_weights
[
i
][
p
]);
if
(
ru
->
do_precoding
==
1
)
{
for
(
i
=
0
;
i
<
ru
->
num_gNB
;
i
++
)
{
for
(
p
=
0
;
p
<
ru
->
nb_log_antennas
;
p
++
)
{
for
(
j
=
0
;
j
<
ru
->
nb_tx
;
j
++
)
free_and_zero
(
ru
->
beam_weights
[
i
][
p
][
j
]);
free_and_zero
(
ru
->
beam_weights
[
i
][
p
]);
}
}
for
(
i
=
0
;
i
<
ru
->
nb_tx
;
++
i
)
free_and_zero
(
ru
->
common
.
beam_id
[
i
]);
free_and_zero
(
ru
->
common
.
beam_id
);
}
}
free_and_zero
(
ru
->
common
.
sync_corr
);
...
...
openair1/SCHED_NR/sched_nr.h
View file @
51625f3c
...
...
@@ -54,5 +54,6 @@ void nr_fep_full(RU_t *ru, int slot);
void
nr_fep_full_2thread
(
RU_t
*
ru
,
int
slot
);
void
feptx_prec
(
RU_t
*
ru
,
int
frame_tx
,
int
tti_tx
);
int
nr_phy_init_RU
(
RU_t
*
ru
);
void
nr_phy_free_RU
(
RU_t
*
ru
);
#endif
openair1/SIMULATION/NR_PHY/prachsim.c
View file @
51625f3c
...
...
@@ -25,6 +25,7 @@
#include <pthread.h>
#include "common/config/config_userapi.h"
#include "common/utils/load_module_shlib.h"
#include "common/utils/LOG/log.h"
#include "common/ran_context.h"
...
...
@@ -662,7 +663,6 @@ int main(int argc, char **argv){
RC
.
nb_nr_L1_inst
=
1
;
phy_init_nr_gNB
(
gNB
,
0
,
1
);
//lowmem
nr_phy_init_RU
(
ru
);
gNB
->
common_vars
.
rxdata
=
ru
->
common
.
rxdata
;
set_tdd_config_nr
(
&
gNB
->
gNB_config
,
mu
,
7
,
6
,
2
,
4
);
// Configure UE
...
...
@@ -781,7 +781,7 @@ int main(int argc, char **argv){
// multipath channel
// dump_nr_prach_config(&gNB->frame_parms,subframe);
for
(
i
=
0
;
i
<
frame_parms
->
samples_per_subframe
<<
1
;
i
++
)
{
for
(
i
=
0
;
i
<
frame_parms
->
samples_per_subframe
;
i
++
)
{
for
(
aa
=
0
;
aa
<
1
;
aa
++
)
{
if
(
awgn_flag
==
0
)
{
s_re
[
aa
][
i
]
=
((
double
)(((
short
*
)
&
txdata
[
aa
][
prach_start
]))[(
i
<<
1
)]);
...
...
@@ -879,7 +879,8 @@ int main(int argc, char **argv){
rx_nr_prach_ru
(
ru
,
prach_format
,
numRA
,
prachStartSymbol
,
prachOccasion
,
frame
,
slot
);
gNB
->
prach_vars
.
rxsigF
=
ru
->
prach_rxsigF
[
prachOccasion
];
for
(
int
i
=
0
;
i
<
ru
->
nb_rx
;
++
i
)
gNB
->
prach_vars
.
rxsigF
[
i
]
=
ru
->
prach_rxsigF
[
prachOccasion
][
i
];
if
(
n_frames
==
1
)
printf
(
"ncs %d,num_seq %d
\n
"
,
prach_pdu
->
num_cs
,
prach_config
->
num_prach_fd_occasions_list
[
fd_occasion
].
num_root_sequences
.
value
);
rx_nr_prach
(
gNB
,
prach_pdu
,
prachOccasion
,
frame
,
subframe
,
&
preamble_rx
,
&
preamble_energy
,
&
preamble_delay
);
...
...
@@ -897,7 +898,7 @@ int main(int argc, char **argv){
#ifdef NR_PRACH_DEBUG
LOG_M
(
"prach0.m"
,
"prach0"
,
&
txdata
[
0
][
prach_start
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
LOG_M
(
"prachF0.m"
,
"prachF0"
,
&
gNB
->
prach_vars
.
prachF
[
0
],
N_ZC
,
1
,
1
);
LOG_M
(
"rxsig0.m"
,
"rxs0"
,
&
gNB
->
common_vars
.
rxdata
[
0
][
subframe
*
frame_parms
->
samples_per_subframe
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
LOG_M
(
"rxsig0.m"
,
"rxs0"
,
&
ru
->
common
.
rxdata
[
0
][
subframe
*
frame_parms
->
samples_per_subframe
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
LOG_M
(
"ru_rxsig0.m"
,
"rxs0"
,
&
ru
->
common
.
rxdata
[
0
][
subframe
*
frame_parms
->
samples_per_subframe
],
frame_parms
->
samples_per_subframe
,
1
,
1
);
LOG_M
(
"ru_rxsigF0.m"
,
"rxsF0"
,
ru
->
common
.
rxdataF
[
0
],
frame_parms
->
ofdm_symbol_size
*
frame_parms
->
symbols_per_slot
,
1
,
1
);
LOG_M
(
"ru_prach_rxsigF0.m"
,
"rxsF0"
,
ru
->
prach_rxsigF
[
0
][
0
],
N_ZC
,
1
,
1
);
...
...
@@ -922,6 +923,28 @@ int main(int argc, char **argv){
break
;
}
//SNR loop
free_channel_desc_scm
(
UE2gNB
);
nr_phy_free_RU
(
ru
);
free
(
RC
.
ru
[
0
]);
free
(
RC
.
ru
);
phy_free_nr_gNB
(
gNB
);
// allocated in set_tdd_config_nr()
int
nb_slots_to_set
=
TDD_CONFIG_NB_FRAMES
*
(
1
<<
mu
)
*
NR_NUMBER_OF_SUBFRAMES_PER_FRAME
;
free
(
gNB
->
gNB_config
.
prach_config
.
num_prach_fd_occasions_list
);
for
(
int
i
=
0
;
i
<
nb_slots_to_set
;
++
i
)
free
(
gNB
->
gNB_config
.
tdd_table
.
max_tdd_periodicity_list
[
i
].
max_num_of_symbol_per_slot_list
);
free
(
gNB
->
gNB_config
.
tdd_table
.
max_tdd_periodicity_list
);
free
(
RC
.
gNB
[
0
]);
free
(
RC
.
gNB
);
term_nr_ue_signal
(
UE
,
1
);
free
(
UE
->
nrUE_config
.
prach_config
.
num_prach_fd_occasions_list
);
free
(
UE
);
free
(
PHY_vars_UE_g
[
0
]);
free
(
PHY_vars_UE_g
);
for
(
i
=
0
;
i
<
2
;
i
++
)
{
free
(
s_re
[
i
]);
free
(
s_im
[
i
]);
...
...
@@ -936,5 +959,8 @@ int main(int argc, char **argv){
if
(
input_fd
)
fclose
(
input_fd
);
loader_reset
();
logTerm
();
return
(
0
);
}
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