Commit c1fd89b2 authored by Navid Nikaein's avatar Navid Nikaein

* additional timing measurements for PDCP


git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5243 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent 74e53579
...@@ -79,6 +79,14 @@ static inline void reset_meas(time_stats_t *ts) { ...@@ -79,6 +79,14 @@ static inline void reset_meas(time_stats_t *ts) {
ts->max=0; ts->max=0;
} }
} }
static inline void copy_meas(time_stats_t *dst_ts,time_stats_t *src_ts) {
if (opp_enabled){
dst_ts->trials=src_ts->trials;
dst_ts->diff=src_ts->diff;
dst_ts->max=src_ts->max;
}
}
/*static inline double get_mean_meas_us(time_stats_t *ts, double cpu_freq_GHz) { /*static inline double get_mean_meas_us(time_stats_t *ts, double cpu_freq_GHz) {
......
...@@ -275,9 +275,19 @@ boolean_t pdcp_data_req( ...@@ -275,9 +275,19 @@ boolean_t pdcp_data_req(
if ((pdcp_p->security_activated != 0) && if ((pdcp_p->security_activated != 0) &&
((pdcp_p->cipheringAlgorithm) != 0) && ((pdcp_p->cipheringAlgorithm) != 0) &&
((pdcp_p->integrityProtAlgorithm) != 0)) { ((pdcp_p->integrityProtAlgorithm) != 0)) {
if (enb_flagP == ENB_FLAG_NO)
start_meas(&eNB_pdcp_stats[enb_mod_idP].apply_security);
else
start_meas(&UE_pdcp_stats[ue_mod_idP].apply_security);
pdcp_apply_security(pdcp_p, rb_idP % maxDRB, pdcp_apply_security(pdcp_p, rb_idP % maxDRB,
pdcp_header_len, current_sn, pdcp_pdu_p->data, pdcp_header_len, current_sn, pdcp_pdu_p->data,
sdu_buffer_sizeP); sdu_buffer_sizeP);
if (enb_flagP == ENB_FLAG_NO)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].apply_security);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].apply_security);
} }
#endif #endif
...@@ -520,9 +530,19 @@ boolean_t pdcp_data_ind( ...@@ -520,9 +530,19 @@ boolean_t pdcp_data_ind(
if (srb_flagP){ if (srb_flagP){
#if defined(ENABLE_SECURITY) #if defined(ENABLE_SECURITY)
if (pdcp_p->security_activated == 1) { if (pdcp_p->security_activated == 1) {
if (enb_flagP == ENB_FLAG_NO)
start_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security);
else
start_meas(&UE_pdcp_stats[ue_mod_idP].validate_security);
pdcp_validate_security(pdcp_p, rb_idP, pdcp_header_len, pdcp_validate_security(pdcp_p, rb_idP, pdcp_header_len,
sequence_number, sdu_buffer_pP->data, sequence_number, sdu_buffer_pP->data,
sdu_buffer_sizeP - pdcp_tailer_len); sdu_buffer_sizeP - pdcp_tailer_len);
if (enb_flagP == ENB_FLAG_NO)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].validate_security);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].validate_security);
} }
#endif #endif
//rrc_lite_data_ind(module_id, //Modified MW - L2 Interface //rrc_lite_data_ind(module_id, //Modified MW - L2 Interface
...@@ -774,8 +794,18 @@ void pdcp_run ( ...@@ -774,8 +794,18 @@ void pdcp_run (
pdcp_fifo_read_input_sdus(frameP, enb_flagP, ue_mod_idP, enb_mod_idP); pdcp_fifo_read_input_sdus(frameP, enb_flagP, ue_mod_idP, enb_mod_idP);
} }
// PDCP -> NAS/IP traffic: RX // PDCP -> NAS/IP traffic: RX
if (enb_flagP)
start_meas(&eNB_pdcp_stats[enb_mod_idP].pdcp_ip);
else
start_meas(&UE_pdcp_stats[ue_mod_idP].pdcp_ip);
pdcp_fifo_flush_sdus(frameP, enb_flagP, enb_mod_idP, ue_mod_idP); pdcp_fifo_flush_sdus(frameP, enb_flagP, enb_mod_idP, ue_mod_idP);
if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].pdcp_ip);
else
stop_meas(&UE_pdcp_stats[ue_mod_idP].pdcp_ip);
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_OUT); vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_RUN, VCD_FUNCTION_OUT);
if (enb_flagP) if (enb_flagP)
stop_meas(&eNB_pdcp_stats[enb_mod_idP].pdcp_run); stop_meas(&eNB_pdcp_stats[enb_mod_idP].pdcp_run);
......
...@@ -106,11 +106,10 @@ typedef struct pdcp_stats_t { ...@@ -106,11 +106,10 @@ typedef struct pdcp_stats_t {
time_stats_t pdcp_run; time_stats_t pdcp_run;
time_stats_t data_req; time_stats_t data_req;
time_stats_t data_ind; time_stats_t data_ind;
time_stats_t encrption; time_stats_t apply_security; //
time_stats_t decrption; time_stats_t validate_security;
time_stats_t pdcp_ip; time_stats_t pdcp_ip;
time_stats_t ip_pdcp; time_stats_t ip_pdcp; // separte thread
}pdcp_stats_t; // common to eNB and UE }pdcp_stats_t; // common to eNB and UE
......
...@@ -86,6 +86,8 @@ static struct lfds611_queue_state **pdcp_netlink_queue_ue = NULL; ...@@ -86,6 +86,8 @@ static struct lfds611_queue_state **pdcp_netlink_queue_ue = NULL;
static uint32_t *pdcp_netlink_nb_element_enb = NULL; static uint32_t *pdcp_netlink_nb_element_enb = NULL;
static uint32_t *pdcp_netlink_nb_element_ue = NULL; static uint32_t *pdcp_netlink_nb_element_ue = NULL;
time_stats_t ip_pdcp_stats_tmp;
static void *pdcp_netlink_thread_fct(void *arg); static void *pdcp_netlink_thread_fct(void *arg);
int pdcp_netlink_init(void) { int pdcp_netlink_init(void) {
...@@ -96,6 +98,7 @@ int pdcp_netlink_init(void) { ...@@ -96,6 +98,7 @@ int pdcp_netlink_init(void) {
pthread_attr_t attr; pthread_attr_t attr;
struct sched_param sched_param; struct sched_param sched_param;
reset_meas(&ip_pdcp_stats_tmp);
#if defined(USER_MODE) && defined(OAI_EMU) #if defined(USER_MODE) && defined(OAI_EMU)
nb_inst_enb = oai_emulation.info.nb_enb_local; nb_inst_enb = oai_emulation.info.nb_enb_local;
nb_inst_ue = oai_emulation.info.nb_ue_local; nb_inst_ue = oai_emulation.info.nb_ue_local;
...@@ -206,7 +209,7 @@ void *pdcp_netlink_thread_fct(void *arg) { ...@@ -206,7 +209,7 @@ void *pdcp_netlink_thread_fct(void *arg) {
for (nas_nlh_rx = (struct nlmsghdr *) nl_rx_buf; for (nas_nlh_rx = (struct nlmsghdr *) nl_rx_buf;
NLMSG_OK(nas_nlh_rx, (unsigned int)len); NLMSG_OK(nas_nlh_rx, (unsigned int)len);
nas_nlh_rx = NLMSG_NEXT (nas_nlh_rx, len)) { nas_nlh_rx = NLMSG_NEXT (nas_nlh_rx, len)) {
start_meas(&ip_pdcp_stats_tmp);
/* There is no need to check for nlmsg_type because /* There is no need to check for nlmsg_type because
* the header is not set in our drivers. * the header is not set in our drivers.
*/ */
...@@ -259,6 +262,8 @@ void *pdcp_netlink_thread_fct(void *arg) { ...@@ -259,6 +262,8 @@ void *pdcp_netlink_thread_fct(void *arg) {
/* Enqueue the element in the right queue */ /* Enqueue the element in the right queue */
lfds611_queue_guaranteed_enqueue(pdcp_netlink_queue_enb[new_data_p->pdcp_read_header.inst], new_data_p); lfds611_queue_guaranteed_enqueue(pdcp_netlink_queue_enb[new_data_p->pdcp_read_header.inst], new_data_p);
stop_meas(&ip_pdcp_stats_tmp);
copy_meas(&eNB_pdcp_stats[new_data_p->pdcp_read_header.inst].pdcp_ip,&ip_pdcp_stats_tmp);
} else { } else {
if (pdcp_netlink_nb_element_ue[new_data_p->pdcp_read_header.inst] if (pdcp_netlink_nb_element_ue[new_data_p->pdcp_read_header.inst]
> PDCP_QUEUE_NB_ELEMENTS) { > PDCP_QUEUE_NB_ELEMENTS) {
...@@ -270,6 +275,8 @@ void *pdcp_netlink_thread_fct(void *arg) { ...@@ -270,6 +275,8 @@ void *pdcp_netlink_thread_fct(void *arg) {
/* Enqueue the element in the right queue */ /* Enqueue the element in the right queue */
lfds611_queue_guaranteed_enqueue(pdcp_netlink_queue_ue[new_data_p->pdcp_read_header.inst], new_data_p); lfds611_queue_guaranteed_enqueue(pdcp_netlink_queue_ue[new_data_p->pdcp_read_header.inst], new_data_p);
stop_meas(&ip_pdcp_stats_tmp);
copy_meas(&UE_pdcp_stats[new_data_p->pdcp_read_header.inst].pdcp_ip,&ip_pdcp_stats_tmp);
} }
} }
} }
......
...@@ -1172,11 +1172,11 @@ void reset_opp_meas(void){ ...@@ -1172,11 +1172,11 @@ void reset_opp_meas(void){
reset_meas(&UE_pdcp_stats[UE_id].pdcp_run); reset_meas(&UE_pdcp_stats[UE_id].pdcp_run);
reset_meas(&UE_pdcp_stats[UE_id].data_req); reset_meas(&UE_pdcp_stats[UE_id].data_req);
reset_meas(&UE_pdcp_stats[UE_id].data_ind); reset_meas(&UE_pdcp_stats[UE_id].data_ind);
/* reset_meas(&UE_pdcp_stats[UE_id].encrption); reset_meas(&UE_pdcp_stats[UE_id].apply_security);
reset_meas(&UE_pdcp_stats[UE_id].decrption); reset_meas(&UE_pdcp_stats[UE_id].validate_security);
reset_meas(&UE_pdcp_stats[UE_id].pdcp_ip); reset_meas(&UE_pdcp_stats[UE_id].pdcp_ip);
reset_meas(&UE_pdcp_stats[UE_id].ip_pdcp); reset_meas(&UE_pdcp_stats[UE_id].ip_pdcp);
*/
for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
reset_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc); reset_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc);
reset_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc_rx); reset_meas(&PHY_vars_eNB_g[eNB_id]->phy_proc_rx);
...@@ -1235,12 +1235,11 @@ void reset_opp_meas(void){ ...@@ -1235,12 +1235,11 @@ void reset_opp_meas(void){
reset_meas(&eNB_pdcp_stats[eNB_id].pdcp_run); reset_meas(&eNB_pdcp_stats[eNB_id].pdcp_run);
reset_meas(&eNB_pdcp_stats[eNB_id].data_req); reset_meas(&eNB_pdcp_stats[eNB_id].data_req);
reset_meas(&eNB_pdcp_stats[eNB_id].data_ind); reset_meas(&eNB_pdcp_stats[eNB_id].data_ind);
/* reset_meas(&eNB_pdcp_stats[eNB_id].apply_security);
reset_meas(&eNB_pdcp_stats[UE_id].encrption); reset_meas(&eNB_pdcp_stats[eNB_id].validate_security);
reset_meas(&eNB_pdcp_stats[UE_id].decrption); reset_meas(&eNB_pdcp_stats[eNB_id].pdcp_ip);
reset_meas(&eNB_pdcp_stats[UE_id].pdcp_ip); reset_meas(&eNB_pdcp_stats[eNB_id].ip_pdcp);
reset_meas(&eNB_pdcp_stats[UE_id].ip_pdcp);
*/
} }
} }
} }
...@@ -1351,6 +1350,11 @@ void print_opp_meas(void){ ...@@ -1351,6 +1350,11 @@ void print_opp_meas(void){
print_meas(&UE_pdcp_stats[UE_id].data_req,"[UE][DL][pdcp_data_req]",&oaisim_stats,&oaisim_stats_f); print_meas(&UE_pdcp_stats[UE_id].data_req,"[UE][DL][pdcp_data_req]",&oaisim_stats,&oaisim_stats_f);
print_meas(&UE_pdcp_stats[UE_id].data_ind,"[UE][UL][pdcp_data_ind]",&oaisim_stats,&oaisim_stats_f); print_meas(&UE_pdcp_stats[UE_id].data_ind,"[UE][UL][pdcp_data_ind]",&oaisim_stats,&oaisim_stats_f);
print_meas(&UE_pdcp_stats[UE_id].apply_security,"[UE][DL][apply_security]",&oaisim_stats,&oaisim_stats_f);
print_meas(&UE_pdcp_stats[UE_id].validate_security,"[UE][UL][validate_security]",&oaisim_stats,&oaisim_stats_f);
print_meas(&UE_pdcp_stats[UE_id].ip_pdcp,"[UE][DL][ip_pdcp]",&oaisim_stats,&oaisim_stats_f);
print_meas(&UE_pdcp_stats[UE_id].pdcp_ip,"[UE][UL][pdcp_ip]",&oaisim_stats,&oaisim_stats_f);
} }
for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) { for (eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
...@@ -1368,6 +1372,12 @@ void print_opp_meas(void){ ...@@ -1368,6 +1372,12 @@ void print_opp_meas(void){
print_meas(&eNB_pdcp_stats[eNB_id].pdcp_run,"[eNB][pdcp_run]",&oaisim_stats,&oaisim_stats_f); print_meas(&eNB_pdcp_stats[eNB_id].pdcp_run,"[eNB][pdcp_run]",&oaisim_stats,&oaisim_stats_f);
print_meas(&eNB_pdcp_stats[eNB_id].data_req,"[eNB][DL][pdcp_data_req]",&oaisim_stats,&oaisim_stats_f); print_meas(&eNB_pdcp_stats[eNB_id].data_req,"[eNB][DL][pdcp_data_req]",&oaisim_stats,&oaisim_stats_f);
print_meas(&eNB_pdcp_stats[eNB_id].data_ind,"[eNB][UL][pdcp_data_ind]",&oaisim_stats,&oaisim_stats_f); print_meas(&eNB_pdcp_stats[eNB_id].data_ind,"[eNB][UL][pdcp_data_ind]",&oaisim_stats,&oaisim_stats_f);
print_meas(&eNB_pdcp_stats[eNB_id].apply_security,"[eNB][DL][apply_security]",&oaisim_stats,&oaisim_stats_f);
print_meas(&eNB_pdcp_stats[eNB_id].validate_security,"[eNB][UL][validate_security]",&oaisim_stats,&oaisim_stats_f);
print_meas(&eNB_pdcp_stats[eNB_id].ip_pdcp,"[eNB][DL][ip_pdcp]",&oaisim_stats,&oaisim_stats_f);
print_meas(&eNB_pdcp_stats[eNB_id].pdcp_ip,"[eNB][UL][pdcp_ip]",&oaisim_stats,&oaisim_stats_f);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment