[v2,00/14] add hairpin feature
Message ID | 1570218855-73478-1-git-send-email-orika@mellanox.com (mailing list archive) |
---|---|
Headers |
Return-Path: <dev-bounces@dpdk.org> X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 915771C25A; Fri, 4 Oct 2019 21:55:01 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 80D0723D for <dev@dpdk.org>; Fri, 4 Oct 2019 21:55:00 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from orika@mellanox.com) with ESMTPS (AES256-SHA encrypted); 4 Oct 2019 22:54:59 +0300 Received: from pegasus04.mtr.labs.mlnx. (pegasus04.mtr.labs.mlnx [10.210.16.126]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x94JsxSe006678; Fri, 4 Oct 2019 22:54:59 +0300 From: Ori Kam <orika@mellanox.com> To: Cc: dev@dpdk.org, orika@mellanox.com, jingjing.wu@intel.com, stephen@networkplumber.org, wenzhuo.lu@intel.com, bernard.iremonger@intel.com, thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com, viacheslavo@mellanox.com Date: Fri, 4 Oct 2019 19:54:01 +0000 Message-Id: <1570218855-73478-1-git-send-email-orika@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1569479349-36962-1-git-send-email-orika@mellanox.com> References: <1569479349-36962-1-git-send-email-orika@mellanox.com> Subject: [dpdk-dev] [PATCH v2 00/14] add hairpin feature X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> |
Message
Ori Kam
Oct. 4, 2019, 7:54 p.m. UTC
This patch set implements the hairpin feature. The hairpin feature was introduced in RFC[1] The hairpin feature (different name can be forward) acts as "bump on the wire", meaning that a packet that is received from the wire can be modified using offloaded action and then sent back to the wire without application intervention which save CPU cycles. The hairpin is the inverse function of loopback in which application sends a packet then it is received again by the application without being sent to the wire. The hairpin can be used by a number of different NVF, for example load balancer, gateway and so on. As can be seen from the hairpin description, hairpin is basically RX queue connected to TX queue. During the design phase I was thinking of two ways to implement this feature the first one is adding a new rte flow action. and the second one is create a special kind of queue. The advantages of using the queue approch: 1. More control for the application. queue depth (the memory size that should be used). 2. Enable QoS. QoS is normaly a parametr of queue, so in this approch it will be easy to integrate with such system. 3. Native integression with the rte flow API. Just setting the target queue/rss to hairpin queue, will result that the traffic will be routed to the hairpin queue. 4. Enable queue offloading. Each hairpin Rxq can be connected Txq / number of Txqs which can belong to a different ports assuming the PMD supports it. The same goes the other way each hairpin Txq can be connected to one or more Rxqs. This is the reason that both the Txq setup and Rxq setup are getting the hairpin configuration structure. From PMD prespctive the number of Rxq/Txq is the total of standard queues + hairpin queues. To configure hairpin queue the user should call rte_eth_rx_hairpin_queue_setup / rte_eth_tx_hairpin_queue_setup insteed of the normal queue setup functions. The hairpin queues are not part of the normal RSS functiosn. To use the queues the user simply create a flow that points to RSS/queue actions that are hairpin queues. The reason for selecting 2 new functions for hairpin queue setup are: 1. avoid API break. 2. avoid extra and unused parameters. This series must be applied after series[2] [1] https://inbox.dpdk.org/dev/1565703468-55617-1-git-send-email-orika@mellanox.com/ [2] https://inbox.dpdk.org/dev/1569398015-6027-1-git-send-email-viacheslavo@mellanox.com/ Cc: wenzhuo.lu@intel.com Cc: bernard.iremonger@intel.com Cc: thomas@monjalon.net Cc: ferruh.yigit@intel.com Cc: arybchenko@solarflare.com Cc: viacheslavo@mellanox.com ------ V2: - update according to comments from ML. Ori Kam (14): ethdev: add support for hairpin queue net/mlx5: query hca hairpin capabilities net/mlx5: support Rx hairpin queues net/mlx5: prepare txq to work with different types net/mlx5: support Tx hairpin queues net/mlx5: add get hairpin capabilities app/testpmd: add hairpin support net/mlx5: add hairpin binding function net/mlx5: add support for hairpin hrxq net/mlx5: add internal tag item and action net/mlx5: add id generation function net/mlx5: add default flows for hairpin net/mlx5: split hairpin flows doc: add hairpin feature app/test-pmd/parameters.c | 12 + app/test-pmd/testpmd.c | 62 ++++- app/test-pmd/testpmd.h | 1 + doc/guides/rel_notes/release_19_11.rst | 5 + drivers/net/mlx5/mlx5.c | 162 ++++++++++++- drivers/net/mlx5/mlx5.h | 69 +++++- drivers/net/mlx5/mlx5_devx_cmds.c | 194 +++++++++++++++ drivers/net/mlx5/mlx5_ethdev.c | 125 ++++++++-- drivers/net/mlx5/mlx5_flow.c | 393 ++++++++++++++++++++++++++++++- drivers/net/mlx5/mlx5_flow.h | 73 +++++- drivers/net/mlx5/mlx5_flow_dv.c | 231 +++++++++++++++++- drivers/net/mlx5/mlx5_flow_verbs.c | 11 +- drivers/net/mlx5/mlx5_prm.h | 127 +++++++++- drivers/net/mlx5/mlx5_rss.c | 1 + drivers/net/mlx5/mlx5_rxq.c | 318 ++++++++++++++++++++++--- drivers/net/mlx5/mlx5_rxtx.c | 2 +- drivers/net/mlx5/mlx5_rxtx.h | 68 +++++- drivers/net/mlx5/mlx5_trigger.c | 140 ++++++++++- drivers/net/mlx5/mlx5_txq.c | 294 +++++++++++++++++++---- lib/librte_ethdev/rte_ethdev.c | 214 ++++++++++++++++- lib/librte_ethdev/rte_ethdev.h | 126 ++++++++++ lib/librte_ethdev/rte_ethdev_core.h | 27 ++- lib/librte_ethdev/rte_ethdev_version.map | 5 + 23 files changed, 2503 insertions(+), 157 deletions(-)