Skip to content

Commit 00ff1e7

Browse files
author
codebot
committed
Update main
2 parents 46def37 + 90b3683 commit 00ff1e7

File tree

52 files changed

+1062
-215
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1062
-215
lines changed

.gitlab/ci-shared/e2e.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ variables:
126126
export LOGNAME=ci_${GROUP}
127127
# Run Retina
128128
- |
129-
E2E_CMD="retina-launcher ${E2E_FILE_OR_DIR} ${RETINA_LAUNCHER_ARGS} --retina-request=${SRSRANDIR}/.gitlab/ci/e2e/${TESTBED}.yml -k '${KEYWORDS}' -m '${MARKERS}' --register-parameter ue.all.log_level=$E2E_LOG_LEVEL gnb.all.log_level=$E2E_LOG_LEVEL ${RETINA_PARAM_ARGS}"
129+
E2E_CMD="retina-launcher ${E2E_FILE_OR_DIR} ${RETINA_LAUNCHER_ARGS} --retina-request=${SRSRANDIR}/.gitlab/ci/e2e/${TESTBED}.yml -k '${KEYWORDS}' -m '${MARKERS}' --register-parameter ue.all.log_level=$E2E_LOG_LEVEL gnb.all.log_level=$E2E_LOG_LEVEL 5gc.all.log_level=$E2E_LOG_LEVEL ${RETINA_PARAM_ARGS}"
130130
echo "${E2E_CMD}"
131131
eval $E2E_CMD
132132
after_script:

.gitlab/ci/build.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
include:
1010
- project: softwareradiosystems/ci/srsran_project_packaging
11-
ref: "8"
11+
ref: "9"
1212
file: .gitlab/ci-shared/package.yml
1313
- local: .gitlab/ci-shared/build.yml
1414

@@ -130,7 +130,9 @@ variables:
130130
--exclude=${CI_PROJECT_DIR}/plugins/.*/include/srsran/asn1/nrppa/.* \
131131
--exclude=${CI_PROJECT_DIR}/plugins/.*/lib/asn1/nrppa/.* \
132132
--exclude-lines-by-pattern \".*srsran_assert.*|.*srsran_sanity_check.*\" \
133-
--root=${CI_PROJECT_DIR}"
133+
--root=${CI_PROJECT_DIR} \
134+
--gcov-ignore-parse-errors=all \
135+
--merge-mode-functions=merge-use-line-min"
134136

135137
echo "+ gcovr: Coverage generation"
136138
if ! output=$(gcovr $common_options --keep 2>&1); then

.gitlab/ci/builders.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ ubuntu-dpdk-builder arm64:
300300
- |
301301
mkdir -p ${CI_PROJECT_DIR}/${CONTEXT}/lib
302302
DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends curl apt-transport-https ca-certificates xz-utils
303-
curl --header "PRIVATE-TOKEN: $CODEBOT_TOKEN" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/wls/25.03/libwls.a" -o ${CI_PROJECT_DIR}/${CONTEXT}/lib/libwls.a
303+
curl --header "PRIVATE-TOKEN: $CODEBOT_TOKEN" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/wls/25.03/libwls.so" -o ${CI_PROJECT_DIR}/${CONTEXT}/lib/libwls.so
304304
- cp -r ${CI_PROJECT_DIR}/docker/scripts/. ${CI_PROJECT_DIR}/${CONTEXT}
305305
- mkdir -p $CONTEXT/lib $CONTEXT/uhd $CONTEXT/dpdk
306306
- ls -lah $CONTEXT $CONTEXT/lib $CONTEXT/uhd $CONTEXT/dpdk

.gitlab/ci/builders/archlinux/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# the distribution.
77
#
88

9-
ARG VERSION=base-20250511.0.348143
9+
ARG VERSION=base-20250615.0.365905
1010
FROM archlinux:$VERSION
1111

1212
ADD install_dependencies.sh /usr/local/bin

.gitlab/ci/e2e/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
SRSGNB_REGISTRY_URI=registry.gitlab.com/softwareradiosystems/srsgnb
22
RETINA_REGISTRY_PREFIX=registry.gitlab.com/softwareradiosystems/ci/retina
3-
RETINA_VERSION=0.68.2
3+
RETINA_VERSION=0.68.5
44
UBUNTU_VERSION=24.04
55
AMARISOFT_VERSION=2023-09-08
66
AMARISOFT_S72_NTN_VERSION=2024-12-13

.gitlab/ci/e2e/s72_uesim.yml

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,6 @@
2929
- type: ru
3030
model: amariue-s72
3131

32-
- name: amarisoft-mme
33-
type: 5gc
34-
image: ${RETINA_REGISTRY_PREFIX}/amarisoft5gc-remote:${RETINA_VERSION}
35-
taints: ["purpose=retina"]
36-
requirements:
37-
arch: amd64
38-
cpu:
39-
requests: 4
40-
limits: 4
41-
memory:
42-
requests: "4G"
43-
limits: "4G"
44-
ephemeral-storage:
45-
requests: "6G"
46-
limits: "6G"
47-
resources:
48-
- type: emulator
49-
model: callbox
50-
5132
- name: srs-gnb
5233
type: gnb
5334
image: ${RETINA_REGISTRY_PREFIX}/srsgnb:${RETINA_VERSION}
@@ -77,3 +58,22 @@
7758
- local_path: ${GNB_BUILD_PATH}/apps/gnb/gnb
7859
remote_path: /usr/local/bin/gnb
7960
is_executable: true
61+
62+
- name: amarisoft-mme
63+
type: 5gc
64+
image: ${RETINA_REGISTRY_PREFIX}/amarisoft5gc-remote:${RETINA_VERSION}
65+
taints: ["purpose=retina"]
66+
requirements:
67+
arch: amd64
68+
cpu:
69+
requests: 4
70+
limits: 4
71+
memory:
72+
requests: "4G"
73+
limits: "4G"
74+
ephemeral-storage:
75+
requests: "6G"
76+
limits: "6G"
77+
resources:
78+
- type: emulator
79+
model: callbox

apps/services/worker_manager/worker_manager.cpp

Lines changed: 73 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,11 @@
2121
*/
2222

2323
#include "worker_manager.h"
24+
#include "apps/helpers/metrics/metrics_helpers.h"
2425
#include "srsran/adt/byte_buffer.h"
2526
#include "srsran/du/du_high/du_high_executor_mapper.h"
27+
#include "srsran/srslog/srslog.h"
28+
#include "srsran/support/executors/concurrent_metrics_executor.h"
2629
#include "srsran/support/executors/inline_task_executor.h"
2730

2831
using namespace srsran;
@@ -269,7 +272,8 @@ void worker_manager::create_cu_up_executors(const worker_manager_config::cu_up_c
269272
*exec_map.at("low_prio_exec"),
270273
config.dedicated_io_ul_strand,
271274
&timers,
272-
config.executor_tracing_enable});
275+
config.executor_tracing_enable,
276+
config.metrics_period});
273277
}
274278

275279
void worker_manager::create_du_executors(const worker_manager_config::du_high_config& du_hi,
@@ -336,7 +340,7 @@ execution_config_helper::worker_pool worker_manager::create_low_prio_workers(uns
336340
// Left empty, is filled later.
337341
{},
338342
std::chrono::microseconds{100},
339-
os_thread_realtime_priority::no_realtime(),
343+
os_thread_realtime_priority::min(),
340344
std::vector<os_sched_affinity_bitmask>{low_prio_mask}};
341345

342346
return non_rt_pool;
@@ -480,10 +484,6 @@ worker_manager::create_du_crit_path_prio_executors(unsigned
480484
report_fatal_error("Failed to instantiate {} execution context", ul_worker_pool.name);
481485
}
482486

483-
upper_pucch_exec.push_back(exec_mng.executors().at(l1_pucch_exec_name));
484-
upper_pusch_exec.push_back(exec_mng.executors().at(l1_pusch_exec_name));
485-
upper_srs_exec.push_back(exec_mng.executors().at(l1_srs_exec_name));
486-
487487
// Instantiate dedicated worker pool for high priority tasks such as L2, the upper physical layer downlink
488488
// processing, and the PRACH detector. This worker pool comprises four different priority queues where the L2 and
489489
// the PRACH detector queues have the highest priority.
@@ -504,9 +504,58 @@ worker_manager::create_du_crit_path_prio_executors(unsigned
504504
report_fatal_error("Failed to instantiate {} execution context", dl_worker_pool.name);
505505
}
506506

507-
du_low_dl_executors.push_back(exec_mng.executors().at(l1_dl_exec_name));
508-
upper_prach_exec.push_back(exec_mng.executors().at(l1_prach_exec_name));
509-
upper_pdsch_exec.push_back(exec_mng.executors().at(l1_pdsch_exec_name));
507+
// TODO: move this to a dedicated worker mapper.
508+
task_executor* cell_upper_dl_exec = exec_mng.executors().at(l1_dl_exec_name);
509+
task_executor* cell_upper_pucch_exec = exec_mng.executors().at(l1_pucch_exec_name);
510+
task_executor* cell_upper_pusch_exec = exec_mng.executors().at(l1_pusch_exec_name);
511+
task_executor* cell_upper_srs_exec = exec_mng.executors().at(l1_srs_exec_name);
512+
task_executor* cell_upper_prach_exec = exec_mng.executors().at(l1_prach_exec_name);
513+
task_executor* cell_upper_pdsch_exec = exec_mng.executors().at(l1_pdsch_exec_name);
514+
515+
// Wrap executors with metrics.
516+
if (du_low.value().metrics_period.has_value()) {
517+
srslog::log_channel& metrics_logger = app_helpers::fetch_logger_metrics_log_channel();
518+
519+
std::chrono::milliseconds metrics_period = du_low.value().metrics_period.value();
520+
std::unique_ptr<task_executor> executor;
521+
522+
executor = make_concurrent_metrics_executor_ptr(
523+
l1_dl_exec_name, *cell_upper_dl_exec, *metrics_exec, metrics_logger, metrics_period);
524+
cell_upper_dl_exec = executor.get();
525+
executor_decorators_exec.emplace_back(std::move(executor));
526+
527+
executor = make_concurrent_metrics_executor_ptr(
528+
l1_pucch_exec_name, *cell_upper_pucch_exec, *metrics_exec, metrics_logger, metrics_period);
529+
cell_upper_pucch_exec = executor.get();
530+
executor_decorators_exec.emplace_back(std::move(executor));
531+
532+
executor = make_concurrent_metrics_executor_ptr(
533+
l1_pusch_exec_name, *cell_upper_pusch_exec, *metrics_exec, metrics_logger, metrics_period);
534+
cell_upper_pusch_exec = executor.get();
535+
executor_decorators_exec.emplace_back(std::move(executor));
536+
537+
executor = make_concurrent_metrics_executor_ptr(
538+
l1_srs_exec_name, *cell_upper_srs_exec, *metrics_exec, metrics_logger, metrics_period);
539+
cell_upper_srs_exec = executor.get();
540+
executor_decorators_exec.emplace_back(std::move(executor));
541+
542+
executor = make_concurrent_metrics_executor_ptr(
543+
l1_prach_exec_name, *cell_upper_prach_exec, *metrics_exec, metrics_logger, metrics_period);
544+
cell_upper_prach_exec = executor.get();
545+
executor_decorators_exec.emplace_back(std::move(executor));
546+
547+
executor = make_concurrent_metrics_executor_ptr(
548+
l1_pdsch_exec_name, *cell_upper_pdsch_exec, *metrics_exec, metrics_logger, metrics_period);
549+
cell_upper_pdsch_exec = executor.get();
550+
executor_decorators_exec.emplace_back(std::move(executor));
551+
}
552+
553+
du_low_dl_executors.push_back(cell_upper_dl_exec);
554+
upper_pucch_exec.push_back(cell_upper_pucch_exec);
555+
upper_pusch_exec.push_back(cell_upper_pusch_exec);
556+
upper_srs_exec.push_back(cell_upper_srs_exec);
557+
upper_prach_exec.push_back(cell_upper_prach_exec);
558+
upper_pdsch_exec.push_back(cell_upper_pdsch_exec);
510559
l2_execs.push_back(exec_mng.executors().at(l2_exec_name));
511560
}
512561

@@ -554,7 +603,21 @@ worker_manager::create_du_crit_path_prio_executors(unsigned
554603
report_fatal_error("Failed to instantiate {} execution context", pusch_decoder_worker_pool.name);
555604
}
556605

557-
upper_pusch_decoder_exec.push_back(exec_mng.executors().at(pusch_decoder_exec_name));
606+
task_executor* cell_upper_pusch_decoder_exec = exec_mng.executors().at(pusch_decoder_exec_name);
607+
if (du_low.value().metrics_period.has_value()) {
608+
srslog::log_channel& metrics_logger = app_helpers::fetch_logger_metrics_log_channel();
609+
610+
std::unique_ptr<task_executor> concurrent_metrics_executor =
611+
make_concurrent_metrics_executor_ptr(pusch_decoder_exec_name,
612+
*cell_upper_pusch_decoder_exec,
613+
*metrics_exec,
614+
metrics_logger,
615+
du_low.value().metrics_period.value());
616+
cell_upper_pusch_decoder_exec = concurrent_metrics_executor.get();
617+
executor_decorators_exec.emplace_back(std::move(concurrent_metrics_executor));
618+
}
619+
620+
upper_pusch_decoder_exec.push_back(cell_upper_pusch_decoder_exec);
558621
}
559622

560623
return desc;

apps/services/worker_manager/worker_manager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ struct worker_manager : public worker_manager_executor_getter {
104104
/// Manager of execution contexts and respective executors instantiated by the application.
105105
task_execution_manager exec_mng;
106106

107+
/// Collection of task executor decorators.
108+
std::vector<std::unique_ptr<task_executor>> executor_decorators_exec;
109+
107110
os_sched_affinity_manager low_prio_affinity_mng;
108111
os_sched_affinity_bitmask ru_timing_mask;
109112

apps/services/worker_manager/worker_manager_config.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,12 @@ struct worker_manager_config {
7070

7171
/// DU low worker configuration.
7272
struct du_low_config {
73-
bool is_blocking_mode_active;
74-
unsigned nof_ul_threads;
75-
unsigned nof_dl_threads;
76-
unsigned nof_pusch_decoder_threads;
77-
unsigned nof_cells;
73+
bool is_blocking_mode_active;
74+
unsigned nof_ul_threads;
75+
unsigned nof_dl_threads;
76+
unsigned nof_pusch_decoder_threads;
77+
unsigned nof_cells;
78+
std::optional<std::chrono::milliseconds> metrics_period;
7879
};
7980

8081
/// DU high worker configuration.
@@ -104,6 +105,8 @@ struct worker_manager_config {
104105
bool dedicated_io_ul_strand = true;
105106
/// Whether to enable task tracing.
106107
bool executor_tracing_enable = false;
108+
/// Whether to log performance metrics for the CU-UP executors.
109+
std::optional<std::chrono::milliseconds> metrics_period;
107110
};
108111

109112
/// PCAP worker configuration.

0 commit comments

Comments
 (0)