linux-cp: add support for tap num queues config

This change allows to limit lcp interface queues
to be used by explicit host interface workers.

Type: improvement
Signed-off-by: Vladislav Grishenko <themiron@yandex-team.ru>
Change-Id: I0626f66021e5a5f251470156231dc44ddaea5ee6
This commit is contained in:
Vladislav Grishenko
2023-10-07 23:04:03 +05:00
committed by Matthew Smith
parent d465fd0819
commit 704d5a53e0
3 changed files with 39 additions and 2 deletions
+22
View File
@@ -161,6 +161,28 @@ lcp_get_netlink_processing_active (void)
return lcpm->netlink_processing_active;
}
void
lcp_set_default_num_queues (u16 num_queues, u8 is_tx)
{
lcp_main_t *lcpm = &lcp_main;
if (is_tx)
lcpm->num_tx_queues = num_queues;
else
lcpm->num_rx_queues = num_queues;
}
u16
lcp_get_default_num_queues (u8 is_tx)
{
lcp_main_t *lcpm = &lcp_main;
if (is_tx)
return lcpm->num_tx_queues;
return lcpm->num_rx_queues ?: vlib_num_workers ();
}
/*
* fd.io coding-style-patch-verification: ON
*
+8
View File
@@ -28,6 +28,8 @@ typedef struct lcp_main_s
u8 lcp_sync; /* Automatically sync VPP changes to LCP */
u8 del_static_on_link_down; /* Delete static routes when link goes down */
u8 del_dynamic_on_link_down; /* Delete dynamic routes when link goes down */
u16 num_rx_queues;
u16 num_tx_queues;
u8 test_mode; /* Set when Unit testing */
u8 netlink_processing_active; /* Set while a batch of Netlink messages are
being processed */
@@ -61,6 +63,12 @@ u8 lcp_get_del_dynamic_on_link_down (void);
void lcp_set_netlink_processing_active (u8 is_processing);
u8 lcp_get_netlink_processing_active (void);
/**
* Get/Set the default queue number for LCP host taps.
*/
void lcp_set_default_num_queues (u16 num_queues, u8 is_tx);
u16 lcp_get_default_num_queues (u8 is_tx);
#endif
/*
+9 -2
View File
@@ -555,6 +555,7 @@ static clib_error_t *
lcp_itf_pair_config (vlib_main_t *vm, unformat_input_t *input)
{
u8 *default_ns;
u32 tmp;
default_ns = NULL;
@@ -579,6 +580,10 @@ lcp_itf_pair_config (vlib_main_t *vm, unformat_input_t *input)
lcp_set_del_static_on_link_down (1 /* is_del */);
else if (unformat (input, "del-dynamic-on-link-down"))
lcp_set_del_dynamic_on_link_down (1 /* is_del */);
else if (unformat (input, "num-rx-queues %d", &tmp))
lcp_set_default_num_queues (tmp, 0 /* is_tx */);
else if (unformat (input, "num-tx-queues %d", &tmp))
lcp_set_default_num_queues (tmp, 1 /* is_tx */);
else
return clib_error_return (0, "interfaces not found");
}
@@ -988,8 +993,10 @@ lcp_itf_pair_create (u32 phy_sw_if_index, u8 *host_if_name,
else
{
tap_create_if_args_t args = {
.num_rx_queues = clib_max (1, vlib_num_workers ()),
.num_tx_queues = 1,
.num_rx_queues =
clib_max (1, lcp_get_default_num_queues (0 /* is_tx */)),
.num_tx_queues =
clib_max (1, lcp_get_default_num_queues (1 /* is_tx */)),
.id = hw->hw_if_index,
.sw_if_index = ~0,
.rx_ring_sz = 256,