All of lore.kernel.org
 help / color / mirror / Atom feed
From: xiangxia.m.yue@gmail.com
To: jasowang@redhat.com, mst@redhat.com, makita.toshiaki@lab.ntt.co.jp
Cc: virtualization@lists.linux-foundation.org,
	netdev@vger.kernel.org, Tonghao Zhang <xiangxia.m.yue@gmail.com>
Subject: [PATCH net-next v8 6/7] net: vhost: disable rx wakeup during tx busypoll
Date: Sun, 19 Aug 2018 05:11:25 -0700	[thread overview]
Message-ID: <1534680686-3108-7-git-send-email-xiangxia.m.yue@gmail.com> (raw)
In-Reply-To: <1534680686-3108-1-git-send-email-xiangxia.m.yue@gmail.com>

From: Tonghao Zhang <xiangxia.m.yue@gmail.com>

In the handle_tx, the busypoll will vhost_net_disable/enable_vq
because we have poll the sock. This can improve performance.

This is suggested by Toshiaki Makita and Jason Wang.

If the rx handle is scheduled, we will not enable vq, because it's
not necessary. We do it not in last 'else' because if we receive
the data, but can't queue the rx handle(rx vring is full), then we
enable the vq to avoid case: guest receives the data, vring is not
full then guest can get more data, but vq is disabled, rx vq can't
be wakeup to receive more data.

Topology:
[Host] ->linux bridge -> tap vhost-net ->[Guest]

TCP_STREAM (netperf):
* Without the patch:  37598.20 Mbps, 3.43 us mean latency
* With the patch:     38035.39 Mbps, 3.37 us mean latency

Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
---
 drivers/vhost/net.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 23d7ffc..db63ae2 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -480,6 +480,9 @@ static void vhost_net_busy_poll(struct vhost_net *net,
 	busyloop_timeout = poll_rx ? rvq->busyloop_timeout:
 				     tvq->busyloop_timeout;
 
+	if (!poll_rx)
+		vhost_net_disable_vq(net, rvq);
+
 	preempt_disable();
 	endtime = busy_clock() + busyloop_timeout;
 
@@ -506,6 +509,10 @@ static void vhost_net_busy_poll(struct vhost_net *net,
 	else /* On tx here, sock has no rx data. */
 		vhost_enable_notify(&net->dev, rvq);
 
+	if (!poll_rx &&
+	    !vhost_has_work_pending(&net->dev, VHOST_NET_VQ_RX))
+		vhost_net_enable_vq(net, rvq);
+
 	mutex_unlock(&vq->mutex);
 }
 
-- 
1.8.3.1

  parent reply	other threads:[~2018-08-19 15:23 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-19 12:11 [PATCH net-next v8 0/7] net: vhost: improve performance when enable busyloop xiangxia.m.yue
2018-08-19 12:11 ` [PATCH net-next v8 1/7] net: vhost: lock the vqs one by one xiangxia.m.yue
2018-08-19 12:11 ` xiangxia.m.yue
2018-08-19 12:11 ` [PATCH net-next v8 2/7] net: vhost: replace magic number of lock annotation xiangxia.m.yue
2018-08-19 12:11 ` xiangxia.m.yue
2018-08-19 12:11 ` [PATCH net-next v8 3/7] net: vhost: factor out busy polling logic to vhost_net_busy_poll() xiangxia.m.yue
2018-08-19 12:11 ` xiangxia.m.yue
2018-08-21  3:15   ` Jason Wang
2018-09-09 10:58     ` Tonghao Zhang
2018-08-19 12:11 ` [PATCH net-next v8 4/7] net: vhost: add rx busy polling in tx path xiangxia.m.yue
2018-08-19 12:11 ` xiangxia.m.yue
2018-08-19 12:11 ` [PATCH net-next v8 5/7] net: vhost: introduce bitmap for vhost_poll xiangxia.m.yue
2018-08-19 12:11 ` xiangxia.m.yue
2018-08-21  0:45   ` Jason Wang
2018-08-21  0:45   ` Jason Wang
2018-09-09 10:58     ` Tonghao Zhang
2018-08-19 12:11 ` xiangxia.m.yue [this message]
2018-08-19 12:11 ` [PATCH net-next v8 6/7] net: vhost: disable rx wakeup during tx busypoll xiangxia.m.yue
2018-08-19 12:11 ` [PATCH net-next v8 7/7] net: vhost: make busyloop_intr more accurate xiangxia.m.yue
2018-08-21  0:33   ` Jason Wang
2018-08-21  0:47     ` Jason Wang
2020-06-01 13:26       ` Michael S. Tsirkin
2018-08-21  0:47     ` Jason Wang
2018-08-21  0:33   ` Jason Wang
2018-08-19 12:11 ` xiangxia.m.yue
2018-08-20 20:34 ` [PATCH net-next v8 0/7] net: vhost: improve performance when enable busyloop Michael S. Tsirkin
2018-08-20 20:34 ` 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=1534680686-3108-7-git-send-email-xiangxia.m.yue@gmail.com \
    --to=xiangxia.m.yue@gmail.com \
    --cc=jasowang@redhat.com \
    --cc=makita.toshiaki@lab.ntt.co.jp \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --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.