[dpdk-dev] [RFC PATCH v1 3/4] net/i40e: add TxRx tuning parameters

Remy Horton remy.horton at intel.com
Wed Mar 7 13:08:50 CET 2018


The optimal values of several transmission & reception related
parameters, such as burst sizes, descriptor ring sizes, and number
of queues, varies between different network interface devices. This
patch allows individual PMDs to specify preferred parameter values.

Signed-off-by: Remy Horton <remy.horton at intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 35 ++++++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 508b417..4bcd05e 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -3168,6 +3168,7 @@ i40e_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 	struct i40e_vsi *vsi = pf->main_vsi;
 	struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
+	struct rte_eth_dev_pref_queue_info *pref_q_info;
 
 	dev_info->pci_dev = pci_dev;
 	dev_info->max_rx_queues = vsi->nb_qps;
@@ -3248,15 +3249,43 @@ i40e_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
 		dev_info->max_tx_queues += dev_info->vmdq_queue_num;
 	}
 
-	if (I40E_PHY_TYPE_SUPPORT_40G(hw->phy.phy_types))
+	pref_q_info = &dev_info->preferred_queue_values;
+	if (I40E_PHY_TYPE_SUPPORT_40G(hw->phy.phy_types)) {
 		/* For XL710 */
 		dev_info->speed_capa = ETH_LINK_SPEED_40G;
-	else if (I40E_PHY_TYPE_SUPPORT_25G(hw->phy.phy_types))
+		pref_q_info->nb_tx_queues = 2;
+		pref_q_info->nb_rx_queues = 2;
+		if (dev->data->nb_rx_queues == 1)
+			pref_q_info->rx_ring_size = 2048;
+		else
+			pref_q_info->rx_ring_size = 1024;
+		if (dev->data->nb_tx_queues == 1)
+			pref_q_info->tx_ring_size = 1024;
+		else
+			pref_q_info->tx_ring_size = 512;
+
+	} else if (I40E_PHY_TYPE_SUPPORT_25G(hw->phy.phy_types)) {
 		/* For XXV710 */
 		dev_info->speed_capa = ETH_LINK_SPEED_25G;
-	else
+		pref_q_info->nb_tx_queues = 1;
+		pref_q_info->nb_rx_queues = 1;
+		pref_q_info->rx_ring_size = 256;
+		pref_q_info->tx_ring_size = 256;
+	} else {
 		/* For X710 */
 		dev_info->speed_capa = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_10G;
+		pref_q_info->nb_tx_queues = 1;
+		pref_q_info->nb_rx_queues = 1;
+		if (dev->data->dev_conf.link_speeds & ETH_LINK_SPEED_10G) {
+			pref_q_info->rx_ring_size = 512;
+			pref_q_info->tx_ring_size = 256;
+		} else {
+			pref_q_info->rx_ring_size = 256;
+			pref_q_info->tx_ring_size = 256;
+		}
+	}
+	pref_q_info->tx_burst_size = 32;
+	pref_q_info->rx_burst_size = 32;
 }
 
 static int
-- 
2.9.5



More information about the dev mailing list