From: Jason Wang <jasowang@redhat.com>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: virtualization@lists.linux-foundation.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
kvm@vger.kernel.org
Subject: Re: [PATCH net-next RFC 0/5] batched tx processing in vhost_net
Date: Thu, 28 Sep 2017 15:16:59 +0800 [thread overview]
Message-ID: <030a3f75-a957-2502-a8cb-e7781827a61c@redhat.com> (raw)
In-Reply-To: <20170928012009-mutt-send-email-mst@kernel.org>
On 2017年09月28日 06:28, Michael S. Tsirkin wrote:
> On Wed, Sep 27, 2017 at 08:27:37AM +0800, Jason Wang wrote:
>>
>> On 2017年09月26日 21:45, Michael S. Tsirkin wrote:
>>> On Fri, Sep 22, 2017 at 04:02:30PM +0800, Jason Wang wrote:
>>>> Hi:
>>>>
>>>> This series tries to implement basic tx batched processing. This is
>>>> done by prefetching descriptor indices and update used ring in a
>>>> batch. This intends to speed up used ring updating and improve the
>>>> cache utilization.
>>> Interesting, thanks for the patches. So IIUC most of the gain is really
>>> overcoming some of the shortcomings of virtio 1.0 wrt cache utilization?
>> Yes.
>>
>> Actually, looks like batching in 1.1 is not as easy as in 1.0.
>>
>> In 1.0, we could do something like:
>>
>> batch update used ring by user copy_to_user()
>> smp_wmb()
>> update used_idx
>> In 1.1, we need more memory barriers, can't benefit from fast copy helpers?
>>
>> for () {
>> update desc.addr
>> smp_wmb()
>> update desc.flag
>> }
> Yes but smp_wmb is a NOP on e.g. x86. We can switch to other types of
> barriers as well.
We need consider non x86 platforms as well. And we meet similar things
on batch reading.
> We do need to do the updates in order, so we might
> need new APIs for that to avoid re-doing the translation all the time.
>
> In 1.0 the last update is a cache miss always. You need batching to get
> less misses. In 1.1 you don't have it so fundamentally there is less
> need for batching. But batching does not always work. DPDK guys (which
> batch things aggressively) already tried 1.1 and saw performance gains
> so we do not need to argue theoretically.
Do they test on non-x86 CPUs? And the prototype should be reviewed
carefully since a bug can boost the performance in this case.
>
>
>
>>> Which is fair enough (1.0 is already deployed) but I would like to avoid
>>> making 1.1 support harder, and this patchset does this unfortunately,
>> I think the new APIs do not expose more internal data structure of virtio
>> than before? (vq->heads has already been used by vhost_net for years).
> For sure we might need to change vring_used_elem.
>
>> Consider the layout is re-designed completely, I don't see an easy method to
>> reuse current 1.0 API for 1.1.
> Current API just says you get buffers then you use them. It is not tied
> to actual separate used ring.
So do this patch I think? It introduces:
int vhost_prefetch_desc_indices(struct vhost_virtqueue *vq,
struct vring_used_elem *heads,
u16 num);
int vhost_add_used_idx(struct vhost_virtqueue *vq, int n);
There's nothing new exposed to vhost_net. (vring_used_elem has been used
by net.c at many places without this patch).
>
>
>>> see comments on individual patches. I'm sure it can be addressed though.
>>>
>>>> Test shows about ~22% improvement in tx pss.
>>> Is this with or without tx napi in guest?
>> MoonGen is used in guest for better numbers.
>>
>> Thanks
> Not sure I understand. Did you set napi_tx to true or false?
MoonGen uses dpdk, so virtio-net pmd is used in guest. (See
http://conferences.sigcomm.org/imc/2015/papers/p275.pdf)
Thanks
>
>>>> Please review.
>>>>
>>>> Jason Wang (5):
>>>> vhost: split out ring head fetching logic
>>>> vhost: introduce helper to prefetch desc index
>>>> vhost: introduce vhost_add_used_idx()
>>>> vhost_net: rename VHOST_RX_BATCH to VHOST_NET_BATCH
>>>> vhost_net: basic tx virtqueue batched processing
>>>>
>>>> drivers/vhost/net.c | 221 ++++++++++++++++++++++++++++----------------------
>>>> drivers/vhost/vhost.c | 165 +++++++++++++++++++++++++++++++------
>>>> drivers/vhost/vhost.h | 9 ++
>>>> 3 files changed, 270 insertions(+), 125 deletions(-)
>>>>
>>>> --
>>>> 2.7.4
next prev parent reply other threads:[~2017-09-28 7:17 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-22 8:02 Jason Wang
2017-09-22 8:02 ` [PATCH net-next RFC 1/5] vhost: split out ring head fetching logic Jason Wang
2017-09-22 8:31 ` Stefan Hajnoczi
2017-09-25 2:03 ` Jason Wang
2017-09-22 8:02 ` [PATCH net-next RFC 2/5] vhost: introduce helper to prefetch desc index Jason Wang
2017-09-22 9:02 ` Stefan Hajnoczi
2017-09-25 2:04 ` Jason Wang
2017-09-26 19:19 ` Michael S. Tsirkin
2017-09-27 0:35 ` Jason Wang
2017-09-27 22:57 ` Michael S. Tsirkin
2017-09-28 7:18 ` Jason Wang
2017-09-28 0:47 ` Willem de Bruijn
2017-09-28 7:44 ` Jason Wang
2017-09-22 8:02 ` [PATCH net-next RFC 3/5] vhost: introduce vhost_add_used_idx() Jason Wang
2017-09-22 9:07 ` Stefan Hajnoczi
2017-09-26 19:13 ` Michael S. Tsirkin
2017-09-27 0:38 ` Jason Wang
2017-09-27 22:58 ` Michael S. Tsirkin
2017-09-28 0:59 ` Willem de Bruijn
2017-09-28 7:19 ` Jason Wang
2017-09-22 8:02 ` [PATCH net-next RFC 4/5] vhost_net: rename VHOST_RX_BATCH to VHOST_NET_BATCH Jason Wang
2017-09-22 8:02 ` [PATCH net-next RFC 5/5] vhost_net: basic tx virtqueue batched processing Jason Wang
2017-09-26 19:25 ` Michael S. Tsirkin
2017-09-27 2:04 ` Jason Wang
2017-09-27 22:19 ` Michael S. Tsirkin
2017-09-28 7:02 ` Jason Wang
2017-09-28 7:52 ` Jason Wang
2017-09-28 0:55 ` Willem de Bruijn
2017-09-28 7:50 ` Jason Wang
2017-09-26 13:45 ` [PATCH net-next RFC 0/5] batched tx processing in vhost_net Michael S. Tsirkin
2017-09-27 0:27 ` Jason Wang
2017-09-27 22:28 ` Michael S. Tsirkin
2017-09-28 7:16 ` Jason Wang [this message]
2017-09-26 19:26 ` Michael S. Tsirkin
2017-09-27 2:06 ` Jason Wang
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=030a3f75-a957-2502-a8cb-e7781827a61c@redhat.com \
--to=jasowang@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome