Skip to content

Commit e38e418

Browse files
author
codebot
committed
Update main
# Conflicts: # .github/workflows/codeql.yml
2 parents 99d51c7 + 549661c commit e38e418

File tree

54 files changed

+406
-198
lines changed

Some content is hidden

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

54 files changed

+406
-198
lines changed

.github/workflows/codeql.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ on:
66
pull_request:
77
# The branches below must be a subset of the branches above
88
branches: [ "main" ]
9-
schedule:
10-
- cron: '38 10 * * 2'
119

1210
jobs:
1311
analyze:

.gitlab/ci/e2e.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,18 +280,21 @@ rf:
280280
variables:
281281
KEYWORDS: "not iperf"
282282
E2E_LOG_LEVEL: "info"
283+
allow_failure: true
283284

284285
rf-iperf-udp:
285286
extends: .rf
286287
variables:
287288
KEYWORDS: "iperf and udp"
288289
E2E_LOG_LEVEL: "info"
290+
allow_failure: true
289291

290292
rf-iperf-tcp:
291293
extends: .rf
292294
variables:
293295
KEYWORDS: "iperf and tcp"
294296
E2E_LOG_LEVEL: "info"
297+
allow_failure: true
295298

296299
rf-tsan:
297300
extends: .rf
@@ -301,6 +304,7 @@ rf-tsan:
301304
- job: "smoke tsan update cache"
302305
artifacts: true
303306
- *retina-needs
307+
retry: 2
304308

305309
rf-asan:
306310
extends: .rf

CHANGELOG

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Change Log for Releases
22
=======================
33

4+
## 23.10
5+
* Added downlink MIMO (up to 4 layers)
6+
* Added Open Fronthaul (OFH) interface for split 7.2 ORAN radio units (optionally using DPDK)
7+
* Added E2 interface including KPM and RAN control (RC) service model
8+
* Added Timing Advance support
9+
* Added Docker files
10+
* Expose many more config parameters
11+
* Other bug-fixes and improved stability and performance in all parts
12+
413
## 23.5
514
* Updated ASN.1 of RRC/NGAP/F1AP/E1AP to 3GPP Release 17.4
615
* Add UE capability transfer procedure

apps/gnb/gnb.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,9 @@ int main(int argc, char** argv)
561561
// Stop CU-UP activity.
562562
cu_up_obj->stop();
563563

564+
// Stop CU-CP activity.
565+
cu_cp_obj->stop();
566+
564567
if (not gnb_cfg.amf_cfg.no_core) {
565568
gnb_logger.info("Closing network connections...");
566569
ngap_adapter->disconnect_gateway();

apps/gnb/gnb_appconfig.h

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ struct cell_appconfig {
496496
/// RLC UM TX configuration
497497
struct rlc_tx_um_appconfig {
498498
uint16_t sn_field_length; ///< Number of bits used for sequence number
499-
int32_t t_reassembly; ///< Timer used by rx to detect PDU loss (ms)
499+
uint32_t queue_size; ///< RLC SDU queue size
500500
};
501501

502502
/// RLC UM RX configuration
@@ -519,6 +519,7 @@ struct rlc_tx_am_appconfig {
519519
int32_t poll_pdu; ///< Insert poll bit after this many PDUs
520520
int32_t poll_byte; ///< Insert poll bit after this much data (bytes)
521521
uint32_t max_window = 0; ///< Custom parameter to limit the maximum window size for memory reasons. 0 means no limit.
522+
uint32_t queue_size = 4096; ///< RLC SDU queue size
522523
};
523524

524525
/// RLC UM RX configuration
@@ -668,6 +669,10 @@ struct cu_cp_appconfig {
668669
security_appconfig security_config;
669670
};
670671

672+
struct cu_up_appconfig {
673+
unsigned gtpu_queue_size = 2048;
674+
};
675+
671676
struct log_appconfig {
672677
std::string filename = "/tmp/gnb.log"; // Path to write log file or "stdout" to print to console.
673678
std::string all_level = "warning"; // Default log level for all layers.
@@ -753,7 +758,7 @@ struct expert_upper_phy_appconfig {
753758
/// Higher values increase the downlink processing pipeline length, which improves performance and stability for
754759
/// demanding cell configurations, such as using large bandwidths or higher order MIMO. Higher values also increase
755760
/// the round trip latency of the radio link.
756-
unsigned max_processing_delay_slots = 2U;
761+
unsigned max_processing_delay_slots = 5U;
757762
/// Number of PUSCH LDPC decoder iterations.
758763
unsigned pusch_decoder_max_iterations = 6;
759764
/// Set to true to enable the PUSCH LDPC decoder early stop.
@@ -899,6 +904,8 @@ struct ru_ofh_cell_appconfig {
899904
ru_ofh_base_cell_appconfig cell;
900905
/// Ethernet network interface name.
901906
std::string network_interface = "enp1s0f0";
907+
/// Promiscuous mode flag.
908+
bool enable_promiscuous_mode = true;
902909
/// Radio Unit MAC address.
903910
std::string ru_mac_address = "70:b3:d5:e1:5b:06";
904911
/// Distributed Unit MAC address.
@@ -974,15 +981,6 @@ struct upper_phy_threads_appconfig {
974981

975982
/// Lower PHY thread configuration fo the gNB.
976983
struct lower_phy_threads_appconfig {
977-
lower_phy_threads_appconfig()
978-
{
979-
// Set the lower PHY thread profile according to the number of CPU cores.
980-
if (srsran::compute_host_nof_hardware_threads() >= 8U) {
981-
execution_profile = lower_phy_thread_profile::quad;
982-
} else {
983-
execution_profile = lower_phy_thread_profile::dual;
984-
}
985-
}
986984
/// \brief Lower physical layer thread profile.
987985
///
988986
/// If not configured, a default value is selected based on the number of available CPU cores.
@@ -996,6 +994,41 @@ struct ofh_threads_appconfig {
996994

997995
/// Expert threads configuration of the gNB app.
998996
struct expert_threads_appconfig {
997+
expert_threads_appconfig()
998+
{
999+
unsigned nof_threads = compute_host_nof_hardware_threads();
1000+
1001+
if (nof_threads < 4) {
1002+
upper_threads.nof_ul_threads = 1;
1003+
upper_threads.nof_pusch_decoder_threads = 0;
1004+
upper_threads.nof_pdsch_threads = 1;
1005+
upper_threads.nof_dl_threads = 1;
1006+
lower_threads.execution_profile = lower_phy_thread_profile::single;
1007+
ofh_threads.is_downlink_parallelized = false;
1008+
} else if (nof_threads < 8) {
1009+
upper_threads.nof_ul_threads = 1;
1010+
upper_threads.nof_pusch_decoder_threads = 1;
1011+
upper_threads.nof_pdsch_threads = 2;
1012+
upper_threads.nof_dl_threads = 2;
1013+
lower_threads.execution_profile = lower_phy_thread_profile::dual;
1014+
ofh_threads.is_downlink_parallelized = true;
1015+
} else if (nof_threads < 16) {
1016+
upper_threads.nof_ul_threads = 1;
1017+
upper_threads.nof_pusch_decoder_threads = 1;
1018+
upper_threads.nof_pdsch_threads = 4;
1019+
upper_threads.nof_dl_threads = 2;
1020+
lower_threads.execution_profile = lower_phy_thread_profile::quad;
1021+
ofh_threads.is_downlink_parallelized = true;
1022+
} else {
1023+
upper_threads.nof_ul_threads = 2;
1024+
upper_threads.nof_pusch_decoder_threads = 2;
1025+
upper_threads.nof_pdsch_threads = 8;
1026+
upper_threads.nof_dl_threads = 4;
1027+
lower_threads.execution_profile = lower_phy_thread_profile::quad;
1028+
ofh_threads.is_downlink_parallelized = true;
1029+
}
1030+
}
1031+
9991032
/// Upper PHY thread configuration of the gNB app.
10001033
upper_phy_threads_appconfig upper_threads;
10011034
/// Lower PHY thread configuration of the gNB app.
@@ -1036,6 +1069,8 @@ struct gnb_appconfig {
10361069
amf_appconfig amf_cfg;
10371070
/// CU-CP configuration.
10381071
cu_cp_appconfig cu_cp_cfg;
1072+
/// CU-CP configuration.
1073+
cu_up_appconfig cu_up_cfg;
10391074
/// \brief E2 configuration.
10401075
e2_appconfig e2_cfg;
10411076
/// Radio Unit configuration.

apps/gnb/gnb_appconfig_cli11_schema.cpp

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include "gnb_appconfig_cli11_schema.h"
2424
#include "gnb_appconfig.h"
25+
#include "srsran/ran/duplex_mode.h"
2526
#include "srsran/ran/pdsch/pdsch_mcs.h"
2627
#include "srsran/support/cli11_utils.h"
2728
#include "srsran/support/config_parsers.h"
@@ -388,6 +389,11 @@ static void configure_cli11_cu_cp_args(CLI::App& app, cu_cp_appconfig& cu_cp_par
388389
configure_cli11_security_args(*security_subcmd, cu_cp_params.security_config);
389390
}
390391

392+
static void configure_cli11_cu_up_args(CLI::App& app, cu_up_appconfig& cu_up_params)
393+
{
394+
app.add_option("--gtpu_queue_size", cu_up_params.gtpu_queue_size, "GTP-U queue size, in PDUs")->capture_default_str();
395+
}
396+
391397
static void configure_cli11_expert_phy_args(CLI::App& app, expert_upper_phy_appconfig& expert_phy_params)
392398
{
393399
auto pusch_sinr_method_check = [](const std::string& value) -> std::string {
@@ -1288,6 +1294,8 @@ static void configure_cli11_rlc_um_args(CLI::App& app, rlc_um_appconfig& rlc_um_
12881294
{
12891295
CLI::App* rlc_tx_um_subcmd = app.add_subcommand("tx", "UM TX parameters");
12901296
rlc_tx_um_subcmd->add_option("--sn", rlc_um_params.tx.sn_field_length, "RLC UM TX SN")->capture_default_str();
1297+
rlc_tx_um_subcmd->add_option("--queue-size", rlc_um_params.tx.queue_size, "RLC UM TX SDU queue size")
1298+
->capture_default_str();
12911299
CLI::App* rlc_rx_um_subcmd = app.add_subcommand("rx", "UM TX parameters");
12921300
rlc_rx_um_subcmd->add_option("--sn", rlc_um_params.rx.sn_field_length, "RLC UM RX SN")->capture_default_str();
12931301
rlc_rx_um_subcmd->add_option("--t-reassembly", rlc_um_params.rx.t_reassembly, "RLC UM t-Reassembly")
@@ -1304,11 +1312,12 @@ static void configure_cli11_rlc_am_args(CLI::App& app, rlc_am_appconfig& rlc_am_
13041312
->capture_default_str();
13051313
rlc_tx_am_subcmd->add_option("--poll-pdu", rlc_am_params.tx.poll_pdu, "RLC AM TX PollPdu")->capture_default_str();
13061314
rlc_tx_am_subcmd->add_option("--poll-byte", rlc_am_params.tx.poll_byte, "RLC AM TX PollByte")->capture_default_str();
1307-
rlc_tx_am_subcmd
1308-
->add_option("--max_window",
1309-
rlc_am_params.tx.max_window,
1310-
"Non-standard parameter that limits the tx window size. Can be used for limiting memory usage with "
1311-
"large windows. 0 means no limits other than the SN size (i.e. 2^[sn_size-1]).")
1315+
rlc_tx_am_subcmd->add_option(
1316+
"--max_window",
1317+
rlc_am_params.tx.max_window,
1318+
"Non-standard parameter that limits the tx window size. Can be used for limiting memory usage with "
1319+
"large windows. 0 means no limits other than the SN size (i.e. 2^[sn_size-1]).");
1320+
rlc_tx_am_subcmd->add_option("--queue-size", rlc_am_params.tx.queue_size, "RLC AM TX SDU queue size")
13121321
->capture_default_str();
13131322
CLI::App* rlc_rx_am_subcmd = app.add_subcommand("rx", "AM RX parameters");
13141323
rlc_rx_am_subcmd->add_option("--sn", rlc_am_params.rx.sn_field_length, "RLC AM RX SN")->capture_default_str();
@@ -1656,6 +1665,8 @@ static void configure_cli11_ru_ofh_cells_args(CLI::App& app, ru_ofh_cell_appconf
16561665
{
16571666
configure_cli11_ru_ofh_base_cell_args(app, config.cell);
16581667
app.add_option("--network_interface", config.network_interface, "Network interface")->capture_default_str();
1668+
app.add_option("--enable_promiscuous", config.enable_promiscuous_mode, "Promiscuous mode flag")
1669+
->capture_default_str();
16591670
app.add_option("--ru_mac_addr", config.ru_mac_address, "Radio Unit MAC address")->capture_default_str();
16601671
app.add_option("--du_mac_addr", config.du_mac_address, "Distributed Unit MAC address")->capture_default_str();
16611672
app.add_option("--vlan_tag", config.vlan_tag, "V-LAN identifier")->capture_default_str()->check(CLI::Range(1, 4094));
@@ -1986,6 +1997,47 @@ static void manage_hal_optional(CLI::App& app, gnb_appconfig& gnb_cfg)
19861997
}
19871998
}
19881999

2000+
static void manage_expert_execution_threads(CLI::App& app, gnb_appconfig& gnb_cfg)
2001+
{
2002+
if (!variant_holds_alternative<ru_sdr_appconfig>(gnb_cfg.ru_cfg)) {
2003+
return;
2004+
}
2005+
2006+
// Ignore the default settings based in the number of CPU cores for ZMQ.
2007+
if (variant_get<ru_sdr_appconfig>(gnb_cfg.ru_cfg).device_driver == "zmq") {
2008+
upper_phy_threads_appconfig& upper = gnb_cfg.expert_execution_cfg.threads.upper_threads;
2009+
upper.nof_pdsch_threads = 1;
2010+
upper.nof_pusch_decoder_threads = 0;
2011+
upper.nof_ul_threads = 1;
2012+
upper.nof_dl_threads = 1;
2013+
gnb_cfg.expert_execution_cfg.threads.lower_threads.execution_profile = lower_phy_thread_profile::blocking;
2014+
}
2015+
}
2016+
2017+
static void manage_processing_delay(CLI::App& app, gnb_appconfig& gnb_cfg)
2018+
{
2019+
// If max proc delay property is present in the config, do nothing.
2020+
CLI::App* expert_cmd = app.get_subcommand("expert_phy");
2021+
if (expert_cmd->count_all() >= 1 && expert_cmd->count("--max_proc_delay") >= 1) {
2022+
return;
2023+
}
2024+
2025+
// As processing delay is not cell related, use the first cell to update the value.
2026+
const auto& cell = gnb_cfg.cells_cfg.front().cell;
2027+
nr_band band = cell.band ? cell.band.value() : band_helper::get_band_from_dl_arfcn(cell.dl_arfcn);
2028+
2029+
switch (band_helper::get_duplex_mode(band)) {
2030+
case duplex_mode::TDD:
2031+
gnb_cfg.expert_phy_cfg.max_processing_delay_slots = 5;
2032+
break;
2033+
case duplex_mode::FDD:
2034+
gnb_cfg.expert_phy_cfg.max_processing_delay_slots = 2;
2035+
break;
2036+
default:
2037+
break;
2038+
}
2039+
}
2040+
19892041
void srsran::configure_cli11_with_gnb_appconfig_schema(CLI::App& app, gnb_appconfig& gnb_cfg)
19902042
{
19912043
app.add_option("--gnb_id", gnb_cfg.gnb_id, "gNodeB identifier")->capture_default_str();
@@ -2018,6 +2070,10 @@ void srsran::configure_cli11_with_gnb_appconfig_schema(CLI::App& app, gnb_appcon
20182070
CLI::App* cu_cp_subcmd = app.add_subcommand("cu_cp", "CU-CP parameters")->configurable();
20192071
configure_cli11_cu_cp_args(*cu_cp_subcmd, gnb_cfg.cu_cp_cfg);
20202072

2073+
// CU-UP section
2074+
CLI::App* cu_up_subcmd = app.add_subcommand("cu_up", "CU-CP parameters")->configurable();
2075+
configure_cli11_cu_up_args(*cu_up_subcmd, gnb_cfg.cu_up_cfg);
2076+
20212077
// NOTE: CLI11 needs that the life of the variable lasts longer than the call of this function. As both options need
20222078
// to be added and a variant is used to store the Radio Unit configuration, the configuration is parsed in a helper
20232079
// variable, but as it is requested later, the variable needs to be static.
@@ -2121,5 +2177,7 @@ void srsran::configure_cli11_with_gnb_appconfig_schema(CLI::App& app, gnb_appcon
21212177
app.callback([&]() {
21222178
manage_ru_variant(app, gnb_cfg, sdr_cfg, ofh_cfg);
21232179
manage_hal_optional(app, gnb_cfg);
2180+
manage_expert_execution_threads(app, gnb_cfg);
2181+
manage_processing_delay(app, gnb_cfg);
21242182
});
21252183
}

apps/gnb/gnb_appconfig_translators.cpp

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,7 @@ std::map<five_qi_t, du_qos_config> srsran::generate_du_qos_config(const gnb_appc
877877
if (!from_number(out_rlc.um.tx.sn_field_length, qos.rlc.um.tx.sn_field_length)) {
878878
report_error("Invalid RLC UM TX SN: 5QI={}, SN={}\n", qos.five_qi, qos.rlc.um.tx.sn_field_length);
879879
}
880+
out_rlc.um.tx.queue_size = qos.rlc.um.tx.queue_size;
880881
} else if (out_rlc.mode == rlc_mode::am) {
881882
// AM Config
882883
//< TX SN
@@ -888,6 +889,7 @@ std::map<five_qi_t, du_qos_config> srsran::generate_du_qos_config(const gnb_appc
888889
out_rlc.am.tx.poll_pdu = qos.rlc.am.tx.poll_pdu;
889890
out_rlc.am.tx.poll_byte = qos.rlc.am.tx.poll_byte;
890891
out_rlc.am.tx.max_window = qos.rlc.am.tx.max_window;
892+
out_rlc.am.tx.queue_size = qos.rlc.am.tx.queue_size;
891893
//< RX SN
892894
if (!from_number(out_rlc.am.rx.sn_field_length, qos.rlc.am.rx.sn_field_length)) {
893895
report_error("Invalid RLC AM RX SN: 5QI={}, SN={}\n", qos.five_qi, qos.rlc.am.rx.sn_field_length);
@@ -1169,7 +1171,8 @@ generate_ru_ofh_config(ru_ofh_configuration& out_cfg, const gnb_appconfig& confi
11691171
out_cfg.sector_configs.emplace_back();
11701172
ru_ofh_sector_configuration& sector_cfg = out_cfg.sector_configs.back();
11711173

1172-
sector_cfg.interface = cell_cfg.network_interface;
1174+
sector_cfg.interface = cell_cfg.network_interface;
1175+
sector_cfg.is_promiscuous_mode_enabled = cell_cfg.enable_promiscuous_mode;
11731176
if (!parse_mac_address(cell_cfg.du_mac_address, sector_cfg.mac_src_address)) {
11741177
srsran_terminate("Invalid Distributed Unit MAC address");
11751178
}
@@ -1284,6 +1287,14 @@ std::vector<upper_phy_config> srsran::generate_du_low_config(const gnb_appconfig
12841287
// Maximum number of HARQ processes for a PUSCH HARQ process.
12851288
static constexpr unsigned max_nof_pusch_harq = 16;
12861289

1290+
// Maximum concurrent PUSCH processing. If there are no dedicated threads for PUSCH decoding, set the maximum
1291+
// concurrency to one. Otherwise, assume every possible PUSCH transmission for the maximum number of HARQ could be
1292+
// enqueued.
1293+
unsigned max_pusch_concurrency = config.common_cell_cfg.pusch_cfg.max_puschs_per_slot * max_nof_pusch_harq;
1294+
if (config.expert_execution_cfg.threads.upper_threads.nof_pusch_decoder_threads == 0) {
1295+
max_pusch_concurrency = 1;
1296+
}
1297+
12871298
cfg.log_level = srslog::str_to_basic_level(config.log_cfg.phy_level);
12881299
cfg.enable_logging_broadcast = config.log_cfg.broadcast_enabled;
12891300
cfg.rx_symbol_printer_filename = config.log_cfg.phy_rx_symbols_filename;
@@ -1298,7 +1309,7 @@ std::vector<upper_phy_config> srsran::generate_du_low_config(const gnb_appconfig
12981309
cfg.nof_slots_ul_rg = ul_pipeline_depth;
12991310
cfg.nof_ul_processors = ul_pipeline_depth;
13001311
cfg.max_ul_thread_concurrency = config.expert_execution_cfg.threads.upper_threads.nof_ul_threads + 1;
1301-
cfg.max_pusch_concurrency = MAX_UE_PDUS_PER_SLOT * max_nof_pusch_harq;
1312+
cfg.max_pusch_concurrency = max_pusch_concurrency;
13021313
cfg.nof_pusch_decoder_threads = config.expert_execution_cfg.threads.upper_threads.nof_pusch_decoder_threads +
13031314
config.expert_execution_cfg.threads.upper_threads.nof_ul_threads;
13041315
cfg.nof_prach_buffer = prach_pipeline_depth * nof_slots_per_subframe;
@@ -1446,18 +1457,13 @@ static void derive_cell_auto_params(base_cell_appconfig& cell_cfg)
14461457
cell_cfg.tdd_ul_dl_cfg->pattern1.nof_ul_symbols = 0;
14471458
}
14481459

1449-
// If PRACH configuration Index not set, derive a valid one.
1460+
// If PRACH configuration Index not set, a default one is assigned.
14501461
if (not cell_cfg.prach_cfg.prach_config_index.has_value()) {
14511462
if (band_helper::get_duplex_mode(cell_cfg.band.value()) == duplex_mode::FDD) {
1452-
cell_cfg.prach_cfg.prach_config_index = 1;
1463+
cell_cfg.prach_cfg.prach_config_index = 16;
14531464
} else {
1454-
// TDD case. Ensure the PRACH falls in UL slots.
1455-
optional<uint8_t> index_found = prach_helper::find_valid_prach_config_index(
1456-
cell_cfg.common_scs, generate_tdd_pattern(cell_cfg.common_scs, cell_cfg.tdd_ul_dl_cfg.value()));
1457-
if (not index_found.has_value()) {
1458-
report_error("Failed to auto-derive PRACH configuration index");
1459-
}
1460-
cell_cfg.prach_cfg.prach_config_index = *index_found;
1465+
// Valid for TDD period of 5 ms. And, PRACH index 159 is well tested.
1466+
cell_cfg.prach_cfg.prach_config_index = 159;
14611467
}
14621468
}
14631469
}

apps/gnb/gnb_appconfig_validators.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ static bool validate_pucch_cell_app_config(const base_cell_appconfig& config)
218218
/// Validates the given PRACH cell application configuration. Returns true on success, otherwise false.
219219
static bool validate_prach_cell_app_config(const prach_appconfig& config, nr_band band)
220220
{
221-
srsran_assert(config.prach_config_index.has_value(), "The PRACH configuration index must be set or auto-derived.");
221+
srsran_assert(config.prach_config_index.has_value(), "The PRACH configuration index must be set.");
222222

223223
auto code =
224224
prach_helper::prach_config_index_is_valid(config.prach_config_index.value(), band_helper::get_duplex_mode(band));

apps/gnb/gnb_worker_manager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ void worker_manager::create_du_cu_executors(const gnb_appconfig& appcfg)
134134
{{concurrent_queue_policy::lockfree_mpmc, task_worker_queue_size},
135135
{concurrent_queue_policy::lockfree_mpmc, task_worker_queue_size},
136136
// The IO-broker is currently single threaded, so we can use a SPSC.
137-
{concurrent_queue_policy::lockfree_spsc, task_worker_queue_size}},
137+
{concurrent_queue_policy::lockfree_spsc, appcfg.cu_up_cfg.gtpu_queue_size}},
138138
std::chrono::microseconds{200},
139139
{{"ue_up_ctrl_exec", task_priority::max},
140140
{"ue_ul_exec", task_priority::max - 1, false},

0 commit comments

Comments
 (0)