Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/77076/?format=api
http://patches.dpdk.org/api/patches/77076/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200909155730.29182-1-lance.richardson@broadcom.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20200909155730.29182-1-lance.richardson@broadcom.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20200909155730.29182-1-lance.richardson@broadcom.com", "date": "2020-09-09T15:57:30", "name": "[12/12] net/bnxt: transmit vector mode improvements", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": true, "hash": "078718779da2fb1225234b3f00a301b6b2b97f5c", "submitter": { "id": 1323, "url": "http://patches.dpdk.org/api/people/1323/?format=api", "name": "Lance Richardson", "email": "lance.richardson@broadcom.com" }, "delegate": { "id": 1766, "url": "http://patches.dpdk.org/api/users/1766/?format=api", "username": "ajitkhaparde", "first_name": "Ajit", "last_name": "Khaparde", "email": "ajit.khaparde@broadcom.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200909155730.29182-1-lance.richardson@broadcom.com/mbox/", "series": [ { "id": 12060, "url": "http://patches.dpdk.org/api/series/12060/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12060", "date": "2020-09-09T15:52:53", "name": "net/bnxt: vector PMD improvements", "version": 1, "mbox": "http://patches.dpdk.org/series/12060/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/77076/comments/", "check": "success", "checks": "http://patches.dpdk.org/api/patches/77076/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 6A737A04B5;\n\tWed, 9 Sep 2020 17:57:38 +0200 (CEST)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 498751C115;\n\tWed, 9 Sep 2020 17:57:38 +0200 (CEST)", "from mail-pf1-f195.google.com (mail-pf1-f195.google.com\n [209.85.210.195]) by dpdk.org (Postfix) with ESMTP id 0BA721C112\n for <dev@dpdk.org>; Wed, 9 Sep 2020 17:57:36 +0200 (CEST)", "by mail-pf1-f195.google.com with SMTP id w7so2541467pfi.4\n for <dev@dpdk.org>; Wed, 09 Sep 2020 08:57:35 -0700 (PDT)", "from localhost.localdomain ([192.19.231.250])\n by smtp.gmail.com with ESMTPSA id kt18sm77948pjb.56.2020.09.09.08.57.34\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 09 Sep 2020 08:57:34 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:mime-version\n :content-transfer-encoding;\n bh=hISRRUNg7+Niq+Fa+X0zHfPM0eE3nGBX4GiZaG41v9g=;\n b=JCG3HGns1JbDoBnbvPcAukK6Jyq08V2xHQmV1p9Gl46Qr5DG+vHdMMlcixNdWKrkV6\n LQXA1ERatf5vNUI2CtwCoyUBVQzZqdPDex4gbvDyzFSLHnJxmUayO5qU5dGnQdGpMQBH\n 2aM3zSQRcr3ryN0Mg4oTwiAxdkGuwk4Uoe1lQ=", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version\n :content-transfer-encoding;\n bh=hISRRUNg7+Niq+Fa+X0zHfPM0eE3nGBX4GiZaG41v9g=;\n b=q0+1282pkGhPTKETX0tQu/qXjpDtnScf6I/8mkb/bgnYj7mL7VF7d7iZ5J0ZXcVv2V\n qG12xVTgAvAndKbbjswtp7DwhbeJzbbzqx7vS4sLpK9YsO553qHz5jNwK/+Uvu8WN3e2\n KxKaK6zLkzTSSk4+vcs0w/RABMuNfH+ASSfC3lizueC7IsRsYe1AjTotM3olyae2Ibbr\n fWtV64IZmj7fKDlHdIndnDch5wzOKct/0jWr6plj3j20OK3LETRNvrCmqifQ6tzALqkn\n UBORkMFyy41+b/KLCtZzalrYco/5K4CmfQcAEbX7jkB7iuhUfEq5CCWVt0dAY5SHSrXX\n q5dg==", "X-Gm-Message-State": "AOAM530wapUkr508sXtlxhADLP1sUHjhiTPKrdpRdRLbjBvNkn35pshx\n 4hqN6y5RcIEsdeLpjI+e8g9VHA==", "X-Google-Smtp-Source": "\n ABdhPJzip5BsKG6K9FjKTjrvxzMyjDMn5VbqVeeXyPY+QeTeLhT5NvYjOCocmZdkQ/BsmqxmRcsJxQ==", "X-Received": "by 2002:a17:902:aa8d:: with SMTP id\n d13mr1447191plr.124.1599667055212;\n Wed, 09 Sep 2020 08:57:35 -0700 (PDT)", "From": "Lance Richardson <lance.richardson@broadcom.com>", "To": "Ajit Khaparde <ajit.khaparde@broadcom.com>,\n Somnath Kotur <somnath.kotur@broadcom.com>", "Cc": "dev@dpdk.org", "Date": "Wed, 9 Sep 2020 11:57:30 -0400", "Message-Id": "<20200909155730.29182-1-lance.richardson@broadcom.com>", "X-Mailer": "git-send-email 2.25.1", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[dpdk-dev] [PATCH 12/12] net/bnxt: transmit vector mode improvements", "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>,\n <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>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Improve performance of vector burst transmit function by processing\nmultiple packets per inner loop iteration.\n\nSigned-off-by: Lance Richardson <lance.richardson@broadcom.com>\n---\n drivers/net/bnxt/bnxt_rxtx_vec_sse.c | 96 +++++++++++++++++++---------\n 1 file changed, 66 insertions(+), 30 deletions(-)", "diff": "diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\nindex 362992ceb2..dace2f8a16 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n@@ -316,13 +316,14 @@ bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)\n \tstruct rte_mbuf **free = txq->free;\n \tuint16_t cons = txr->tx_cons;\n \tunsigned int blk = 0;\n+\tuint32_t ring_mask = txr->tx_ring_struct->ring_mask;\n \n \twhile (nr_pkts--) {\n \t\tstruct bnxt_sw_tx_bd *tx_buf;\n \t\tstruct rte_mbuf *mbuf;\n \n \t\ttx_buf = &txr->tx_buf_ring[cons];\n-\t\tcons = RING_NEXT(txr->tx_ring_struct, cons);\n+\t\tcons = (cons + 1) & ring_mask;\n \t\tmbuf = rte_pktmbuf_prefree_seg(tx_buf->mbuf);\n \t\tif (unlikely(mbuf == NULL))\n \t\t\tcontinue;\n@@ -376,18 +377,40 @@ bnxt_handle_tx_cp_vec(struct bnxt_tx_queue *txq)\n \t}\n }\n \n+static inline void\n+bnxt_xmit_one(struct rte_mbuf *mbuf, struct tx_bd_long *txbd,\n+\t struct bnxt_sw_tx_bd *tx_buf)\n+{\n+\t__m128i desc;\n+\n+\ttx_buf->mbuf = mbuf;\n+\ttx_buf->nr_bds = 1;\n+\n+\tdesc = _mm_set_epi64x(mbuf->buf_iova + mbuf->data_off,\n+\t\t\t bnxt_xmit_flags_len(mbuf->data_len,\n+\t\t\t\t\t\t TX_BD_FLAGS_NOCMPL));\n+\tdesc = _mm_blend_epi16(desc, _mm_set_epi16(0, 0, 0, 0, 0, 0,\n+\t\t\t\t\t\t mbuf->data_len, 0), 0x02);\n+\t_mm_store_si128((void *)txbd, desc);\n+}\n+\n static uint16_t\n-bnxt_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n+bnxt_xmit_fixed_burst_vec(struct bnxt_tx_queue *txq, struct rte_mbuf **tx_pkts,\n \t\t\t uint16_t nb_pkts)\n {\n-\tstruct bnxt_tx_queue *txq = tx_queue;\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n-\tuint16_t prod = txr->tx_prod;\n-\tstruct rte_mbuf *tx_mbuf;\n-\tstruct tx_bd_long *txbd = NULL;\n+\tuint16_t tx_prod = txr->tx_prod;\n+\tstruct tx_bd_long *txbd;\n \tstruct bnxt_sw_tx_bd *tx_buf;\n \tuint16_t to_send;\n \n+\ttxbd = &txr->tx_desc_ring[tx_prod];\n+\ttx_buf = &txr->tx_buf_ring[tx_prod];\n+\n+\t/* Prefetch next transmit buffer descriptors. */\n+\trte_prefetch0(txbd);\n+\trte_prefetch0(txbd + 3);\n+\n \tnb_pkts = RTE_MIN(nb_pkts, bnxt_tx_avail(txq));\n \n \tif (unlikely(nb_pkts == 0))\n@@ -395,33 +418,35 @@ bnxt_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n \n \t/* Handle TX burst request */\n \tto_send = nb_pkts;\n-\twhile (to_send) {\n-\t\ttx_mbuf = *tx_pkts++;\n-\t\trte_prefetch0(tx_mbuf);\n-\n-\t\ttx_buf = &txr->tx_buf_ring[prod];\n-\t\ttx_buf->mbuf = tx_mbuf;\n-\t\ttx_buf->nr_bds = 1;\n-\n-\t\ttxbd = &txr->tx_desc_ring[prod];\n-\t\ttxbd->address = tx_mbuf->buf_iova + tx_mbuf->data_off;\n-\t\ttxbd->len = tx_mbuf->data_len;\n-\t\ttxbd->flags_type = bnxt_xmit_flags_len(tx_mbuf->data_len,\n-\t\t\t\t\t\t TX_BD_FLAGS_NOCMPL);\n-\t\tprod = RING_NEXT(txr->tx_ring_struct, prod);\n-\t\tto_send--;\n+\twhile (to_send >= RTE_BNXT_DESCS_PER_LOOP) {\n+\t\t/* Prefetch next transmit buffer descriptors. */\n+\t\trte_prefetch0(txbd + 4);\n+\t\trte_prefetch0(txbd + 7);\n+\n+\t\tbnxt_xmit_one(tx_pkts[0], txbd++, tx_buf++);\n+\t\tbnxt_xmit_one(tx_pkts[1], txbd++, tx_buf++);\n+\t\tbnxt_xmit_one(tx_pkts[2], txbd++, tx_buf++);\n+\t\tbnxt_xmit_one(tx_pkts[3], txbd++, tx_buf++);\n+\n+\t\tto_send -= RTE_BNXT_DESCS_PER_LOOP;\n+\t\ttx_pkts += RTE_BNXT_DESCS_PER_LOOP;\n \t}\n \n-\t/* Request a completion for last packet in burst */\n-\tif (txbd) {\n-\t\ttxbd->opaque = nb_pkts;\n-\t\ttxbd->flags_type &= ~TX_BD_LONG_FLAGS_NO_CMPL;\n+\twhile (to_send) {\n+\t\tbnxt_xmit_one(tx_pkts[0], txbd++, tx_buf++);\n+\t\tto_send--;\n+\t\ttx_pkts++;\n \t}\n \n+\t/* Request a completion for the final packet of burst. */\n \trte_compiler_barrier();\n-\tbnxt_db_write(&txr->tx_db, prod);\n+\ttxbd[-1].opaque = nb_pkts;\n+\ttxbd[-1].flags_type &= ~TX_BD_LONG_FLAGS_NO_CMPL;\n \n-\ttxr->tx_prod = prod;\n+\ttx_prod = RING_ADV(txr->tx_ring_struct, tx_prod, nb_pkts);\n+\tbnxt_db_write(&txr->tx_db, tx_prod);\n+\n+\ttxr->tx_prod = tx_prod;\n \n \treturn nb_pkts;\n }\n@@ -432,6 +457,8 @@ bnxt_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n {\n \tint nb_sent = 0;\n \tstruct bnxt_tx_queue *txq = tx_queue;\n+\tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n+\tuint16_t ring_size = txr->tx_ring_struct->ring_size;\n \n \t/* Tx queue was stopped; wait for it to be restarted */\n \tif (unlikely(!txq->tx_started)) {\n@@ -446,10 +473,19 @@ bnxt_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n \twhile (nb_pkts) {\n \t\tuint16_t ret, num;\n \n+\t\t/*\n+\t\t * Ensure that no more than RTE_BNXT_MAX_TX_BURST packets\n+\t\t * are transmitted before the next completion.\n+\t\t */\n \t\tnum = RTE_MIN(nb_pkts, RTE_BNXT_MAX_TX_BURST);\n-\t\tret = bnxt_xmit_fixed_burst_vec(tx_queue,\n-\t\t\t\t\t\t&tx_pkts[nb_sent],\n-\t\t\t\t\t\tnum);\n+\n+\t\t/*\n+\t\t * Ensure that a ring wrap does not occur within a call to\n+\t\t * bnxt_xmit_fixed_burst_vec().\n+\t\t */\n+\t\tnum = RTE_MIN(num,\n+\t\t\t ring_size - (txr->tx_prod & (ring_size - 1)));\n+\t\tret = bnxt_xmit_fixed_burst_vec(txq, &tx_pkts[nb_sent], num);\n \t\tnb_sent += ret;\n \t\tnb_pkts -= ret;\n \t\tif (ret < num)\n", "prefixes": [ "12/12" ] }{ "id": 77076, "url": "