get xran stats

Get xran stats in the trx_oran_get_stats function
and use trx_oran_get_stats upon stopping and ending RF.

Co-authored-by: Romain Beurdouche <romain.beurdouche@eurecom.fr>
This commit is contained in:
Robert Schmidt
2025-07-09 14:55:44 +02:00
co-authored by Romain Beurdouche
parent b7a6b1b7d6
commit 02bc14d8c1
5 changed files with 45 additions and 1 deletions
+16
View File
@@ -97,11 +97,19 @@ void exit_function(const char *file, const char *function, const int line, const
oai_exit = 1; oai_exit = 1;
if (ru_m.rfdevice.trx_end_func) { if (ru_m.rfdevice.trx_end_func) {
if (ru_m.rfdevice.trx_get_stats_func) {
ru_m.rfdevice.trx_get_stats_func(&ru_m.rfdevice);
ru_m.rfdevice.trx_get_stats_func = NULL;
}
ru_m.rfdevice.trx_end_func(&ru_m.rfdevice); ru_m.rfdevice.trx_end_func(&ru_m.rfdevice);
ru_m.rfdevice.trx_end_func = NULL; ru_m.rfdevice.trx_end_func = NULL;
} }
if (ru_m.ifdevice.trx_end_func) { if (ru_m.ifdevice.trx_end_func) {
if (ru_m.ifdevice.trx_get_stats_func) {
ru_m.ifdevice.trx_get_stats_func(&ru_m.ifdevice);
ru_m.ifdevice.trx_get_stats_func = NULL;
}
ru_m.ifdevice.trx_end_func(&ru_m.ifdevice); ru_m.ifdevice.trx_end_func(&ru_m.ifdevice);
ru_m.ifdevice.trx_end_func = NULL; ru_m.ifdevice.trx_end_func = NULL;
} }
@@ -363,11 +371,19 @@ int main ( int argc, char **argv )
end_configmodule(uniqCfg); end_configmodule(uniqCfg);
if (ru->rfdevice.trx_end_func) { if (ru->rfdevice.trx_end_func) {
if (ru->rfdevice.trx_get_stats_func) {
ru->rfdevice.trx_get_stats_func(&ru->rfdevice);
ru->rfdevice.trx_get_stats_func = NULL;
}
ru->rfdevice.trx_end_func(&ru->rfdevice); ru->rfdevice.trx_end_func(&ru->rfdevice);
ru->rfdevice.trx_end_func = NULL; ru->rfdevice.trx_end_func = NULL;
} }
if (ru->ifdevice.trx_end_func) { if (ru->ifdevice.trx_end_func) {
if (ru->ifdevice.trx_get_stats_func) {
ru->ifdevice.trx_get_stats_func(&ru->ifdevice);
ru->ifdevice.trx_get_stats_func = NULL;
}
ru->ifdevice.trx_end_func(&ru->ifdevice); ru->ifdevice.trx_end_func(&ru->ifdevice);
ru->ifdevice.trx_end_func = NULL; ru->ifdevice.trx_end_func = NULL;
} }
+3
View File
@@ -1371,6 +1371,9 @@ int start_rf(RU_t *ru) {
} }
int stop_rf(RU_t *ru) { int stop_rf(RU_t *ru) {
if (ru->rfdevice.trx_get_stats_func) {
ru->rfdevice.trx_get_stats_func(&ru->rfdevice);
}
ru->rfdevice.trx_end_func(&ru->rfdevice); ru->rfdevice.trx_end_func(&ru->rfdevice);
return 0; return 0;
} }
+14
View File
@@ -207,11 +207,19 @@ void exit_function(const char *file, const char *function, const int line, const
for (ru_id=0; ru_id<RC.nb_RU; ru_id++) { for (ru_id=0; ru_id<RC.nb_RU; ru_id++) {
if (RC.ru[ru_id] && RC.ru[ru_id]->rfdevice.trx_end_func) { if (RC.ru[ru_id] && RC.ru[ru_id]->rfdevice.trx_end_func) {
if (RC.ru[ru_id]->rfdevice.trx_get_stats_func) {
RC.ru[ru_id]->rfdevice.trx_get_stats_func(&RC.ru[ru_id]->rfdevice);
RC.ru[ru_id]->rfdevice.trx_get_stats_func = NULL;
}
RC.ru[ru_id]->rfdevice.trx_end_func(&RC.ru[ru_id]->rfdevice); RC.ru[ru_id]->rfdevice.trx_end_func(&RC.ru[ru_id]->rfdevice);
RC.ru[ru_id]->rfdevice.trx_end_func = NULL; RC.ru[ru_id]->rfdevice.trx_end_func = NULL;
} }
if (RC.ru[ru_id] && RC.ru[ru_id]->ifdevice.trx_end_func) { if (RC.ru[ru_id] && RC.ru[ru_id]->ifdevice.trx_end_func) {
if (RC.ru[ru_id]->ifdevice.trx_get_stats_func) {
RC.ru[ru_id]->ifdevice.trx_get_stats_func(&RC.ru[ru_id]->ifdevice);
RC.ru[ru_id]->ifdevice.trx_get_stats_func = NULL;
}
RC.ru[ru_id]->ifdevice.trx_end_func(&RC.ru[ru_id]->ifdevice); RC.ru[ru_id]->ifdevice.trx_end_func(&RC.ru[ru_id]->ifdevice);
RC.ru[ru_id]->ifdevice.trx_end_func = NULL; RC.ru[ru_id]->ifdevice.trx_end_func = NULL;
} }
@@ -423,11 +431,17 @@ int stop_L1(module_id_t gnb_id)
stop_RU(RC.nb_RU); stop_RU(RC.nb_RU);
/* stop trx devices, multiple carrier currently not supported by RU */ /* stop trx devices, multiple carrier currently not supported by RU */
if (ru->rfdevice.trx_get_stats_func) {
ru->rfdevice.trx_get_stats_func(&ru->rfdevice);
}
if (ru->rfdevice.trx_stop_func) { if (ru->rfdevice.trx_stop_func) {
ru->rfdevice.trx_stop_func(&ru->rfdevice); ru->rfdevice.trx_stop_func(&ru->rfdevice);
LOG_I(GNB_APP, "turned off RU rfdevice\n"); LOG_I(GNB_APP, "turned off RU rfdevice\n");
} }
if (ru->ifdevice.trx_get_stats_func) {
ru->ifdevice.trx_get_stats_func(&ru->rfdevice);
}
if (ru->ifdevice.trx_stop_func) { if (ru->ifdevice.trx_stop_func) {
ru->ifdevice.trx_stop_func(&ru->ifdevice); ru->ifdevice.trx_stop_func(&ru->ifdevice);
LOG_I(GNB_APP, "turned off RU ifdevice\n"); LOG_I(GNB_APP, "turned off RU ifdevice\n");
+7 -1
View File
@@ -170,8 +170,12 @@ void exit_function(const char *file, const char *function, const int line, const
if (PHY_vars_UE_g && PHY_vars_UE_g[0]) { if (PHY_vars_UE_g && PHY_vars_UE_g[0]) {
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
if (PHY_vars_UE_g[0][CC_id] && PHY_vars_UE_g[0][CC_id]->rfdevice.trx_end_func) if (PHY_vars_UE_g[0][CC_id] && PHY_vars_UE_g[0][CC_id]->rfdevice.trx_end_func) {
if (PHY_vars_UE_g[0][CC_id]->rfdevice.trx_get_stats_func) {
PHY_vars_UE_g[0][CC_id]->rfdevice.trx_get_stats_func(&PHY_vars_UE_g[0][CC_id]->rfdevice);
}
PHY_vars_UE_g[0][CC_id]->rfdevice.trx_end_func(&PHY_vars_UE_g[0][CC_id]->rfdevice); PHY_vars_UE_g[0][CC_id]->rfdevice.trx_end_func(&PHY_vars_UE_g[0][CC_id]->rfdevice);
}
} }
} }
@@ -591,6 +595,8 @@ int main(int argc, char **argv)
ret = pthread_join(phy_vars->stat_thread, NULL); ret = pthread_join(phy_vars->stat_thread, NULL);
AssertFatal(ret == 0, "pthread_join error %d, errno %d (%s)\n", ret, errno, strerror(errno)); AssertFatal(ret == 0, "pthread_join error %d, errno %d (%s)\n", ret, errno, strerror(errno));
} }
if (phy_vars->rfdevice.trx_get_stats_func)
phy_vars->rfdevice.trx_get_stats_func(&phy_vars->rfdevice);
if (phy_vars->rfdevice.trx_end_func) if (phy_vars->rfdevice.trx_end_func)
phy_vars->rfdevice.trx_end_func(&phy_vars->rfdevice); phy_vars->rfdevice.trx_end_func(&phy_vars->rfdevice);
} }
+5
View File
@@ -103,6 +103,11 @@ int trx_oran_set_gains(openair0_device *device, openair0_config_t *openair0_cfg)
int trx_oran_get_stats(openair0_device *device) int trx_oran_get_stats(openair0_device *device)
{ {
uint64_t total_time, used_time;
uint32_t num_core_used, core_used[64];
uint32_t ret = xran_get_time_stats(&total_time, &used_time, &num_core_used, &core_used[0], 0);
if (ret == 0)
LOG_I(HW, "xran_get_time_stats(): total thread time %ld, total time essential tasks %ld, num cores used %d\n", total_time, used_time, num_core_used);
printf("ORAN: %s\n", __FUNCTION__); printf("ORAN: %s\n", __FUNCTION__);
return (0); return (0);
} }