summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2022-12-23 07:01:21 +0000
committersongyanchao <[email protected]>2022-12-23 07:01:21 +0000
commitf1baf57ba01d36cd4e36aa119965bfdf540974e3 (patch)
treed0a9c5accc72205a2152ae1be204e3f6b4322725
parentf5612d179de2a31dd7393f7ef70c0cafbd19e02c (diff)
🎈 perf(TSG-13124): 根据配置的RX队列数决定是否配置网卡RSSv4.6.10-20221223
根据配置的RX队列数决定是否配置网卡RSS
-rw-r--r--service/src/devmgr.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/service/src/devmgr.c b/service/src/devmgr.c
index 96fc8fe..0e0f3de 100644
--- a/service/src/devmgr.c
+++ b/service/src/devmgr.c
@@ -32,7 +32,7 @@
static struct rte_eth_conf eth_conf_default = {
.rxmode =
{
- .mq_mode = ETH_MQ_RX_RSS,
+ .mq_mode = ETH_MQ_RX_NONE,
.split_hdr_size = 0,
},
.txmode =
@@ -414,13 +414,13 @@ int vhost_dev_setup(const char * virtio_sym)
}
/* 用户参数解析:网卡参数设置 */
-static int gen_dpdk_dev_ethconf(struct dpdk_dev * dev, struct rte_eth_conf * out_eth_conf)
+static int gen_dpdk_dev_ethconf(struct dpdk_dev * dev, unsigned nr_rxq_use, struct rte_eth_conf * out_eth_conf)
{
struct mr_dev_desc * dev_desc = dev->ref_dev_desc;
struct rte_eth_conf eth_conf = eth_conf_default;
/* PCI devices */
- if (dev_desc->drv_type == MR_DEV_DRV_TYPE_DPDK_PCI)
+ if ((dev_desc->drv_type == MR_DEV_DRV_TYPE_DPDK_PCI) && (nr_rxq_use > 1))
{
/* only PCI devices can run at RSS mode. */
eth_conf.rxmode.mq_mode = ETH_MQ_RX_RSS;
@@ -727,10 +727,6 @@ static int dpdk_dev_setup_common(struct devmgr_main * devmgr_main, struct dpdk_d
return RT_ERR;
}
- // 配置端口信息
- struct rte_eth_conf local_eth_conf;
- gen_dpdk_dev_ethconf(dev, &local_eth_conf);
-
unsigned nr_rxq_use = 0;
unsigned nr_txq_use = 0;
@@ -765,6 +761,11 @@ static int dpdk_dev_setup_common(struct devmgr_main * devmgr_main, struct dpdk_d
dev->nr_hairpin_q = dev->en_smartoffload ? 1 : 0;
nr_rxq_use = dev->nr_rxq + dev->nr_ctx_rxq + dev->nr_hairpin_q;
nr_txq_use = dev->nr_txq + dev->nr_ctx_txq + dev->nr_hairpin_q;
+
+ // 配置端口信息
+ struct rte_eth_conf local_eth_conf;
+ gen_dpdk_dev_ethconf(dev, nr_rxq_use, &local_eth_conf);
+
ret = rte_eth_dev_configure(dev->port_id, nr_rxq_use, nr_txq_use, &local_eth_conf);
if (ret != 0)