From nobody Sat Sep 9 13:02:55 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RjY735MMxz4t2qX; Sat, 9 Sep 2023 13:02:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RjY734s99z4ldD; Sat, 9 Sep 2023 13:02:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694264575; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=tdc5fSTeGFS/O9AP7Lqu5QzRvHej95ksEn0F3lZJAcw=; b=Y8lLBqRc0N48KMdJzv2Gpe2N9+TV8cZayXV9L99DJ7eCXUPQ85qrcsbYxTisHr6X6UzLkc 5OxeCgLnrOGBJ5fMe8pmaERHRI6havHa+agdH45bdnzhY1Km+for6q49cLbaa1rGMKN7Cr MK7ePClCEwIPS5bJjZ9F7zIkUyMeTlW7xE+k6+DvOjh2+QSERo+cxCf3sus8VKvpEwWy4v zznZR9eUHVsyvUjrkZnL/18lvsRnVRzWJJ6j9jWn0DLEHfIfvjOG+b2cRBZfII7pTF9d0b q6SWwuQQy/MFkiINp/wbExPBGIJzcjptGI02dCCRM/o28t8paEIt+AGKGYYgBg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1694264575; a=rsa-sha256; cv=none; b=pG4/OOH7KdIeftboRa1rVZZwE0CT3fLufqTzpv63VPtlwNrAluHJPGmS3xDbaJ4NYAOObh OEXTtGNTgASB/ddJbKjnBWGCxTV2dAiGKePYjgwd6xg7DUnwa4JxTseeAHJA19mTNbSKa0 dPFAH9F5/hIsbdiXzahNJWoUP/8MGXe4075+irsH/R8ka5hkumjXYs2mhj+W//+efZGh1q E3FGr8Yr+rrhPLLCKZW0jmiSlDdxEbY71U4tqVOTBHFtlX0qo7af3gqJ/9XKRtFHI2NJHB qcnXjYADAk55mRctc0om+/TMsolDSgQyYtStinG7KTDm7mymjnKlrKijgyyzfQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694264575; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=tdc5fSTeGFS/O9AP7Lqu5QzRvHej95ksEn0F3lZJAcw=; b=RKfIDMgyBad6/ABOPqhkQomVbTBjX/529hvVx/EZnc0WmobG9YUJl93oMJRYDZqD1jIQh+ 3CXX38fSXa8urL+ylb+oq7R7o8UqkbIEG8f8MtME2Rge6IVVmO8A+pAIaunEXZ5hCo2Ccc IPozINeUTYBCp+mxqJdglFksqUnTbi8t5fwy9TKDM1ArpXx8vYPigN9R7c3t6AaHfD4CwU pFKU/c1b0oBgb7cJU78zs+RuISlAeIizeqJVgnEDeJWsGvM1ZvwJHqZQNW6YIJKZCEuG65 UaFibJvK0Ge5h3oAGPuzcZwtArSgjqfq2mbNeG9k9LnvXvBALnNEJumrccBlSA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RjY733vWYzB2V; Sat, 9 Sep 2023 13:02:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 389D2tZE017369; Sat, 9 Sep 2023 13:02:55 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 389D2t4D017366; Sat, 9 Sep 2023 13:02:55 GMT (envelope-from git) Date: Sat, 9 Sep 2023 13:02:55 GMT Message-Id: <202309091302.389D2t4D017366@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Wei Hu Subject: git: 55b7a8233e3d - stable/14 - mana: batch ringing RX queue doorbell on receiving packets List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: whu X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 55b7a8233e3da9355d555dff80011a97fac23079 Auto-Submitted: auto-generated The branch stable/14 has been updated by whu: URL: https://cgit.FreeBSD.org/src/commit/?id=55b7a8233e3da9355d555dff80011a97fac23079 commit 55b7a8233e3da9355d555dff80011a97fac23079 Author: Wei Hu AuthorDate: 2023-08-28 09:15:16 +0000 Commit: Wei Hu CommitDate: 2023-09-09 12:51:57 +0000 mana: batch ringing RX queue doorbell on receiving packets It's inefficient to ring the doorbell page every time a WQE is posted to the received queue. Excessive MMIO writes result in CPU spending more time waiting on LOCK instructions (atomic operations), resulting in poor scaling performance. Move the code for ringing doorbell page to where after we have posted all WQEs to the receive queue in mana_poll_rx_cq(). In addition, use the correct WQE count for ringing RQ doorbell. The hardware specification specifies that WQE_COUNT should set to 0 for the Receive Queue. Although currently the hardware doesn't enforce the check, in the future releases it may check on this value. Tested by: whu MFC after: 1 week Sponsored by: Microsoft (cherry picked from commit e4e11c1d07f5d58ff8cf4e07ac8f61eecbbb5417) --- sys/dev/mana/gdma_main.c | 2 +- sys/dev/mana/mana_en.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/sys/dev/mana/gdma_main.c b/sys/dev/mana/gdma_main.c index 2de606d54957..a601873876cb 100644 --- a/sys/dev/mana/gdma_main.c +++ b/sys/dev/mana/gdma_main.c @@ -471,7 +471,7 @@ void mana_gd_wq_ring_doorbell(struct gdma_context *gc, struct gdma_queue *queue) { mana_gd_ring_doorbell(gc, queue->gdma_dev->doorbell, queue->type, - queue->id, queue->head * GDMA_WQE_BU_SIZE, 1); + queue->id, queue->head * GDMA_WQE_BU_SIZE, 0); } void diff --git a/sys/dev/mana/mana_en.c b/sys/dev/mana/mana_en.c index 49558cdc97c6..fa49e06e4862 100644 --- a/sys/dev/mana/mana_en.c +++ b/sys/dev/mana/mana_en.c @@ -1524,7 +1524,7 @@ mana_post_pkt_rxq(struct mana_rxq *rxq) recv_buf_oob = &rxq->rx_oobs[curr_index]; - err = mana_gd_post_and_ring(rxq->gdma_rq, &recv_buf_oob->wqe_req, + err = mana_gd_post_work_request(rxq->gdma_rq, &recv_buf_oob->wqe_req, &recv_buf_oob->wqe_inf); if (err) { mana_err(NULL, "WARNING: rxq %u post pkt err %d\n", @@ -1757,6 +1757,13 @@ mana_poll_rx_cq(struct mana_cq *cq) mana_process_rx_cqe(cq->rxq, cq, &comp[i]); } + if (comp_read > 0) { + struct gdma_context *gc = + cq->rxq->gdma_rq->gdma_dev->gdma_context; + + mana_gd_wq_ring_doorbell(gc, cq->rxq->gdma_rq); + } + tcp_lro_flush_all(&cq->rxq->lro); }