oai ran (openairinterface5g) software architecture · wakeup_prach_ru / wakeup_prach_br inline...
TRANSCRIPT
Overview of OAI L1
OAI RAN (openairinterface5g) Software Architecture – Functional entities Focus today on L1 procedures for eNodeB
– Real-time-scheduling
(c) Eurecom 2018
RRU/RAU
OAI current lower-layer functional split – a network of radio
units (L1-low) – a precoding
function and switching function
– Regular (virtualized) eNB functions
(c) Eurecom 2018
Multi-threading lower-layer operations
Front-end Processing (RU) – Parallelizing even/odd slots in Fourier Transforms (TX and RX in
RU)
Back-end Processing (L1) – Parallelizing Segments in Turbo-encoder / Rate-Matching – Parallelizing Segments in Rate-Matching Inversion / Turbo-
Decoder
Run worker threads in parallel to main thread in “single-thread” mode
(c) Eurecom 2018
RU/L1 I/O and Processing Flow Piece of r u_t hr ead:
/ / Thi s i s a f or ever whi l e l oop, i t l oops over subf r ames whi ch ar e schedul ed by i ncomi ng sampl es f r om HW devi ces
whi l e ( ! oai _exi t ) {
…
/ / synchr oni zat i on on i nput FH i nt er f ace, acqui r e si gnal s/ dat a and bl ock
i f ( r u- >f h_sout h_i n) r u- >f h_sout h_i n( r u, &f r ame, &subf r ame) ;
el se Asser t Fat al ( 1==0, "No f r ont haul i nt er f ace at sout h por t " ) ;
i f ( ( r u- >do_pr ach>0) && ( i s_pr ach_subf r ame( f p, pr oc- >f r ame_r x, pr oc->subf r ame_r x) ==1) ) {
wakeup_pr ach_r u( r u) ;
}
el se i f ( ( r u- >do_pr ach>0) && ( i s_pr ach_subf r ame( f p, pr oc- >f r ame_r x, pr oc->subf r ame_r x) >1) ) {
wakeup_pr ach_r u_br ( r u) ;
}
(c) Eurecom 2018
/ / do RX f r ont - end pr ocessi ng ( f r equency- shi f t , df t ) i f needed
i f ( r u- >f epr x) r u- >f epr x( r u) ;
/ / At t hi s poi nt , al l i nf or mat i on f or subf r ame has been r ecei ved on FH i nt er f ace
/ / wakeup al l eNB pr ocesses wai t i ng f or t hi s RU
i f ( r u- >num_eNB>0) wakeup_eNBs( r u) ;
i f ( get _npr ocs( ) <= 4 | | r u- >num_eNB==0) {
/ / do TX f r ont - end pr ocessi ng i f needed ( pr ecodi ng and/ or I DFTs)
i f ( r u- >f ept x_pr ec) r u- >f ept x_pr ec( r u) ;
/ / do OFDM i f needed
i f ( ( r u- >f h_nor t h_asynch_i n == NULL) && ( r u- >f ept x_of dm) )
r u- >f ept x_of dm( r u) ;
i f ( ! emul at e_r f ) {
/ / do out goi ng f r ont haul ( sout h) i f needed
i f ( ( r u- >f h_nor t h_asynch_i n == NULL) && ( r u- >f h_sout h_out ) )
r u- >f h_sout h_out ( r u) ;
i f ( r u- >f h_nor t h_out ) r u- >f h_nor t h_out ( r u) ;
}
(c) Eurecom 2018
f h_sout h_i n
Function to acquire samples – From RF - r xr f Either to HW or emulated for timing analysis of RU/L1
procedures – From fronthaul receive function f h_i f 5_sout h_i n (time-domain interface) f h_i f 4p5_sout h_i n (frequency-domain interface)
(c) Eurecom 2018
wakeup_pr ach_r u/ wakeup_pr ach_br
Inline function to wakeup RU component of prach procedures – Uses condition variable r u- >pr oc. cond_pr ach – Thread code located in r u_t hr ead_pr ach Invokes frequency-domain translation only if RRU
(r x_pr ach) Invokes complete PRACH procedures if RAU
_br is for LTE-M PRACH processing (up to 4 threads)
(c) Eurecom 2018
r u- >f epr x
Top-level for RX front-end processing – 7.5 kHz frequency-translation – FFTs – Processing is located in (single-thread)
openai r 1/ SCHED/ r u_pr ocedur es. c f ep_f ul l ( ) : single-thread for processing of 1 subframe r u_f ep_f ul l _2t hr ead( ) : 2 threads, one for each slot
in the subframe
(c) Eurecom 2018
wakeup_eNBs
Function to invoke the L1 entity procedures for subframe n (RX) and n+4 (TX)
If # cores ≤ 4 – Call function eNB_t op ( t ar get s/ RT/ USER/ l t e- enb. c)
If # cores > 4 – Wakeup eNB_thread_rx (r u- >wakeup_r xt x) – The is the function in t ar get s/ RT/ USER/ l t e-
enb. c: wakeup_r xt x( ) Called by each RU that is attached to the L1 instance When all RUs have called this function for a particular
subframe, the L1 entity is woken up
(c) Eurecom 2018
eNB_top / eNB_thread_rxtx
Both initially call a function rxtx() – Invokes full PRACH/PRACH_BR procedures (if RAU) () – phy_pr ocedur es_eNB_uespec_RX
UE-specific processing of subframe (UCI,SRS,ULSCH) – If # cores >4 (in eNB_thread_rxtx)
Synchronization: wait for TX thread from previous subframe to complete (avoids race conditions)
– Run L2 procedures Call UL_i ndi cat i on to send RX data up to L2
– if # cores <=4 (in eNB_top) Run TX procedures for n+4 Wakeup TX FH thread to transmit to RF/fronthaul
If in eNB_thread_rxtx – Wakeup eNB_thread_tx (wakeup_t x) – wakeup_t x schedules t x_t hr ead( ) – t x_t hr ead( ) does
TX procedures for n+4 Unlocks potentially waiting RX for n+1 Wakeup TX FH thread to transmit to RF/fronthaul
(c) Eurecom 2018