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
canghaiwuhen
OpenXG-RAN
Commits
5dbae260
Commit
5dbae260
authored
Apr 11, 2016
by
Xenofon Foukas
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature-68-enb-agent' into agent-performance
parents
60b7e425
6b15195a
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
25 additions
and
2 deletions
+25
-2
openair2/LAYER2/MAC/defs.h
openair2/LAYER2/MAC/defs.h
+7
-0
openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
+14
-0
openair2/LAYER2/openair2_proc.c
openair2/LAYER2/openair2_proc.c
+4
-2
No files found.
openair2/LAYER2/MAC/defs.h
View file @
5dbae260
...
@@ -462,6 +462,13 @@ typedef struct {
...
@@ -462,6 +462,13 @@ typedef struct {
//
//
uint32_t
total_ulsch_pdus_rx
;
uint32_t
total_ulsch_pdus_rx
;
/// MAC agent-related stats
/// total number of scheduling decisions
int
sched_decisions
;
/// missed deadlines
int
missed_deadlines
;
}
eNB_STATS
;
}
eNB_STATS
;
/*! \brief eNB statistics for the connected UEs*/
/*! \brief eNB statistics for the connected UEs*/
typedef
struct
{
typedef
struct
{
...
...
openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
View file @
5dbae260
...
@@ -39,6 +39,9 @@
...
@@ -39,6 +39,9 @@
#include "eNB_agent_scheduler_dlsch_ue_remote.h"
#include "eNB_agent_scheduler_dlsch_ue_remote.h"
#include "LAYER2/MAC/defs.h"
#include "LAYER2/MAC/extern.h"
struct
DlMacConfigHead
queue_head
;
struct
DlMacConfigHead
queue_head
;
int
queue_initialized
=
0
;
int
queue_initialized
=
0
;
...
@@ -46,10 +49,15 @@ int queue_initialized = 0;
...
@@ -46,10 +49,15 @@ int queue_initialized = 0;
void
schedule_ue_spec_remote
(
mid_t
mod_id
,
uint32_t
frame
,
uint32_t
subframe
,
void
schedule_ue_spec_remote
(
mid_t
mod_id
,
uint32_t
frame
,
uint32_t
subframe
,
int
*
mbsfn_flag
,
Protocol__ProgranMessage
**
dl_info
)
{
int
*
mbsfn_flag
,
Protocol__ProgranMessage
**
dl_info
)
{
eNB_MAC_INST
*
eNB
;
if
(
!
queue_initialized
)
{
if
(
!
queue_initialized
)
{
TAILQ_INIT
(
&
queue_head
);
TAILQ_INIT
(
&
queue_head
);
queue_initialized
=
1
;
queue_initialized
=
1
;
}
}
eNB
=
&
eNB_mac_inst
[
mod_id
];
dl_mac_config_element_t
*
dl_config_elem
;
dl_mac_config_element_t
*
dl_config_elem
;
...
@@ -66,12 +74,15 @@ void schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe,
...
@@ -66,12 +74,15 @@ void schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe,
TAILQ_REMOVE
(
&
queue_head
,
queue_head
.
tqh_first
,
configs
);
TAILQ_REMOVE
(
&
queue_head
,
queue_head
.
tqh_first
,
configs
);
*
dl_info
=
dl_config_elem
->
dl_info
;
*
dl_info
=
dl_config_elem
->
dl_info
;
free
(
dl_config_elem
);
free
(
dl_config_elem
);
eNB
->
eNB_stats
[
mod_id
].
sched_decisions
++
;
return
;
return
;
}
else
if
(
diff
<
0
)
{
//previous subframe , delete message and free memory
}
else
if
(
diff
<
0
)
{
//previous subframe , delete message and free memory
LOG_D
(
MAC
,
"Found a decision for a previous subframe in the queue. Let's get rid of it
\n
"
);
LOG_D
(
MAC
,
"Found a decision for a previous subframe in the queue. Let's get rid of it
\n
"
);
TAILQ_REMOVE
(
&
queue_head
,
queue_head
.
tqh_first
,
configs
);
TAILQ_REMOVE
(
&
queue_head
,
queue_head
.
tqh_first
,
configs
);
enb_agent_mac_destroy_dl_config
(
dl_config_elem
->
dl_info
);
enb_agent_mac_destroy_dl_config
(
dl_config_elem
->
dl_info
);
free
(
dl_config_elem
);
free
(
dl_config_elem
);
eNB
->
eNB_stats
[
mod_id
].
sched_decisions
++
;
eNB
->
eNB_stats
[
mod_id
].
missed_deadlines
++
;
}
else
{
// next subframe, nothing to do now
}
else
{
// next subframe, nothing to do now
LOG_D
(
MAC
,
"Found a decision for a future subframe in the queue. Nothing to do now
\n
"
);
LOG_D
(
MAC
,
"Found a decision for a future subframe in the queue. Nothing to do now
\n
"
);
enb_agent_mac_create_empty_dl_config
(
mod_id
,
dl_info
);
enb_agent_mac_create_empty_dl_config
(
mod_id
,
dl_info
);
...
@@ -86,12 +97,15 @@ void schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe,
...
@@ -86,12 +97,15 @@ void schedule_ue_spec_remote(mid_t mod_id, uint32_t frame, uint32_t subframe,
diff
=
get_sf_difference
(
mod_id
,
(
*
dl_info
)
->
dl_mac_config_msg
->
sfn_sf
);
diff
=
get_sf_difference
(
mod_id
,
(
*
dl_info
)
->
dl_mac_config_msg
->
sfn_sf
);
if
(
diff
==
0
)
{
// Got a command for this sfn_sf
if
(
diff
==
0
)
{
// Got a command for this sfn_sf
LOG_D
(
MAC
,
"Found a decision for this subframe pending. Let's use it
\n
"
);
LOG_D
(
MAC
,
"Found a decision for this subframe pending. Let's use it
\n
"
);
eNB
->
eNB_stats
[
mod_id
].
sched_decisions
++
;
return
;
return
;
}
else
if
(
diff
<
0
)
{
}
else
if
(
diff
<
0
)
{
LOG_D
(
MAC
,
"Found a decision for a previous subframe. Let's get rid of it
\n
"
);
LOG_D
(
MAC
,
"Found a decision for a previous subframe. Let's get rid of it
\n
"
);
enb_agent_mac_destroy_dl_config
(
*
dl_info
);
enb_agent_mac_destroy_dl_config
(
*
dl_info
);
*
dl_info
=
NULL
;
*
dl_info
=
NULL
;
enb_agent_get_pending_dl_mac_config
(
mod_id
,
dl_info
);
enb_agent_get_pending_dl_mac_config
(
mod_id
,
dl_info
);
eNB
->
eNB_stats
[
mod_id
].
sched_decisions
++
;
eNB
->
eNB_stats
[
mod_id
].
missed_deadlines
++
;
}
else
{
// Intended for future subframe. Store it in local cache
}
else
{
// Intended for future subframe. Store it in local cache
LOG_D
(
MAC
,
"Found a decision for a future subframe in the queue. Let's store it in the cache
\n
"
);
LOG_D
(
MAC
,
"Found a decision for a future subframe in the queue. Let's store it in the cache
\n
"
);
dl_mac_config_element_t
*
e
=
malloc
(
sizeof
(
dl_mac_config_element_t
));
dl_mac_config_element_t
*
e
=
malloc
(
sizeof
(
dl_mac_config_element_t
));
...
...
openair2/LAYER2/openair2_proc.c
View file @
5dbae260
...
@@ -122,11 +122,13 @@ int dump_eNB_l2_stats(char *buffer, int length)
...
@@ -122,11 +122,13 @@ int dump_eNB_l2_stats(char *buffer, int length)
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
eNB
->
eNB_stats
[
CC_id
].
dlsch_bitrate
=
0
;
eNB
->
eNB_stats
[
CC_id
].
dlsch_bitrate
=
0
;
len
+=
sprintf
(
&
buffer
[
len
],
"eNB %d CC %d Frame %d: Active UEs %d, Available PRBs %d, nCCE %d
\n
"
,
len
+=
sprintf
(
&
buffer
[
len
],
"eNB %d CC %d Frame %d: Active UEs %d, Available PRBs %d, nCCE %d
, Scheduling decisions %d, Missed Deadlines %d
\n
"
,
eNB_id
,
CC_id
,
eNB
->
frame
,
eNB_id
,
CC_id
,
eNB
->
frame
,
eNB
->
eNB_stats
[
CC_id
].
num_dlactive_UEs
,
eNB
->
eNB_stats
[
CC_id
].
num_dlactive_UEs
,
eNB
->
eNB_stats
[
CC_id
].
available_prbs
,
eNB
->
eNB_stats
[
CC_id
].
available_prbs
,
eNB
->
eNB_stats
[
CC_id
].
available_ncces
);
eNB
->
eNB_stats
[
CC_id
].
available_ncces
,
eNB
->
eNB_stats
[
CC_id
].
sched_decisions
,
eNB
->
eNB_stats
[
CC_id
].
missed_deadlines
);
len
+=
sprintf
(
&
buffer
[
len
],
"BCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)
\n
"
,
len
+=
sprintf
(
&
buffer
[
len
],
"BCCH , NB_TX_MAC = %d, transmitted bytes (TTI %d, total %d) MCS (TTI %d)
\n
"
,
eNB
->
eNB_stats
[
CC_id
].
total_num_bcch_pdu
,
eNB
->
eNB_stats
[
CC_id
].
total_num_bcch_pdu
,
...
...
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