All of lore.kernel.org
 help / color / mirror / Atom feed
From: Albert Huang <huangjie.albert@bytedance.com>
To: "Michael S . Tsirkin " <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>
Cc: "huangjie.albert" <huangjie.albert@bytedance.com>,
	virtualization@lists.linux-foundation.org (open list:VIRTIO CORE
	AND NET DRIVERS), linux-kernel@vger.kernel.org (open list)
Subject: [PATCH] virtio_ring: Suppress tx interrupt when napi_tx disable
Date: Tue, 21 Mar 2023 16:59:53 +0800	[thread overview]
Message-ID: <20230321085953.24949-1-huangjie.albert@bytedance.com> (raw)

From: "huangjie.albert" <huangjie.albert@bytedance.com>

fix commit 8d622d21d248 ("virtio: fix up virtio_disable_cb")

if we disable the napi_tx. when we triger a tx interrupt, the
vq->event_triggered will be set to true. It will no longer be
set to false. Unless we explicitly call virtqueue_enable_cb_delayed
or virtqueue_enable_cb_prepare

if we disable the napi_tx, It will only be called when the tx ring
buffer is relatively small:
virtio_net->start_xmit:
	if (sq->vq->num_free < 2+MAX_SKB_FRAGS) {
		netif_stop_subqueue(dev, qnum);
		if (!use_napi &&
		    unlikely(!virtqueue_enable_cb_delayed(sq->vq))) {
			/* More just got used, free them then recheck. */
			free_old_xmit_skbs(sq, false);
			if (sq->vq->num_free >= 2+MAX_SKB_FRAGS) {
				netif_start_subqueue(dev, qnum);
				virtqueue_disable_cb(sq->vq);
			}
		}
	}
Because event_triggered is true.Therefore, VRING_AVAIL_F_NO_INTERRUPT or
VRING_PACKED_EVENT_FLAG_DISABLE will not be set.So we update
vring_used_event(&vq->split.vring) or vq->packed.vring.driver->off_wrap
every time we call virtqueue_get_buf_ctx.This will bring more interruptions.

if event_triggered is set to true, do not update vring_used_event(&vq->split.vring)
or vq->packed.vring.driver->off_wrap

Signed-off-by: huangjie.albert <huangjie.albert@bytedance.com>
---
 drivers/virtio/virtio_ring.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index 307e139cb11d..f486cccadbeb 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -795,7 +795,8 @@ static void *virtqueue_get_buf_ctx_split(struct virtqueue *_vq,
 	/* If we expect an interrupt for the next entry, tell host
 	 * by writing event index and flush out the write before
 	 * the read in the next get_buf call. */
-	if (!(vq->split.avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT))
+	if (!(vq->split.avail_flags_shadow & VRING_AVAIL_F_NO_INTERRUPT)
+			&& (vq->event_triggered == false))
 		virtio_store_mb(vq->weak_barriers,
 				&vring_used_event(&vq->split.vring),
 				cpu_to_virtio16(_vq->vdev, vq->last_used_idx));
@@ -1529,7 +1530,8 @@ static void *virtqueue_get_buf_ctx_packed(struct virtqueue *_vq,
 	 * by writing event index and flush out the write before
 	 * the read in the next get_buf call.
 	 */
-	if (vq->packed.event_flags_shadow == VRING_PACKED_EVENT_FLAG_DESC)
+	if (vq->packed.event_flags_shadow == VRING_PACKED_EVENT_FLAG_DESC
+			&& (vq->event_triggered == false))
 		virtio_store_mb(vq->weak_barriers,
 				&vq->packed.vring.driver->off_wrap,
 				cpu_to_le16(vq->last_used_idx));
-- 
2.31.1


             reply	other threads:[~2023-03-21  9:02 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-21  8:59 Albert Huang [this message]
2023-03-22  2:36 ` [PATCH] virtio_ring: Suppress tx interrupt when napi_tx disable Jason Wang
2023-03-22  2:36   ` Jason Wang
2023-03-23  8:01   ` [External] " 黄杰
2023-03-24  3:41     ` Jason Wang
2023-03-24  3:41       ` Jason Wang
2023-03-24  5:59       ` Michael S. Tsirkin
2023-03-24  5:59         ` Michael S. Tsirkin
2023-03-24  6:32         ` Jason Wang
2023-03-24  6:32           ` Jason Wang
2023-03-24  6:42           ` Michael S. Tsirkin
2023-03-24  6:42             ` Michael S. Tsirkin
2023-03-24  6:47             ` Jason Wang
2023-03-24  6:47               ` Jason Wang
2023-03-24  7:00               ` Michael S. Tsirkin
2023-03-24  7:00                 ` Michael S. Tsirkin
2023-03-24  7:37                 ` Jason Wang
2023-03-24  7:37                   ` Jason Wang
2023-03-24  9:05                   ` Michael S. Tsirkin
2023-03-24  9:05                     ` Michael S. Tsirkin
2023-03-24  6:08 ` Michael S. Tsirkin
2023-03-24  6:08   ` Michael S. Tsirkin
2023-03-24  6:37   ` Michael S. Tsirkin
2023-03-24  6:37     ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230321085953.24949-1-huangjie.albert@bytedance.com \
    --to=huangjie.albert@bytedance.com \
    --cc=jasowang@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.