summaryrefslogtreecommitdiff
path: root/drivers/net/mlx5/mlx5_ethdev.c
diff options
context:
space:
mode:
authorShahaf Shuler <shahafs@mellanox.com>2018-05-01 12:58:49 +0300
committerFerruh Yigit <ferruh.yigit@intel.com>2018-05-14 22:31:48 +0100
commitd11d651f6d972a9802f1dc20ed9eaebcd367bc3b (patch)
treebd867c219afa5a95e7f0ddd09b849cf5737967de /drivers/net/mlx5/mlx5_ethdev.c
parent7d2e32f76cfccdbc565738a9bfb9ca4512e7f238 (diff)
downloaddpdk-d11d651f6d972a9802f1dc20ed9eaebcd367bc3b.zip
dpdk-d11d651f6d972a9802f1dc20ed9eaebcd367bc3b.tar.gz
dpdk-d11d651f6d972a9802f1dc20ed9eaebcd367bc3b.tar.xz
net/mlx5: add Rx and Tx tuning parameters
A new ethdev API was exposed by commit 3be82f5cc5e3 ("ethdev: support PMD-tuned Tx/Rx parameters") Enabling the PMD to provide default parameters in case no strict request from application in order to improve the out of the box experience. While the current API lacks the means for the PMD to provide the best possible value, providing the best default the PMD can guess. The values are based on Mellanox performance report and depends on the underlying NIC capabilities. Signed-off-by: Shahaf Shuler <shahafs@mellanox.com> Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Diffstat (limited to 'drivers/net/mlx5/mlx5_ethdev.c')
-rw-r--r--drivers/net/mlx5/mlx5_ethdev.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c
index 588d4ba..3fad199 100644
--- a/drivers/net/mlx5/mlx5_ethdev.c
+++ b/drivers/net/mlx5/mlx5_ethdev.c
@@ -417,6 +417,45 @@ mlx5_dev_configure(struct rte_eth_dev *dev)
}
/**
+ * Sets default tuning parameters.
+ *
+ * @param dev
+ * Pointer to Ethernet device.
+ * @param[out] info
+ * Info structure output buffer.
+ */
+static void
+mlx5_set_default_params(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
+{
+ struct priv *priv = dev->data->dev_private;
+
+ /* Minimum CPU utilization. */
+ info->default_rxportconf.ring_size = 256;
+ info->default_txportconf.ring_size = 256;
+ info->default_rxportconf.burst_size = 64;
+ info->default_txportconf.burst_size = 64;
+ if (priv->link_speed_capa & ETH_LINK_SPEED_100G) {
+ info->default_rxportconf.nb_queues = 16;
+ info->default_txportconf.nb_queues = 16;
+ if (dev->data->nb_rx_queues > 2 ||
+ dev->data->nb_tx_queues > 2) {
+ /* Max Throughput. */
+ info->default_rxportconf.ring_size = 2048;
+ info->default_txportconf.ring_size = 2048;
+ }
+ } else {
+ info->default_rxportconf.nb_queues = 8;
+ info->default_txportconf.nb_queues = 8;
+ if (dev->data->nb_rx_queues > 2 ||
+ dev->data->nb_tx_queues > 2) {
+ /* Max Throughput. */
+ info->default_rxportconf.ring_size = 4096;
+ info->default_txportconf.ring_size = 4096;
+ }
+ }
+}
+
+/**
* DPDK callback to get information about the device.
*
* @param dev
@@ -458,6 +497,7 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
info->hash_key_size = rss_hash_default_key_len;
info->speed_capa = priv->link_speed_capa;
info->flow_type_rss_offloads = ~MLX5_RSS_HF_MASK;
+ mlx5_set_default_params(dev, info);
}
/**